80 if (!owner || !owner->
IsAlive())
109 if (cOwner->IsIgnoringChaseRange())
141 _path = std::make_unique<PathGenerator>(owner);
154 if (diffUpper < diffLower)
155 tAngle =
_angle->UpperBound();
157 tAngle =
_angle->LowerBound();
166 bool allowShortcut =
false;
169 if (target->
GetGUID() == oPet->GetOwnerGUID())
170 allowShortcut =
true;
173 bool success =
_path->CalculatePath(x, y, z, allowShortcut);
static bool PositionOkay(Unit *owner, Unit *target, Optional< float > minDistance, Optional< float > maxDistance, Optional< ChaseAngle > angle)
static void DoMovementInform(Unit *owner, Unit *target)
#define ASSERT_NOTNULL(pointer)
static bool PositionOkay(Unit *owner, Unit *target, float range, Optional< ChaseAngle > angle={})
static void DoMovementInform(Unit *owner, Unit *target)
#define FOLLOW_RANGE_TOLERANCE
@ MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING
@ MOVEMENTGENERATOR_FLAG_DEACTIVATED
@ MOVEMENTGENERATOR_FLAG_FINALIZED
@ MOVEMENTGENERATOR_FLAG_TRANSITORY
@ MOVEMENTGENERATOR_FLAG_INFORM_ENABLED
@ MOVEMENTGENERATOR_FLAG_INITIALIZED
std::optional< T > Optional
Optional helper class to wrap optional values within.
ObjectGuid const & GetGUID() const
void Reset(Unit *) override
bool Update(Unit *, uint32) override
Optional< ChaseAngle const > _angle
void Finalize(Unit *, bool, bool) override
FollowMovementGenerator(Unit *target, float range, Optional< ChaseAngle > angle, Optional< Milliseconds > duration, bool ignoreTargetWalk=false, Scripting::v2::ActionResultSetter< MovementStopReason > &&scriptResult={})
Optional< TimeTracker > _duration
~FollowMovementGenerator()
void Initialize(Unit *) override
Optional< Position > _lastTargetPosition
std::unique_ptr< PathGenerator > _path
void UpdatePetSpeed(Unit *owner)
static constexpr uint32 CHECK_INTERVAL
void Deactivate(Unit *) override
void SetScriptResult(MovementStopReason reason)
void AddFlag(uint16 const flag)
Scripting::v2::ActionResultSetter< MovementStopReason > ScriptResult
bool HasFlag(uint16 const flag) const
void RemoveFlag(uint16 const flag)
void SetWalk(bool enable)
void MovebyPath(std::span< Vector3 const > path, int32 pointId=0)
void SetFacing(float angle)
LowType GetCounter() const
void ClearUnitState(uint32 f)
virtual bool IsMovementPreventedByCasting() const
ObjectGuid GetOwnerGUID() const override
float GetCombatReach() const override
void AddUnitState(uint32 f)
bool HasUnitState(const uint32 f) const
std::unique_ptr< Movement::MoveSpline > movespline
void UpdateAllowedPositionZ(float x, float y, float &z, float *groundZ=nullptr) const
void GetNearPoint(WorldObject const *searcher, float &x, float &y, float &z, float distance2d, float absAngle) const
float GetRelativeAngle(float x, float y) const
static float NormalizeOrientation(float o)
float ToAbsoluteAngle(float relAngle) const
constexpr void GetPosition(float &x, float &y) const
constexpr bool IsInDist(float x, float y, float z, float dist) const
constexpr float GetOrientation() const