diff options
-rw-r--r-- | src/server/game/Movement/MotionMaster.cpp | 42 | ||||
-rw-r--r-- | src/server/game/Movement/MotionMaster.h | 3 |
2 files changed, 17 insertions, 28 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 diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index 8ed38897ea5..afe61a6dd55 100644 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -122,7 +122,7 @@ class TC_GAME_API MotionMaster // Removes first found movement // NOTE: MOTION_SLOT_DEFAULT will be autofilled with IDLE_MOTION_TYPE void Remove(MovementGeneratorType type, MovementSlot slot = MOTION_SLOT_ACTIVE); - // NOTE: NOTE: MOTION_SLOT_DEFAULT wont be affected + // NOTE: MOTION_SLOT_DEFAULT wont be affected void Clear(); // Removes all movements for the given MovementSlot // NOTE: MOTION_SLOT_DEFAULT will be autofilled with IDLE_MOTION_TYPE @@ -189,6 +189,7 @@ class TC_GAME_API MotionMaster bool HasFlag(uint8 const flag) const { return (_flags & flag) != 0; } void RemoveFlag(uint8 const flag) { _flags &= ~flag; } + void Remove(MotionMasterContainer::iterator iterator, bool active, bool movementInform); void Pop(bool active, bool movementInform); void DirectInitialize(); void DirectClear(); |