diff --git a/Source/Game/Movement/Generators/ChaseMovementGenerator.cs b/Source/Game/Movement/Generators/ChaseMovementGenerator.cs index 17b882ed9..321db2fba 100644 --- a/Source/Game/Movement/Generators/ChaseMovementGenerator.cs +++ b/Source/Game/Movement/Generators/ChaseMovementGenerator.cs @@ -30,7 +30,7 @@ namespace Game.Movement ChaseAngle? _angle; PathGenerator _path; - Position _lastTargetPosition = new(); + Position _lastTargetPosition; uint _rangeCheckTimer = RANGE_CHECK_INTERVAL; bool _movingTowards = true; bool _mutualChase = true; @@ -56,7 +56,7 @@ namespace Game.Movement owner.SetWalk(false); _path = null; - _lastTargetPosition.Relocate(0.0f, 0.0f, 0.0f); + _lastTargetPosition = null; } public override void Reset(Unit owner) @@ -84,6 +84,7 @@ namespace Game.Movement if (owner.HasUnitState(UnitState.NotMove) || owner.IsMovementPreventedByCasting()) { owner.StopMoving(); + _lastTargetPosition = null; return true; } @@ -124,9 +125,9 @@ namespace Game.Movement } // if the target moved, we have to consider whether to adjust - if (_lastTargetPosition != target.GetPosition() || mutualChase != _mutualChase) + if (_lastTargetPosition == null || target.GetPosition() != _lastTargetPosition || mutualChase != _mutualChase) { - _lastTargetPosition.Relocate(target.GetPosition()); + _lastTargetPosition = new(target.GetPosition()); _mutualChase = mutualChase; if (owner.HasUnitState(UnitState.ChaseMove) || !PositionOkay(owner, target, minRange, maxRange, angle)) { @@ -216,7 +217,7 @@ namespace Game.Movement public override MovementGeneratorType GetMovementGeneratorType() { return MovementGeneratorType.Chase; } - public override void UnitSpeedChanged() { _lastTargetPosition.Relocate(0.0f, 0.0f, 0.0f); } + public override void UnitSpeedChanged() { _lastTargetPosition = null; } static bool IsMutualChase(Unit owner, Unit target) { diff --git a/Source/Game/Movement/Generators/FollowMovementGenerator.cs b/Source/Game/Movement/Generators/FollowMovementGenerator.cs index 175827198..6924f8e0c 100644 --- a/Source/Game/Movement/Generators/FollowMovementGenerator.cs +++ b/Source/Game/Movement/Generators/FollowMovementGenerator.cs @@ -41,7 +41,6 @@ namespace Game.Movement _abstractFollower = new AbstractFollower(target); _range = range; _angle = angle; - _lastTargetPosition = new(); Mode = MovementGeneratorMode.Default; Priority = MovementGeneratorPriority.Normal; @@ -57,7 +56,7 @@ namespace Game.Movement owner.StopMoving(); UpdatePetSpeed(owner); _path = null; - _lastTargetPosition.Relocate(0.0f, 0.0f, 0.0f); + _lastTargetPosition = null; } public override void Reset(Unit owner) @@ -80,6 +79,7 @@ namespace Game.Movement if (owner.HasUnitState(UnitState.NotMove) || owner.IsMovementPreventedByCasting()) { owner.StopMoving(); + _lastTargetPosition = null; return true; } @@ -107,9 +107,9 @@ namespace Game.Movement DoMovementInform(owner, target); } - if (_lastTargetPosition.GetExactDistSq(target.GetPosition()) > 0.0f) + if (_lastTargetPosition == null || _lastTargetPosition.GetExactDistSq(target.GetPosition()) > 0.0f) { - _lastTargetPosition = target.GetPosition(); + _lastTargetPosition = new(target.GetPosition()); if (owner.HasUnitState(UnitState.FollowMove) || !PositionOkay(owner, target, _range + FOLLOW_RANGE_TOLERANCE)) { if (_path == null) @@ -202,7 +202,7 @@ namespace Game.Movement public override MovementGeneratorType GetMovementGeneratorType() { return MovementGeneratorType.Follow; } - public override void UnitSpeedChanged() { _lastTargetPosition.Relocate(0.0f, 0.0f, 0.0f); } + public override void UnitSpeedChanged() { _lastTargetPosition = null; } static bool PositionOkay(Unit owner, Unit target, float range, ChaseAngle? angle = null) {