diff --git a/playerbot/WorldPosition.cpp b/playerbot/WorldPosition.cpp index 8072ea765..9e1f68813 100644 --- a/playerbot/WorldPosition.cpp +++ b/playerbot/WorldPosition.cpp @@ -758,14 +758,23 @@ std::vector WorldPosition::getPathStepFrom(const WorldPosition& s return getPathStepFrom(startPos, pathfinder, bot, forceNormalPath); } +bool WorldPosition::isPathTo(const std::vector& path, float const maxDistance) const +{ + float realMaxDistance = maxDistance ? maxDistance : sPlayerbotAIConfig.targetPosRecalcDistance; + return !path.empty() && distance(path.back()) < realMaxDistance; +}; + + bool WorldPosition::cropPathTo(std::vector& path, const float maxDistance) const { + float realMaxDistance = maxDistance ? maxDistance : sPlayerbotAIConfig.targetPosRecalcDistance; + if (path.empty()) return false; auto bestPos = std::min_element(path.begin(), path.end(), [this](WorldPosition i, WorldPosition j) {return this->sqDistance(i) < this->sqDistance(j); }); - bool insRange = this->sqDistance(*bestPos) <= maxDistance * maxDistance; + bool insRange = this->sqDistance(*bestPos) <= realMaxDistance * realMaxDistance; if (bestPos == path.end()) return insRange; diff --git a/playerbot/WorldPosition.h b/playerbot/WorldPosition.h index f2e456600..504729862 100644 --- a/playerbot/WorldPosition.h +++ b/playerbot/WorldPosition.h @@ -3,7 +3,6 @@ #include "Globals/ObjectMgr.h" #include "Spells/SpellMgr.h" -#include "playerbot/PlayerbotAIConfig.h" #include "World/World.h" #include "MotionGenerators/PathFinder.h" @@ -242,8 +241,8 @@ namespace ai std::vector getPathFromPath(const std::vector& startPath, const Unit* bot, const uint8 maxAttempt = 40) const; std::vector getPathFrom(const WorldPosition& startPos, const Unit* bot) { return getPathFromPath({ startPos }, bot); }; std::vector getPathTo(WorldPosition endPos, const Unit* bot) const { return endPos.getPathFrom(*this, bot); } - bool isPathTo(const std::vector& path, float const maxDistance = sPlayerbotAIConfig.targetPosRecalcDistance) const { return !path.empty() && distance(path.back()) < maxDistance; }; - bool cropPathTo(std::vector& path, const float maxDistance = sPlayerbotAIConfig.targetPosRecalcDistance) const; + bool isPathTo(const std::vector& path, float const maxDistance = 0) const; + bool cropPathTo(std::vector& path, const float maxDistance = 0) const; bool canPathTo(const WorldPosition& endPos, const Unit* bot) const { return endPos.isPathTo(getPathTo(endPos, bot)); } float getPathLength(const std::vector& points) const { float dist = 0.0f; for (auto& p : points) if (&p == &points.front()) dist = 0; else dist += std::prev(&p, 1)->distance(p); return dist; }