diff options
| author | ccrs <ccrs@users.noreply.github.com> | 2017-08-08 20:29:30 +0200 | 
|---|---|---|
| committer | ccrs <ccrs@users.noreply.github.com> | 2017-08-08 20:29:30 +0200 | 
| commit | 4f43f4d72f10cf1f4e522979f1050e5141c226c2 (patch) | |
| tree | f6acdd513daf7f90865d4311600779b270367663 /src/server/game/Movement/MotionMaster.cpp | |
| parent | 40903dcd65ef2b15efed6a32669c6b659685e7bd (diff) | |
Core/Movement: ee2d7c1d53 followup
Diffstat (limited to 'src/server/game/Movement/MotionMaster.cpp')
| -rw-r--r-- | src/server/game/Movement/MotionMaster.cpp | 76 | 
1 files changed, 47 insertions, 29 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);      } | 
