29#define MIN_QUIET_DISTANCE 28.0f
30#define MAX_QUIET_DISTANCE 43.0f
52 if (!owner || !owner->IsAlive())
59 SetTargetLocation(owner);
68 return DoInitialize(owner);
74 if (!owner || !owner->IsAlive())
91 SetTargetLocation(owner);
139 if (!owner || !owner->IsAlive())
151 GetPoint(owner, destination);
162 _path = std::make_unique<PathGenerator>(owner);
163 _path->SetPathLengthLimit(30.0f);
181 _timer.Reset(traveltime +
urand(800, 1500));
187 float casterDistance, casterAngle;
190 casterDistance = fleeTarget->GetDistance(owner);
191 if (casterDistance > 0.2f)
192 casterAngle = fleeTarget->GetAbsoluteAngle(owner);
194 casterAngle =
frand(0.0f, 2.0f *
float(
M_PI));
198 casterDistance = 0.0f;
199 casterAngle =
frand(0.0f, 2.0f *
float(
M_PI));
202 float distance, angle;
206 angle = casterAngle +
frand(-
float(
M_PI) / 8.0f,
float(
M_PI) / 8.0f);
211 angle = -casterAngle +
frand(-
float(
M_PI) / 4.0f,
float(
M_PI) / 4.0f);
219 owner->MovePositionToFirstCollision(position, distance, angle);
243 if (!owner || !owner->
IsAlive())
263 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 SetTarget(ObjectGuid guid) override
void GetPoint(T *, Position &position)
FleeingMovementGenerator(ObjectGuid fleeTargetGUID)
MovementGeneratorType GetMovementGeneratorType() const override
void DoFinalize(T *, bool, bool)
void SetTargetLocation(T *)
bool DoUpdate(T *, uint32)
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)
static ObjectGuid GetGUID(Object const *o)
TimeTracker _totalFleeTime
bool Update(Unit *, uint32) override
MovementGeneratorType GetMovementGeneratorType() const override
void Finalize(Unit *, bool, bool) override
void ClearUnitState(uint32 f)
void StopMoving(bool force=false)
Unit * EnsureVictim() const
void RemoveUnitFlag(UnitFlags flags)
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
float GetPositionZ() const
float GetPositionX() const
void GetPosition(float &x, float &y) const
float GetPositionY() const