diff options
Diffstat (limited to 'src/game/ConfusedMovementGenerator.cpp')
-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; |