aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Movement/MotionMaster.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Movement/MotionMaster.cpp')
-rw-r--r--src/server/game/Movement/MotionMaster.cpp73
1 files changed, 45 insertions, 28 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index a29684dfbe2..0e6b216aa44 100644
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -117,6 +117,17 @@ void MotionMaster::Clear(bool reset /*= true*/)
DirectClean(reset);
}
+void MotionMaster::Clear(MovementSlot slot)
+{
+ if (empty() || slot >= MAX_MOTION_SLOT)
+ return;
+
+ if (_cleanFlag & MMCF_UPDATE)
+ DelayedClean(slot);
+ else
+ DirectClean(slot);
+}
+
void MotionMaster::MovementExpired(bool reset /*= true*/)
{
if (_cleanFlag & MMCF_UPDATE)
@@ -131,29 +142,6 @@ void MotionMaster::MovementExpired(bool reset /*= true*/)
DirectExpire(reset);
}
-void MotionMaster::ExpireMovement(MovementSlot slot)
-{
- if (empty() || slot >= MAX_MOTION_SLOT)
- return;
-
- if (MovementGenerator* motion = GetMotionSlot(slot))
- {
- DirectDelete(motion);
- _slot[slot] = nullptr;
- }
-
- if (!top())
- {
- while (!empty() && !top())
- --_top;
-
- if (empty())
- Initialize();
- else if (NeedInitTop())
- InitTop();
- }
-}
-
MovementGeneratorType MotionMaster::GetCurrentMovementGeneratorType() const
{
if (empty())
@@ -754,7 +742,7 @@ void MotionMaster::InitTop()
void MotionMaster::Mutate(MovementGenerator *m, MovementSlot slot)
{
- if (MovementGenerator *curr = _slot[slot])
+ if (MovementGenerator* curr = _slot[slot])
{
_slot[slot] = nullptr; // in case a new one is generated in this slot during directdelete
if (_top == slot && (_cleanFlag & MMCF_UPDATE))
@@ -781,7 +769,7 @@ void MotionMaster::DirectClean(bool reset)
{
while (size() > 1)
{
- MovementGenerator *curr = top();
+ MovementGenerator* curr = top();
pop();
if (curr)
DirectDelete(curr);
@@ -800,18 +788,47 @@ void MotionMaster::DelayedClean()
{
while (size() > 1)
{
- MovementGenerator *curr = top();
+ MovementGenerator* curr = top();
pop();
if (curr)
DelayedDelete(curr);
}
}
+void MotionMaster::DirectClean(MovementSlot slot)
+{
+ if (MovementGenerator* motion = GetMotionSlot(slot))
+ {
+ _slot[slot] = nullptr;
+ DirectDelete(motion);
+ }
+
+ while (!empty() && !top())
+ --_top;
+
+ if (empty())
+ Initialize();
+ else if (NeedInitTop())
+ InitTop();
+}
+
+void MotionMaster::DelayedClean(MovementSlot slot)
+{
+ if (MovementGenerator* motion = GetMotionSlot(slot))
+ {
+ _slot[slot] = nullptr;
+ DelayedDelete(motion);
+ }
+
+ while (!empty() && !top())
+ --_top;
+}
+
void MotionMaster::DirectExpire(bool reset)
{
if (size() > 1)
{
- MovementGenerator *curr = top();
+ MovementGenerator* curr = top();
pop();
DirectDelete(curr);
}
@@ -831,7 +848,7 @@ void MotionMaster::DelayedExpire()
{
if (size() > 1)
{
- MovementGenerator *curr = top();
+ MovementGenerator* curr = top();
pop();
DelayedDelete(curr);
}