mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 18:36:31 +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());
|
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);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user