Core/MotionMaster: cleanup use of _expireList

And restore broken _cleanFlag check/use on update (eca3645d8b)
This commit is contained in:
ccrs
2017-03-25 12:33:39 +01:00
parent bf56049f2f
commit 96f4c7c187
2 changed files with 17 additions and 21 deletions

View File

@@ -88,13 +88,15 @@ void MotionMaster::UpdateMotion(uint32 diff)
ASSERT(!empty()); ASSERT(!empty());
_cleanFlag |= MMCF_UPDATE; _cleanFlag |= MMCF_UPDATE;
bool isMoveGenUpdateSuccess = top()->Update(_owner, diff); if (!top()->Update(_owner, diff))
_cleanFlag &= ~MMCF_UPDATE; {
_cleanFlag &= ~MMCF_UPDATE;
if (!isMoveGenUpdateSuccess)
MovementExpired(); MovementExpired();
}
else
_cleanFlag &= ~MMCF_UPDATE;
if (_expireList) if (!_expireList.empty())
ClearExpireList(); ClearExpireList();
} }
@@ -114,14 +116,10 @@ void MotionMaster::Clear(bool reset /*= true*/)
void MotionMaster::ClearExpireList() void MotionMaster::ClearExpireList()
{ {
for (size_t i = 0; i < _expireList->size(); ++i) for (auto itr = _expireList.begin(); itr != _expireList.end(); itr++)
{ DirectDelete(*itr);
MovementGenerator* mg = (*_expireList)[i];
DirectDelete(mg);
}
delete _expireList; _expireList.clear();
_expireList = nullptr;
if (empty()) if (empty())
Initialize(); 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()); TC_LOG_FATAL("misc", "Unit (Entry %u) is trying to delete its updating Movement Generator (Type %u)!", _owner->GetEntry(), curr->GetMovementGeneratorType());
if (IsStatic(curr)) if (IsStatic(curr))
return; return;
if (!_expireList)
_expireList = new ExpireList(); _expireList.push_back(curr);
_expireList->push_back(curr);
} }

View File

@@ -81,9 +81,6 @@ enum RotateDirection
class TC_GAME_API MotionMaster class TC_GAME_API MotionMaster
{ {
private:
typedef std::vector<MovementGenerator*> ExpireList;
public: public:
explicit MotionMaster(Unit* unit) : _expireList(nullptr), _top(-1), _owner(unit), _cleanFlag(MMCF_NONE) 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); void MoveRotate(uint32 time, RotateDirection direction);
private: private:
typedef std::vector<MovementGenerator*> MovementList;
void pop(); void pop();
bool NeedInitTop() const; bool NeedInitTop() const;
@@ -179,11 +178,11 @@ class TC_GAME_API MotionMaster
void DelayedDelete(MovementGenerator* curr); void DelayedDelete(MovementGenerator* curr);
void ClearExpireList(); void ClearExpireList();
ExpireList* _expireList;
MovementGenerator* _slot[MAX_MOTION_SLOT]; MovementGenerator* _slot[MAX_MOTION_SLOT];
int _top;
Unit* _owner;
bool _initialize[MAX_MOTION_SLOT]; bool _initialize[MAX_MOTION_SLOT];
MovementList _expireList;
Unit* _owner;
int _top;
uint8 _cleanFlag; uint8 _cleanFlag;
}; };