diff options
author | Chaouki Dhib <chaodhib@gmail.com> | 2016-12-01 23:45:32 +0100 |
---|---|---|
committer | DoctorKraft <DoctorKraft@users.noreply.github.com> | 2018-03-12 10:32:04 +0100 |
commit | 91a70f9aa26eee0dd907852738cfefe15f6896a8 (patch) | |
tree | dc855dafd27b239901024f66432a18da49c584af | |
parent | f115866f38f752708f40113bb7caefb2fbd77ae4 (diff) |
Core/Movement: minor MotionMaster refactor (#18367)
(cherry picked from commit eca3645d8bb655b88e39f05e36b435171f738f70)
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 1 | ||||
-rw-r--r-- | src/server/game/Movement/MotionMaster.cpp | 54 | ||||
-rw-r--r-- | src/server/game/Movement/MotionMaster.h | 1 |
3 files changed, 28 insertions, 28 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 2efd742687b..f8c79bbbe1c 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -495,6 +495,7 @@ void Unit::Update(uint32 p_time) UpdateSplineMovement(p_time); i_motionMaster->UpdateMotion(p_time); + UpdateUnderwaterState(GetMap(), GetPositionX(), GetPositionY(), GetPositionZ()); } bool Unit::haveOffhandWeapon() const diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index f8836d01e52..98e8863ee99 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -90,37 +90,14 @@ void MotionMaster::UpdateMotion(uint32 diff) ASSERT(!empty()); _cleanFlag |= MMCF_UPDATE; - if (!top()->Update(_owner, diff)) - { - _cleanFlag &= ~MMCF_UPDATE; + bool isMoveGenUpdateSuccess = top()->Update(_owner, diff); + _cleanFlag &= ~MMCF_UPDATE; + + if (!isMoveGenUpdateSuccess) MovementExpired(); - } - else - _cleanFlag &= ~MMCF_UPDATE; if (_expireList) - { - for (size_t i = 0; i < _expireList->size(); ++i) - { - MovementGenerator* mg = (*_expireList)[i]; - DirectDelete(mg); - } - - delete _expireList; - _expireList = nullptr; - - if (empty()) - Initialize(); - else if (NeedInitTop()) - InitTop(); - else if (_cleanFlag & MMCF_RESET) - top()->Reset(_owner); - - _cleanFlag &= ~MMCF_RESET; - } - - // probably not the best place to pu this but im not really sure where else to put it. - _owner->UpdateUnderwaterState(_owner->GetMap(), _owner->GetPositionX(), _owner->GetPositionY(), _owner->GetPositionZ()); + ClearExpireList(); } void MotionMaster::Clear(bool reset /*= true*/) @@ -137,6 +114,27 @@ void MotionMaster::Clear(bool reset /*= true*/) DirectClean(reset); } +void MotionMaster::ClearExpireList() +{ + for (size_t i = 0; i < _expireList->size(); ++i) + { + MovementGenerator* mg = (*_expireList)[i]; + DirectDelete(mg); + } + + delete _expireList; + _expireList = nullptr; + + 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) diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index 57dbbf29634..f62eb85719b 100644 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -198,6 +198,7 @@ class TC_GAME_API MotionMaster void DelayedExpire(); void DirectDelete(MovementGenerator* curr); void DelayedDelete(MovementGenerator* curr); + void ClearExpireList(); ExpireList* _expireList; MovementGenerator* _slot[MAX_MOTION_SLOT]; |