aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbiglad <none@none>2009-10-09 19:21:31 +0100
committerbiglad <none@none>2009-10-09 19:21:31 +0100
commitc13da994effa8266b4fa3aecacf3fe5c859b76fa (patch)
treea564c93aeafc15a91faa5fd84a3698147e184ae5
parentad9eb5e89df045c6a67fbb42988e6c8921be1417 (diff)
* Fix stop player falling off map or walking throught objects while using ConfusedMovementGenerator (original patch by ?????)
--HG-- branch : trunk
-rw-r--r--src/game/ConfusedMovementGenerator.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/game/ConfusedMovementGenerator.cpp b/src/game/ConfusedMovementGenerator.cpp
index 98a8973612f..23477c6e62f 100644
--- a/src/game/ConfusedMovementGenerator.cpp
+++ b/src/game/ConfusedMovementGenerator.cpp
@@ -23,6 +23,7 @@
#include "Opcodes.h"
#include "ConfusedMovementGenerator.h"
#include "DestinationHolderImp.h"
+#include "VMapFactory.h"
#ifdef MAP_BASED_RAND_GEN
#define rand_norm() unit.rand_norm()
@@ -46,11 +47,20 @@ ConfusedMovementGenerator<T>::Initialize(T &unit)
bool is_water_ok, is_land_ok;
_InitSpecific(unit, is_water_ok, is_land_ok);
+ VMAP::IVMapManager *vMaps = VMAP::VMapFactory::createOrGetVMapManager();
+
for(unsigned int idx=0; idx < MAX_CONF_WAYPOINTS+1; ++idx)
{
const float wanderX=wander_distance*rand_norm() - wander_distance/2;
const float wanderY=wander_distance*rand_norm() - wander_distance/2;
+ const bool isInLoS = vMaps->isInLineOfSight(unit.GetMapId(), x, y, z + 2.0f, i_waypoints[idx][0], i_waypoints[idx][1], z + 2.0f);
+ if (!isInLoS)
+ {
+ i_waypoints[idx][0] = x;
+ i_waypoints[idx][1] = y;
+ }
+
i_waypoints[idx][0] = x + wanderX;
i_waypoints[idx][1] = y + wanderY;