mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 15:40:45 +01:00
Core/MotionMaster: cleanup use of _expireList
And restore broken _cleanFlag check/use on update (eca3645d8b)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user