diff options
Diffstat (limited to 'src/server/game/Movement/MotionMaster.cpp')
-rw-r--r-- | src/server/game/Movement/MotionMaster.cpp | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 6d2cdcb95f..fe8075ddb5 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -32,6 +32,11 @@ #include "TargetedMovementGenerator.h" #include "WaypointMovementGenerator.h" +inline MovementGenerator* GetIdleMovementGenerator() +{ + return sMovementGeneratorRegistry->GetRegistryItem(IDLE_MOTION_TYPE)->Create(); +} + // ---- ChaseRange ---- // ChaseRange::ChaseRange(float range) : MinRange(range > CONTACT_DISTANCE ? 0 : range - CONTACT_DISTANCE), MinTolerance(range), MaxRange(range + CONTACT_DISTANCE), MaxTolerance(range) { } @@ -59,9 +64,9 @@ bool ChaseAngle::IsAngleOkay(float relativeAngle) const return (std::min(diff, float(2 * M_PI) - diff) <= Tolerance); } -inline bool isStatic(MovementGenerator* mv) +inline bool isStatic(MovementGenerator* movement) { - return (mv == &si_idleMovement); + return (movement == GetIdleMovementGenerator()); } void MotionMaster::Initialize() @@ -80,16 +85,7 @@ void MotionMaster::Initialize() // set new default movement generator void MotionMaster::InitDefault() { - // Xinef: Do not allow to initialize any motion generator for dead creatures - if (_owner->GetTypeId() == TYPEID_UNIT && _owner->IsAlive()) - { - MovementGenerator* movement = FactorySelector::selectMovementGenerator(_owner->ToCreature()); - Mutate(!movement ? &si_idleMovement : movement, MOTION_SLOT_IDLE); - } - else - { - Mutate(&si_idleMovement, MOTION_SLOT_IDLE); - } + Mutate(FactorySelector::SelectMovementGenerator(_owner), MOTION_SLOT_IDLE); } MotionMaster::~MotionMaster() @@ -236,7 +232,7 @@ void MotionMaster::MoveIdle() { //! Should be preceded by MovementExpired or Clear if there's an overlying movementgenerator active if (empty() || !isStatic(top())) - Mutate(&si_idleMovement, MOTION_SLOT_IDLE); + Mutate(GetIdleMovementGenerator(), MOTION_SLOT_IDLE); } void MotionMaster::MoveRandom(float wanderDistance) |