summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorkrzys-h <krzys_h@interia.pl>2014-10-20 20:44:57 +0200
committerkrzys-h <krzys_h@interia.pl>2014-10-20 20:48:03 +0200
commitcf7be276dcfac10891422773cee79da9a5e09d6c (patch)
tree13aee6be628c264a2d2a1007229b2d7c063fe6c0 /src
parent02d23f8a7ff6ba45eed155a5b9697b467ae17638 (diff)
downloadcolobot-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.cpp11
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);
}
}
}