26#define MIN_QUIET_DISTANCE 28.0f
27#define MAX_QUIET_DISTANCE 43.0f
51 if (!owner || !owner->
IsAlive())
67 if (!owner || !owner->
IsAlive())
119 if (!owner || !owner->
IsAlive())
142 _path = std::make_unique<PathGenerator>(owner);
143 _path->SetPathLengthLimit(30.0f);
166 float casterDistance, casterAngle;
169 casterDistance = fleeTarget->GetDistance(owner);
170 if (casterDistance > 0.2f)
171 casterAngle = fleeTarget->GetAbsoluteAngle(owner);
173 casterAngle =
frand(0.0f, 2.0f *
float(
M_PI));
177 casterDistance = 0.0f;
178 casterAngle =
frand(0.0f, 2.0f *
float(
M_PI));
181 float distance, angle;
185 angle = casterAngle +
frand(-
float(
M_PI) / 8.0f,
float(
M_PI) / 8.0f);
190 angle = -casterAngle +
frand(-
float(
M_PI) / 4.0f,
float(
M_PI) / 4.0f);
205 if (!owner || !owner->
IsAlive())
236 if (
CreatureAI* AI = ownerCreature ? ownerCreature->
AI() :
nullptr)
#define MAX_QUIET_DISTANCE
#define MIN_QUIET_DISTANCE
@ MOTION_PRIORITY_HIGHEST
@ TIMED_FLEEING_MOTION_TYPE
@ MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING
@ MOVEMENTGENERATOR_FLAG_DEACTIVATED
@ MOVEMENTGENERATOR_FLAG_FINALIZED
@ MOVEMENTGENERATOR_FLAG_TRANSITORY
@ MOVEMENTGENERATOR_FLAG_INTERRUPTED
@ MOVEMENTGENERATOR_FLAG_INITIALIZED
@ MOVEMENTGENERATOR_FLAG_SPEED_UPDATE_PENDING
float frand(float min, float max)
uint32 urand(uint32 min, uint32 max)
@ UNIT_STATE_FLEEING_MOVE
void GetPoint(Unit *owner, Position &position) const
void Deactivate(Unit *owner) override
void Reset(Unit *owner) override
bool Update(Unit *owner, uint32 diff) override
~FleeingMovementGenerator()
std::unique_ptr< PathGenerator > _path
void SetTargetLocation(Unit *owner)
ObjectGuid _fleeTargetGUID
void Initialize(Unit *owner) override
FleeingMovementGenerator(ObjectGuid fleeTargetGUID, Scripting::v2::ActionResultSetter< MovementStopReason > &&scriptResult={})
MovementGeneratorType GetMovementGeneratorType() const override
void Finalize(Unit *owner, bool, bool) 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)
TimeTracker _totalFleeTime
bool Update(Unit *, uint32) override
MovementGeneratorType GetMovementGeneratorType() const override
void Finalize(Unit *, bool, bool) override
virtual void AttackStart(Unit *victim)
void ClearUnitState(uint32 f)
virtual bool IsMovementPreventedByCasting() const
void AddUnitState(uint32 f)
virtual void SetTarget(ObjectGuid const &)=0
bool HasUnitState(const uint32 f) const
std::unique_ptr< Movement::MoveSpline > movespline
bool IsWithinLOS(float x, float y, float z, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing) const
void MovePositionToFirstCollision(Position &pos, float dist, float angle) const
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
constexpr float GetPositionX() const
constexpr float GetPositionY() const
constexpr void GetPosition(float &x, float &y) const
constexpr float GetPositionZ() const