Core/Movement: minor MotionMaster refactor (#18367)

(cherry picked from commit eca3645d8bb655b88e39f05e36b435171f738f70)
This commit is contained in:
Chaouki Dhib
2018-03-12 10:32:04 +01:00
committed by DoctorKraft
parent f115866f38
commit 91a70f9aa2
3 changed files with 28 additions and 28 deletions
+1
View File
@@ -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
+26 -28
View File
@@ -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)
+1
View File
@@ -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];