mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 18:36:31 +01:00
Core/Movement: ee2d7c1d53 followup
(cherry picked from commit 4f43f4d72f)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user