diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Movement/MotionMaster.cpp | 76 | ||||
-rw-r--r-- | src/server/game/Movement/MotionMaster.h | 6 |
2 files changed, 51 insertions, 31 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 7c946f641c7..003c9708628 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -119,6 +119,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) @@ -133,29 +144,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()) @@ -740,7 +728,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)) @@ -767,9 +755,10 @@ void MotionMaster::DirectClean(bool reset) { while (size() > 1) { - MovementGenerator *curr = top(); + MovementGenerator* curr = top(); pop(); - if (curr) DirectDelete(curr); + if (curr) + DirectDelete(curr); } if (empty()) @@ -785,18 +774,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); } @@ -816,7 +834,7 @@ void MotionMaster::DelayedExpire() { if (size() > 1) { - MovementGenerator *curr = top(); + MovementGenerator* curr = top(); pop(); DelayedDelete(curr); } diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index 44c6cfaeb9d..d33739781b2 100644 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -105,8 +105,8 @@ class TC_GAME_API MotionMaster void UpdateMotion(uint32 diff); void Clear(bool reset = true); + void Clear(MovementSlot slot); void MovementExpired(bool reset = true); - void ExpireMovement(MovementSlot slot); MovementGeneratorType GetCurrentMovementGeneratorType() const; MovementGeneratorType GetMotionSlotType(int slot) const; @@ -173,10 +173,12 @@ class TC_GAME_API MotionMaster bool NeedInitTop() const; void InitTop(); - void Mutate(MovementGenerator *m, MovementSlot slot); + void Mutate(MovementGenerator* m, MovementSlot slot); void DirectClean(bool reset); void DelayedClean(); + void DirectClean(MovementSlot slot); + void DelayedClean(MovementSlot slot); void DirectExpire(bool reset); void DelayedExpire(); void DirectDelete(MovementGenerator* curr); |