Core/Movement: minor MotionMaster refactor (#18367)
(cherry picked from commit eca3645d8bb655b88e39f05e36b435171f738f70)
This commit is contained in:
committed by
DoctorKraft
parent
f115866f38
commit
91a70f9aa2
@@ -495,6 +495,7 @@ void Unit::Update(uint32 p_time)
|
||||
|
||||
UpdateSplineMovement(p_time);
|
||||
i_motionMaster->UpdateMotion(p_time);
|
||||
UpdateUnderwaterState(GetMap(), GetPositionX(), GetPositionY(), GetPositionZ());
|
||||
}
|
||||
|
||||
bool Unit::haveOffhandWeapon() const
|
||||
|
||||
@@ -90,37 +90,14 @@ void MotionMaster::UpdateMotion(uint32 diff)
|
||||
ASSERT(!empty());
|
||||
|
||||
_cleanFlag |= MMCF_UPDATE;
|
||||
if (!top()->Update(_owner, diff))
|
||||
{
|
||||
_cleanFlag &= ~MMCF_UPDATE;
|
||||
bool isMoveGenUpdateSuccess = top()->Update(_owner, diff);
|
||||
_cleanFlag &= ~MMCF_UPDATE;
|
||||
|
||||
if (!isMoveGenUpdateSuccess)
|
||||
MovementExpired();
|
||||
}
|
||||
else
|
||||
_cleanFlag &= ~MMCF_UPDATE;
|
||||
|
||||
if (_expireList)
|
||||
{
|
||||
for (size_t i = 0; i < _expireList->size(); ++i)
|
||||
{
|
||||
MovementGenerator* mg = (*_expireList)[i];
|
||||
DirectDelete(mg);
|
||||
}
|
||||
|
||||
delete _expireList;
|
||||
_expireList = nullptr;
|
||||
|
||||
if (empty())
|
||||
Initialize();
|
||||
else if (NeedInitTop())
|
||||
InitTop();
|
||||
else if (_cleanFlag & MMCF_RESET)
|
||||
top()->Reset(_owner);
|
||||
|
||||
_cleanFlag &= ~MMCF_RESET;
|
||||
}
|
||||
|
||||
// probably not the best place to pu this but im not really sure where else to put it.
|
||||
_owner->UpdateUnderwaterState(_owner->GetMap(), _owner->GetPositionX(), _owner->GetPositionY(), _owner->GetPositionZ());
|
||||
ClearExpireList();
|
||||
}
|
||||
|
||||
void MotionMaster::Clear(bool reset /*= true*/)
|
||||
@@ -137,6 +114,27 @@ void MotionMaster::Clear(bool reset /*= true*/)
|
||||
DirectClean(reset);
|
||||
}
|
||||
|
||||
void MotionMaster::ClearExpireList()
|
||||
{
|
||||
for (size_t i = 0; i < _expireList->size(); ++i)
|
||||
{
|
||||
MovementGenerator* mg = (*_expireList)[i];
|
||||
DirectDelete(mg);
|
||||
}
|
||||
|
||||
delete _expireList;
|
||||
_expireList = nullptr;
|
||||
|
||||
if (empty())
|
||||
Initialize();
|
||||
else if (NeedInitTop())
|
||||
InitTop();
|
||||
else if (_cleanFlag & MMCF_RESET)
|
||||
top()->Reset(_owner);
|
||||
|
||||
_cleanFlag &= ~MMCF_RESET;
|
||||
}
|
||||
|
||||
void MotionMaster::MovementExpired(bool reset /*= true*/)
|
||||
{
|
||||
if (_cleanFlag & MMCF_UPDATE)
|
||||
|
||||
@@ -198,6 +198,7 @@ class TC_GAME_API MotionMaster
|
||||
void DelayedExpire();
|
||||
void DirectDelete(MovementGenerator* curr);
|
||||
void DelayedDelete(MovementGenerator* curr);
|
||||
void ClearExpireList();
|
||||
|
||||
ExpireList* _expireList;
|
||||
MovementGenerator* _slot[MAX_MOTION_SLOT];
|
||||
|
||||
Reference in New Issue
Block a user