diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Movement/MotionMaster.cpp | 57 | ||||
-rw-r--r-- | src/server/game/Movement/MotionMaster.h | 1 |
2 files changed, 41 insertions, 17 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 295c70039e6..19e900a8806 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -117,23 +117,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) @@ -148,6 +131,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()) @@ -847,3 +853,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; +} diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index 7cb72c353f7..703ca60d50b 100644 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -121,6 +121,7 @@ class TC_GAME_API MotionMaster void Clear(bool reset = true); void MovementExpired(bool reset = true); + void ExpireMovement(MovementSlot slot); MovementGeneratorType GetCurrentMovementGeneratorType() const; MovementGeneratorType GetMotionSlotType(int slot) const; |