diff options
author | biglad <none@none> | 2009-10-09 19:21:31 +0100 |
---|---|---|
committer | biglad <none@none> | 2009-10-09 19:21:31 +0100 |
commit | c13da994effa8266b4fa3aecacf3fe5c859b76fa (patch) | |
tree | a564c93aeafc15a91faa5fd84a3698147e184ae5 /src | |
parent | ad9eb5e89df045c6a67fbb42988e6c8921be1417 (diff) |
* Fix stop player falling off map or walking throught objects while using ConfusedMovementGenerator (original patch by ?????)
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/game/ConfusedMovementGenerator.cpp | 10 |
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; |