aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Movement/MotionMaster.cpp42
-rw-r--r--src/server/game/Movement/MotionMaster.h3
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();