diff options
author | krzys-h <krzys_h@interia.pl> | 2014-10-20 20:44:57 +0200 |
---|---|---|
committer | krzys-h <krzys_h@interia.pl> | 2014-10-20 20:48:03 +0200 |
commit | cf7be276dcfac10891422773cee79da9a5e09d6c (patch) | |
tree | 13aee6be628c264a2d2a1007229b2d7c063fe6c0 /src | |
parent | 02d23f8a7ff6ba45eed155a5b9697b467ae17638 (diff) | |
download | colobot-cf7be276dcfac10891422773cee79da9a5e09d6c.tar.gz colobot-cf7be276dcfac10891422773cee79da9a5e09d6c.tar.bz2 colobot-cf7be276dcfac10891422773cee79da9a5e09d6c.zip |
Possibly fixed goto() by changing safety margin
TODO: More testing
Closes #326
Diffstat (limited to 'src')
-rw-r--r-- | src/object/task/taskgoto.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
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); } } } |