From d1080af8db63c78986a7fcc94fcfb2fdfe817734 Mon Sep 17 00:00:00 2001 From: Giacomo Pozzoni Date: Wed, 4 Mar 2020 20:59:04 +0100 Subject: Core/Objects: MovePositonToFirstCollision will now use detour raycasts to determine terrain obstacles (#24232) * Core/Objects: MovePositonToFirstCollision will now use detour raycasts to determine terrain obstacles * Added missing includes * Update Object.cpp Co-authored-by: Giacomo Pozzoni --- src/server/game/Entities/Object/Object.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/server') diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 63358258fff..687bdfa79bd 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -24,6 +24,7 @@ #include "Creature.h" #include "GameTime.h" #include "GridNotifiersImpl.h" +#include "G3DPosition.hpp" #include "Item.h" #include "Log.h" #include "Map.h" @@ -33,6 +34,7 @@ #include "ObjectAccessor.h" #include "ObjectMgr.h" #include "OutdoorPvPMgr.h" +#include "PathGenerator.h" #include "Player.h" #include "ReputationMgr.h" #include "SpellAuraEffects.h" @@ -3255,6 +3257,14 @@ void WorldObject::MovePositionToFirstCollision(Position &pos, float dist, float return; } + // Use a detour raycast to get our first collision point + PathGenerator path(this); + path.CalculatePath(destx, desty, destz, false, true); + G3D::Vector3 result = path.GetPath().back(); + destx = result.x; + desty = result.y; + destz = result.z; + float halfHeight = GetCollisionHeight() * 0.5f; UpdateAllowedPositionZ(destx, desty, destz); bool col = VMAP::VMapFactory::createOrGetVMapManager()->getObjectHitPos(GetMapId(), -- cgit v1.2.3