Core/Movement: handle Resume/Pause on RandomMovementGenerator

Port From (https://github.com/TrinityCore/TrinityCore/commit/f21599dc5dab71cc0775d6ed5d2b2f6f2f4c6780)
This commit is contained in:
hondacrx
2021-12-27 15:45:44 -05:00
parent dfcdade81a
commit 5321cc2090
@@ -37,7 +37,7 @@ namespace Game.Movement
public override void DoInitialize(Creature owner)
{
RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Transitory | MovementGeneratorFlags.Deactivated);
RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Transitory | MovementGeneratorFlags.Deactivated | MovementGeneratorFlags.Paused);
AddFlag(MovementGeneratorFlags.Initialized);
if (owner == null || !owner.IsAlive())
@@ -64,6 +64,9 @@ namespace Game.Movement
if (!owner || !owner.IsAlive())
return true;
if (HasFlag(MovementGeneratorFlags.Finalized | MovementGeneratorFlags.Paused))
return true;
if (owner.HasUnitState(UnitState.NotMove) || owner.IsMovementPreventedByCasting())
{
AddFlag(MovementGeneratorFlags.Interrupted);
@@ -76,10 +79,7 @@ namespace Game.Movement
_timer.Update(diff);
if ((HasFlag(MovementGeneratorFlags.SpeedUpdatePending) && !owner.MoveSpline.Finalized()) || (_timer.Passed() && owner.MoveSpline.Finalized()))
{
RemoveFlag(MovementGeneratorFlags.Transitory);
SetRandomLocation(owner);
}
return true;
}
@@ -103,6 +103,29 @@ namespace Game.Movement
}
}
public override void Pause(uint timer = 0)
{
if (timer != 0)
{
AddFlag(MovementGeneratorFlags.TimedPaused);
_timer.Reset(timer);
RemoveFlag(MovementGeneratorFlags.Paused);
}
else
{
AddFlag(MovementGeneratorFlags.Paused);
RemoveFlag(MovementGeneratorFlags.TimedPaused);
}
}
public override void Resume(uint overrideTimer = 0)
{
if (overrideTimer != 0)
_timer.Reset(overrideTimer);
RemoveFlag(MovementGeneratorFlags.Paused);
}
void SetRandomLocation(Creature owner)
{
if (owner == null)
@@ -136,6 +159,8 @@ namespace Game.Movement
return;
}
RemoveFlag(MovementGeneratorFlags.Transitory | MovementGeneratorFlags.TimedPaused);
owner.AddUnitState(UnitState.RoamingMove);
bool walk = true;