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());
_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);
}

View File

@@ -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;
};