From e8961687692c10c72c23695bd72aac07551879bc Mon Sep 17 00:00:00 2001 From: Yunfan Li Date: Sun, 17 Sep 2023 23:52:06 +0800 Subject: [PATCH] movement for fly & swimming --- src/strategy/actions/FollowActions.cpp | 2 +- src/strategy/actions/MovementActions.cpp | 9 ++++++--- src/strategy/actions/MovementActions.h | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/strategy/actions/FollowActions.cpp b/src/strategy/actions/FollowActions.cpp index ee4dc11c..a5018fd2 100644 --- a/src/strategy/actions/FollowActions.cpp +++ b/src/strategy/actions/FollowActions.cpp @@ -87,7 +87,7 @@ bool FollowAction::isUseful() if (Formation::IsNullLocation(loc) || bot->GetMapId() != loc.GetMapId()) return false; - distance = sServerFacade->GetDistance2d(bot, loc.GetPositionX(), loc.GetPositionY()); + distance = bot->GetDistance(loc.GetPositionX(), loc.GetPositionY(), loc.GetPositionZ()); } return sServerFacade->IsDistanceGreaterThan(distance, formation->GetMaxDistance()); diff --git a/src/strategy/actions/MovementActions.cpp b/src/strategy/actions/MovementActions.cpp index b898ff49..3919df3f 100644 --- a/src/strategy/actions/MovementActions.cpp +++ b/src/strategy/actions/MovementActions.cpp @@ -148,7 +148,7 @@ bool MovementAction::MoveTo(uint32 mapId, float x, float y, float z, bool idle, // if (bot->Unit::IsFalling()) { // bot->Say("I'm falling", LANG_UNIVERSAL); // } - float distance = bot->GetDistance2d(x, y); + float distance = bot->GetDistance(x, y, z); if (distance > sPlayerbotAIConfig->contactDistance) { WaitForReach(distance); @@ -166,7 +166,7 @@ bool MovementAction::MoveTo(uint32 mapId, float x, float y, float z, bool idle, MotionMaster &mm = *bot->GetMotionMaster(); mm.Clear(); - mm.MovePoint(mapId, x, y, SearchBestGroundZForPath(x, y, z), generatePath); + mm.MovePoint(mapId, x, y, SearchBestGroundZForPath(x, y, z, generatePath), generatePath); AI_VALUE(LastMovement&, "last movement").Set(mapId, x, y, z, bot->GetOrientation()); return true; } @@ -1268,8 +1268,11 @@ bool MovementAction::MoveInside(uint32 mapId, float x, float y, float z, float d return MoveNear(mapId, x, y, z, distance); } -float MovementAction::SearchBestGroundZForPath(float x, float y, float z, float range) +float MovementAction::SearchBestGroundZForPath(float x, float y, float z, bool generatePath, float range) { + if (!generatePath) { + return z; + } float modified_z; float delta; for (delta = 0.0f; delta <= range / 2; delta++) { diff --git a/src/strategy/actions/MovementActions.h b/src/strategy/actions/MovementActions.h index e8c6a991..b442c3f1 100644 --- a/src/strategy/actions/MovementActions.h +++ b/src/strategy/actions/MovementActions.h @@ -41,7 +41,7 @@ class MovementAction : public Action bool MoveInside(uint32 mapId, float x, float y, float z, float distance = sPlayerbotAIConfig->followDistance); void CreateWp(Player* wpOwner, float x, float y, float z, float o, uint32 entry, bool important = false); private: - float SearchBestGroundZForPath(float x, float y, float z, float range = 10.0f); + float SearchBestGroundZForPath(float x, float y, float z, bool generatePath, float range = 10.0f); }; class FleeAction : public MovementAction