diff options
author | ccrs <ccrs@users.noreply.github.com> | 2017-03-25 12:33:39 +0100 |
---|---|---|
committer | ccrs <ccrs@users.noreply.github.com> | 2017-03-25 12:33:39 +0100 |
commit | 96f4c7c187e03aeb61e905421751f3d5a1df060e (patch) | |
tree | 7bee0dbd1f0cc299a0c0fef6acb8d8168f0f9101 /src | |
parent | bf56049f2f95a67ccaf0cff46c977cb7e0925a38 (diff) |
Core/MotionMaster: cleanup use of _expireList
And restore broken _cleanFlag check/use on update (eca3645d8bb655b88e39f05e36b435171f738f70)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Movement/MotionMaster.cpp | 27 | ||||
-rw-r--r-- | src/server/game/Movement/MotionMaster.h | 11 |
2 files changed, 17 insertions, 21 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 768288c4155..861d537e3a0 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -88,13 +88,15 @@ void MotionMaster::UpdateMotion(uint32 diff) ASSERT(!empty()); _cleanFlag |= MMCF_UPDATE; - bool isMoveGenUpdateSuccess = top()->Update(_owner, diff); - _cleanFlag &= ~MMCF_UPDATE; - - if (!isMoveGenUpdateSuccess) + if (!top()->Update(_owner, diff)) + { + _cleanFlag &= ~MMCF_UPDATE; MovementExpired(); + } + else + _cleanFlag &= ~MMCF_UPDATE; - if (_expireList) + if (!_expireList.empty()) ClearExpireList(); } @@ -114,14 +116,10 @@ void MotionMaster::Clear(bool reset /*= true*/) void MotionMaster::ClearExpireList() { - for (size_t i = 0; i < _expireList->size(); ++i) - { - MovementGenerator* mg = (*_expireList)[i]; - DirectDelete(mg); - } + for (auto itr = _expireList.begin(); itr != _expireList.end(); itr++) + DirectDelete(*itr); - delete _expireList; - _expireList = nullptr; + _expireList.clear(); if (empty()) Initialize(); @@ -816,7 +814,6 @@ void MotionMaster::DelayedDelete(MovementGenerator* curr) TC_LOG_FATAL("misc", "Unit (Entry %u) is trying to delete its updating Movement Generator (Type %u)!", _owner->GetEntry(), curr->GetMovementGeneratorType()); if (IsStatic(curr)) return; - if (!_expireList) - _expireList = new ExpireList(); - _expireList->push_back(curr); + + _expireList.push_back(curr); } diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index 93942b08e07..899820306b0 100644 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -81,9 +81,6 @@ enum RotateDirection class TC_GAME_API MotionMaster { - private: - typedef std::vector<MovementGenerator*> ExpireList; - public: explicit MotionMaster(Unit* unit) : _expireList(nullptr), _top(-1), _owner(unit), _cleanFlag(MMCF_NONE) { @@ -164,6 +161,8 @@ class TC_GAME_API MotionMaster void MoveRotate(uint32 time, RotateDirection direction); private: + typedef std::vector<MovementGenerator*> MovementList; + void pop(); bool NeedInitTop() const; @@ -179,11 +178,11 @@ class TC_GAME_API MotionMaster void DelayedDelete(MovementGenerator* curr); void ClearExpireList(); - ExpireList* _expireList; MovementGenerator* _slot[MAX_MOTION_SLOT]; - int _top; - Unit* _owner; bool _initialize[MAX_MOTION_SLOT]; + MovementList _expireList; + Unit* _owner; + int _top; uint8 _cleanFlag; }; |