diff options
Diffstat (limited to 'src/server/game/Movement/MotionMaster.cpp')
| -rw-r--r-- | src/server/game/Movement/MotionMaster.cpp | 57 |
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; +} |
