aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiacomo Pozzoni <giacomopoz@gmail.com>2020-03-04 20:59:04 +0100
committerShauren <shauren.trinity@gmail.com>2021-12-22 21:44:01 +0100
commit6770987d6f1fe408c78f015ff5bed7f4f5b1715d (patch)
treeadbc0c4de980a843616289ecc53d15f630a5147e
parentd89671dd5960a7184b060b47413dfce454cb72c4 (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.cpp10
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),