aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChaouki Dhib <chaodhib@gmail.com>2016-12-01 23:45:32 +0100
committerccrs <ccrs@users.noreply.github.com>2016-12-01 23:45:32 +0100
commiteca3645d8bb655b88e39f05e36b435171f738f70 (patch)
tree23d59262802be4a41382fbb42418f3566c5a06d6 /src
parent190fdfdf63c0b42f5909e377e49e601e14ede8a1 (diff)
Core/Movement: minor MotionMaster refactor (#18367)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp1
-rw-r--r--src/server/game/Movement/MotionMaster.cpp54
-rw-r--r--src/server/game/Movement/MotionMaster.h1
3 files changed, 28 insertions, 28 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 72151041e31..e7615373e63 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -467,6 +467,7 @@ void Unit::Update(uint32 p_time)
UpdateSplineMovement(p_time);
i_motionMaster->UpdateMotion(p_time);
+ UpdateUnderwaterState(GetMap(), GetPositionX(), GetPositionY(), GetPositionZ());
}
bool Unit::haveOffhandWeapon() const
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index dbdb6f911b4..1919558f41d 100644
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -88,37 +88,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*/)
@@ -135,6 +112,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)
diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h
index 9efda0f10ca..c2fe3ce5bef 100644
--- a/src/server/game/Movement/MotionMaster.h
+++ b/src/server/game/Movement/MotionMaster.h
@@ -181,6 +181,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];