Core/Movement: FIxed followPathBackwardsFromEndToStart parameter of MotionMaster::MovePath

Port From (https://github.com/TrinityCore/TrinityCore/commit/ca656f4254e979f049c3cf34e39d5d975e02f2d6)
This commit is contained in:
hondacrx
2024-03-14 11:04:55 -04:00
parent 7fd318d306
commit 00f2e84fe6
2 changed files with 15 additions and 9 deletions
@@ -25,12 +25,12 @@ namespace Game.Movement
MovementWalkRunSpeedSelectionMode _speedSelectionMode;
(TimeSpan min, TimeSpan max)? _waitTimeRangeAtPathEnd;
float? _wanderDistanceAtPathEnds;
bool _followPathBackwardsFromEndToStart;
bool? _followPathBackwardsFromEndToStart;
bool _isReturningToStart;
bool _generatePath;
public WaypointMovementGenerator(uint pathId = 0, bool repeating = true, TimeSpan? duration = null, float? speed = null, MovementWalkRunSpeedSelectionMode speedSelectionMode = MovementWalkRunSpeedSelectionMode.Default,
(TimeSpan min, TimeSpan max)? waitTimeRangeAtPathEnd = null, float? wanderDistanceAtPathEnds = null, bool followPathBackwardsFromEndToStart = false, bool generatePath = true)
(TimeSpan min, TimeSpan max)? waitTimeRangeAtPathEnd = null, float? wanderDistanceAtPathEnds = null, bool? followPathBackwardsFromEndToStart = null, bool generatePath = true)
{
_nextMoveTime = new TimeTracker(0);
@@ -55,7 +55,7 @@ namespace Game.Movement
}
public WaypointMovementGenerator(WaypointPath path, bool repeating = true, TimeSpan? duration = null, float? speed = null, MovementWalkRunSpeedSelectionMode speedSelectionMode = MovementWalkRunSpeedSelectionMode.Default,
(TimeSpan min, TimeSpan max)? waitTimeRangeAtPathEnd = null, float? wanderDistanceAtPathEnds = null, bool followPathBackwardsFromEndToStart = false, bool generatePath = true)
(TimeSpan min, TimeSpan max)? waitTimeRangeAtPathEnd = null, float? wanderDistanceAtPathEnds = null, bool? followPathBackwardsFromEndToStart = null, bool generatePath = true)
{
_nextMoveTime = new TimeTracker(0);
_repeating = repeating;
@@ -143,8 +143,6 @@ namespace Game.Movement
return;
}
_followPathBackwardsFromEndToStart = _path.Flags.HasFlag(WaypointPathFlags.FollowPathBackwardsFromEndToStart);
if (_path.Nodes.Count == 1)
_repeating = false;
@@ -296,7 +294,7 @@ namespace Game.Movement
_nextMoveTime.Reset(waypoint.Delay);
}
if (_waitTimeRangeAtPathEnd.HasValue && _followPathBackwardsFromEndToStart
if (_waitTimeRangeAtPathEnd.HasValue && IsFollowingPathBackwardsFromEndToStart()
&& ((_isReturningToStart && _currentNode == 0) || (!_isReturningToStart && _currentNode == _path.Nodes.Count - 1)))
{
owner.ClearUnitState(UnitState.RoamingMove);
@@ -446,7 +444,7 @@ namespace Game.Movement
if ((_currentNode == _path.Nodes.Count - 1) && !_repeating)
return false;
if (!_followPathBackwardsFromEndToStart || _path.Nodes.Count < 2)
if (!IsFollowingPathBackwardsFromEndToStart() || _path.Nodes.Count < 2)
_currentNode = (_currentNode + 1) % _path.Nodes.Count;
else
{
@@ -470,6 +468,14 @@ namespace Game.Movement
return true;
}
bool IsFollowingPathBackwardsFromEndToStart()
{
if (_followPathBackwardsFromEndToStart.HasValue)
return _followPathBackwardsFromEndToStart.Value;
return _path.Flags.HasFlag(WaypointPathFlags.FollowPathBackwardsFromEndToStart);
}
public override string GetDebugInfo()
{
return $"Current Node: {_currentNode}\n{base.GetDebugInfo()}";