From c13da994effa8266b4fa3aecacf3fe5c859b76fa Mon Sep 17 00:00:00 2001 From: biglad Date: Fri, 9 Oct 2009 19:21:31 +0100 Subject: * Fix stop player falling off map or walking throught objects while using ConfusedMovementGenerator (original patch by ?????) --HG-- branch : trunk --- src/game/ConfusedMovementGenerator.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') 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::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; -- cgit v1.2.3