diff options
author | Chaouki Dhib <chaodhib@gmail.com> | 2016-12-01 23:45:32 +0100 |
---|---|---|
committer | ccrs <ccrs@users.noreply.github.com> | 2016-12-01 23:45:32 +0100 |
commit | eca3645d8bb655b88e39f05e36b435171f738f70 (patch) | |
tree | 23d59262802be4a41382fbb42418f3566c5a06d6 /src | |
parent | 190fdfdf63c0b42f5909e377e49e601e14ede8a1 (diff) |
Core/Movement: minor MotionMaster refactor (#18367)
Diffstat (limited to 'src')
-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 72151041e31..e7615373e63 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -467,6 +467,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 dbdb6f911b4..1919558f41d 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -88,37 +88,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*/) @@ -135,6 +112,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 9efda0f10ca..c2fe3ce5bef 100644 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -181,6 +181,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]; |