From cf7be276dcfac10891422773cee79da9a5e09d6c Mon Sep 17 00:00:00 2001 From: krzys-h Date: Mon, 20 Oct 2014 20:44:57 +0200 Subject: Possibly fixed goto() by changing safety margin TODO: More testing Closes #326 --- src/object/task/taskgoto.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/object/task/taskgoto.cpp b/src/object/task/taskgoto.cpp index 2ddb92e..46629e0 100644 --- a/src/object/task/taskgoto.cpp +++ b/src/object/task/taskgoto.cpp @@ -37,7 +37,12 @@ const float FLY_DIST_GROUND = 80.0f; // minimum distance to remain on the ground const float FLY_DEF_HEIGHT = 50.0f; // default flying height -const float BM_DIM_STEP = 5.0f; + +// Settings that define goto() accuracy: +const float BM_DIM_STEP = 5.0f; // Size of one pixel on the bitmap. Setting 5 means that 5x5 square (in game units) will be represented by 1 px on the bitmap. Decreasing this value will make a bigger bitmap, and may increase accuracy. TODO: Check how it actually impacts goto() accuracy +const float BEAM_ACCURACY = 5.0f; // higher value = more accurate, but slower +const float SAFETY_MARGIN = 0.5f; // Smallest distance between two objects. Smaller = less "no route to destination", but higher probability of collisions between objects. +// Changing SAFETY_MARGIN (old value was 4.0f) seems to have fixed many issues with goto(). TODO: maybe we could make it even smaller? Did changing it introduce any new bugs? @@ -1739,7 +1744,7 @@ Error CTaskGoto::BeamSearch(const Math::Vector &start, const Math::Vector &goal, m_bmStep ++; len = Math::DistanceProjected(start, goal); - step = len/5.0f; + step = len/BEAM_ACCURACY; if ( step < BM_DIM_STEP*2.1f ) step = BM_DIM_STEP*2.1f; if ( step > 20.0f ) step = 20.0f; nbIter = 200; // in order not to lower the framerate @@ -1969,7 +1974,7 @@ void CTaskGoto::BitmapObject() } if ( type == OBJECT_PARA ) oRadius -= 2.0f; - BitmapSetCircle(oPos, oRadius+iRadius+4.0f); + BitmapSetCircle(oPos, oRadius+iRadius+SAFETY_MARGIN); } } } -- cgit v1.2.3-1-g7c22