aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorccrs <ccrs@users.noreply.github.com>2017-08-08 20:29:30 +0200
committerShauren <shauren.trinity@gmail.com>2020-08-22 20:50:56 +0200
commit6209ceddb9fbbcf1c7e3552c17b23465c29ec118 (patch)
tree62ab1896cfc1ced676405cb3f70f94e24568cd4a /src
parentb521bf1d3a4e59abf0d7c15200de5fff7430d2ed (diff)
Core/Movement: ee2d7c1d53 followup
(cherry picked from commit 4f43f4d72f10cf1f4e522979f1050e5141c226c2)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Movement/MotionMaster.cpp73
-rw-r--r--src/server/game/Movement/MotionMaster.h6
2 files changed, 49 insertions, 30 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);
}
diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h
index 703ca60d50b..01d6574945f 100644
--- a/src/server/game/Movement/MotionMaster.h
+++ b/src/server/game/Movement/MotionMaster.h
@@ -120,8 +120,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;
@@ -188,10 +188,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);