aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorccrs <ccrs@users.noreply.github.com>2017-03-25 12:33:39 +0100
committerccrs <ccrs@users.noreply.github.com>2017-03-25 12:33:39 +0100
commit96f4c7c187e03aeb61e905421751f3d5a1df060e (patch)
tree7bee0dbd1f0cc299a0c0fef6acb8d8168f0f9101 /src
parentbf56049f2f95a67ccaf0cff46c977cb7e0925a38 (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.cpp27
-rw-r--r--src/server/game/Movement/MotionMaster.h11
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;
};