26#define MIN_QUIET_DISTANCE 28.0f
27#define MAX_QUIET_DISTANCE 43.0f
47 if (!owner || !owner->
IsAlive())
63 if (!owner || !owner->
IsAlive())
112 if (!owner || !owner->
IsAlive())
135 _path = std::make_unique<PathGenerator>(owner);
136 _path->SetPathLengthLimit(30.0f);
159 float casterDistance, casterAngle;
162 casterDistance = fleeTarget->GetDistance(owner);
163 if (casterDistance > 0.2f)
164 casterAngle = fleeTarget->GetAbsoluteAngle(owner);
166 casterAngle =
frand(0.0f, 2.0f *
float(
M_PI));
170 casterDistance = 0.0f;
171 casterAngle =
frand(0.0f, 2.0f *
float(
M_PI));
174 float distance, angle;
178 angle = casterAngle +
frand(-
float(
M_PI) / 8.0f,
float(
M_PI) / 8.0f);
183 angle = -casterAngle +
frand(-
float(
M_PI) / 4.0f,
float(
M_PI) / 4.0f);
198 if (!owner || !owner->
IsAlive())
227 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
FleeingMovementGenerator(ObjectGuid fleeTargetGUID)
void Reset(Unit *owner) override
bool Update(Unit *owner, uint32 diff) override
std::unique_ptr< PathGenerator > _path
void SetTargetLocation(Unit *owner)
ObjectGuid _fleeTargetGUID
void Initialize(Unit *owner) override
MovementGeneratorType GetMovementGeneratorType() const override
void Finalize(Unit *owner, bool, bool) override
void AddFlag(uint16 const flag)
bool HasFlag(uint16 const flag) const
void RemoveFlag(uint16 const flag)
void SetWalk(bool enable)
void MovebyPath(PointsArray const &path, int32 pointId=0)
static Creature * ToCreature(Object *o)
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)
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