diff options
| author | ccrs <ccrs@users.noreply.github.com> | 2017-08-08 19:35:13 +0200 | 
|---|---|---|
| committer | ccrs <ccrs@users.noreply.github.com> | 2017-08-08 19:35:13 +0200 | 
| commit | ee2d7c1d53986d32779379caf0591d6cde530ead (patch) | |
| tree | 98dc1e5a7bc7422e3732f983c07fb04aedda2071 /src/server/game/Movement/MotionMaster.cpp | |
| parent | 9fa68855d7d0d5f37112ce21c919a16ed8724ac2 (diff) | |
Core/Movement: add new helper that cleans the referenced MovementSlot
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; +} | 
