diff options
Diffstat (limited to 'src/server/game/Movement/MotionMaster.cpp')
-rw-r--r-- | src/server/game/Movement/MotionMaster.cpp | 42 |
1 files changed, 15 insertions, 27 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 2114b94f6a4..9f36af744b1 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -363,12 +363,7 @@ void MotionMaster::Remove(MovementGenerator* movement, MovementSlot slot/* = MOT { auto itr = _generators.find(movement); if (itr != _generators.end()) - { - MovementGenerator* pointer = *itr; - bool const top = GetCurrentMovementGenerator() == pointer; - _generators.erase(pointer); - Delete(pointer, top, false); - } + Remove(itr, GetCurrentMovementGenerator() == *itr, false); } break; default: @@ -409,12 +404,7 @@ void MotionMaster::Remove(MovementGeneratorType type, MovementSlot slot/* = MOTI }); if (itr != _generators.end()) - { - MovementGenerator* pointer = *itr; - bool const top = GetCurrentMovementGenerator() == pointer; - _generators.erase(pointer); - Delete(pointer, top, false); - } + Remove(itr, GetCurrentMovementGenerator() == *itr, false); } break; default: @@ -1079,13 +1069,18 @@ void MotionMaster::LaunchMoveSpline(Movement::MoveSplineInit&& init, uint32 id/* /******************** Private methods ********************/ -void MotionMaster::Pop(bool active, bool movementInform) +void MotionMaster::Remove(MotionMasterContainer::iterator iterator, bool active, bool movementInform) { - MovementGenerator* pointer = *_generators.begin(); - _generators.erase(pointer); + MovementGenerator* pointer = *iterator; + _generators.erase(iterator); Delete(pointer, active, movementInform); } +void MotionMaster::Pop(bool active, bool movementInform) +{ + Remove(_generators.begin(), active, movementInform); +} + void MotionMaster::DirectInitialize() { // Clear ALL movement generators (including default) @@ -1180,14 +1175,11 @@ void MotionMaster::DirectAdd(MovementGenerator* movement, MovementSlot slot/* = { if (movement->Priority >= (*_generators.begin())->Priority) { - MovementGenerator* pointer = *_generators.begin(); - if (movement->Priority == pointer->Priority) - { - _generators.erase(pointer); - Delete(pointer, true, false); - } + auto itr = _generators.begin(); + if (movement->Priority == (*itr)->Priority) + Remove(itr, true, false); else - pointer->Deactivate(_owner); + (*itr)->Deactivate(_owner); } else { @@ -1197,11 +1189,7 @@ void MotionMaster::DirectAdd(MovementGenerator* movement, MovementSlot slot/* = }); if (itr != _generators.end()) - { - MovementGenerator* pointer = *itr; - _generators.erase(pointer); - Delete(pointer, false, false); - } + Remove(itr, false, false); } } else |