diff options
author | Giacomo Pozzoni <giacomopoz@gmail.com> | 2020-03-04 20:59:04 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-22 21:44:01 +0100 |
commit | 6770987d6f1fe408c78f015ff5bed7f4f5b1715d (patch) | |
tree | adbc0c4de980a843616289ecc53d15f630a5147e | |
parent | d89671dd5960a7184b060b47413dfce454cb72c4 (diff) |
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 <giacomopoz@gmail.com>
(cherry picked from commit d1080af8db63c78986a7fcc94fcfb2fdfe817734)
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 0ea32573030..05e1b688a89 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -27,6 +27,7 @@ #include "DB2Stores.h" #include "GameTime.h" #include "GridNotifiersImpl.h" +#include "G3DPosition.hpp" #include "InstanceScenario.h" #include "Item.h" #include "Log.h" @@ -36,6 +37,7 @@ #include "ObjectAccessor.h" #include "ObjectMgr.h" #include "OutdoorPvPMgr.h" +#include "PathGenerator.h" #include "PhasingHandler.h" #include "Player.h" #include "ReputationMgr.h" @@ -3190,6 +3192,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(PhasingHandler::GetTerrainMapId(GetPhaseShift(), GetMap(), pos.m_positionX, pos.m_positionY), |