aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Movement/MotionMaster.cpp
diff options
context:
space:
mode:
authorccrs <ccrs@users.noreply.github.com>2017-08-08 19:35:13 +0200
committerccrs <ccrs@users.noreply.github.com>2017-08-08 19:35:13 +0200
commitee2d7c1d53986d32779379caf0591d6cde530ead (patch)
tree98dc1e5a7bc7422e3732f983c07fb04aedda2071 /src/server/game/Movement/MotionMaster.cpp
parent9fa68855d7d0d5f37112ce21c919a16ed8724ac2 (diff)
Core/Movement: add new helper that cleans the referenced MovementSlot
Diffstat (limited to 'src/server/game/Movement/MotionMaster.cpp')
-rw-r--r--src/server/game/Movement/MotionMaster.cpp57
1 files changed, 40 insertions, 17 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index 6e771a29979..d834e2d6298 100644
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -119,23 +119,6 @@ void MotionMaster::Clear(bool reset /*= true*/)
DirectClean(reset);
}
-void MotionMaster::ClearExpireList()
-{
- for (auto itr : _expireList)
- DirectDelete(itr);
-
- _expireList.clear();
-
- if (empty())
- Initialize();
- else if (NeedInitTop())
- InitTop();
- else if (_cleanFlag & MMCF_RESET)
- top()->Reset(_owner);
-
- _cleanFlag &= ~MMCF_RESET;
-}
-
void MotionMaster::MovementExpired(bool reset /*= true*/)
{
if (_cleanFlag & MMCF_UPDATE)
@@ -150,6 +133,29 @@ 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())
@@ -832,3 +838,20 @@ void MotionMaster::DelayedDelete(MovementGenerator* curr)
_expireList.push_back(curr);
}
+
+void MotionMaster::ClearExpireList()
+{
+ for (auto itr : _expireList)
+ DirectDelete(itr);
+
+ _expireList.clear();
+
+ if (empty())
+ Initialize();
+ else if (NeedInitTop())
+ InitTop();
+ else if (_cleanFlag & MMCF_RESET)
+ top()->Reset(_owner);
+
+ _cleanFlag &= ~MMCF_RESET;
+}