Skip to content

Commit 5435543

Browse files
committed
update update logic, call MovementGenerator::Update with 0 time diff for freshly initialized generators
1 parent 8a5f81f commit 5435543

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

src/server/game/Movement/MotionMaster.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -300,21 +300,27 @@ void MotionMaster::Update(uint32 diff)
300300

301301
AddFlag(MOTIONMASTER_FLAG_UPDATE);
302302

303+
enum class InitState : uint8
304+
{
305+
Failed,
306+
Success,
307+
AlreadyInitialized
308+
} initializationState = InitState::AlreadyInitialized;
309+
303310
MovementGenerator* top = GetCurrentMovementGenerator();
304-
bool initialized = false;
305311
if (HasFlag(MOTIONMASTER_FLAG_STATIC_INITIALIZATION_PENDING) && IsStatic(top))
306312
{
307313
RemoveFlag(MOTIONMASTER_FLAG_STATIC_INITIALIZATION_PENDING);
308-
initialized = top->Initialize(_owner);
314+
initializationState = top->Initialize(_owner) ? InitState::Success : InitState::Failed;
309315
}
310316
if (top->HasFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING))
311-
initialized = top->Initialize(_owner);
317+
initializationState = top->Initialize(_owner) ? InitState::Success : InitState::Failed;
312318
if (top->HasFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED))
313-
initialized = top->Reset(_owner);
319+
initializationState = top->Reset(_owner) ? InitState::Success : InitState::Failed;
314320

315321
ASSERT(!top->HasFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED), "MotionMaster:Update: update called on an uninitialized top! (%s) (type: %u, flags: %u)", _owner->GetGUID().ToString().c_str(), top->GetMovementGeneratorType(), top->Flags);
316322

317-
if (!initialized && !top->Update(_owner, diff))
323+
if (initializationState == InitState::Failed || !top->Update(_owner, initializationState == InitState::AlreadyInitialized ? diff : 0))
318324
{
319325
ASSERT(top == GetCurrentMovementGenerator(), "MotionMaster::Update: top was modified while updating! (%s)", _owner->GetGUID().ToString().c_str());
320326

0 commit comments

Comments
 (0)