From 91a70f9aa26eee0dd907852738cfefe15f6896a8 Mon Sep 17 00:00:00 2001 From: Chaouki Dhib Date: Thu, 1 Dec 2016 23:45:32 +0100 Subject: Core/Movement: minor MotionMaster refactor (#18367) (cherry picked from commit eca3645d8bb655b88e39f05e36b435171f738f70) --- src/server/game/Entities/Unit/Unit.cpp | 1 + src/server/game/Movement/MotionMaster.cpp | 54 +++++++++++++++---------------- src/server/game/Movement/MotionMaster.h | 1 + 3 files changed, 28 insertions(+), 28 deletions(-) (limited to 'src') 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]; -- cgit v1.2.3