Core/Movement: FIxed followPathBackwardsFromEndToStart parameter of MotionMaster::MovePath
Port From (https://github.com/TrinityCore/TrinityCore/commit/ca656f4254e979f049c3cf34e39d5d975e02f2d6)
This commit is contained in:
@@ -25,12 +25,12 @@ namespace Game.Movement
|
|||||||
MovementWalkRunSpeedSelectionMode _speedSelectionMode;
|
MovementWalkRunSpeedSelectionMode _speedSelectionMode;
|
||||||
(TimeSpan min, TimeSpan max)? _waitTimeRangeAtPathEnd;
|
(TimeSpan min, TimeSpan max)? _waitTimeRangeAtPathEnd;
|
||||||
float? _wanderDistanceAtPathEnds;
|
float? _wanderDistanceAtPathEnds;
|
||||||
bool _followPathBackwardsFromEndToStart;
|
bool? _followPathBackwardsFromEndToStart;
|
||||||
bool _isReturningToStart;
|
bool _isReturningToStart;
|
||||||
bool _generatePath;
|
bool _generatePath;
|
||||||
|
|
||||||
public WaypointMovementGenerator(uint pathId = 0, bool repeating = true, TimeSpan? duration = null, float? speed = null, MovementWalkRunSpeedSelectionMode speedSelectionMode = MovementWalkRunSpeedSelectionMode.Default,
|
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);
|
_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,
|
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);
|
_nextMoveTime = new TimeTracker(0);
|
||||||
_repeating = repeating;
|
_repeating = repeating;
|
||||||
@@ -143,8 +143,6 @@ namespace Game.Movement
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_followPathBackwardsFromEndToStart = _path.Flags.HasFlag(WaypointPathFlags.FollowPathBackwardsFromEndToStart);
|
|
||||||
|
|
||||||
if (_path.Nodes.Count == 1)
|
if (_path.Nodes.Count == 1)
|
||||||
_repeating = false;
|
_repeating = false;
|
||||||
|
|
||||||
@@ -296,7 +294,7 @@ namespace Game.Movement
|
|||||||
_nextMoveTime.Reset(waypoint.Delay);
|
_nextMoveTime.Reset(waypoint.Delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_waitTimeRangeAtPathEnd.HasValue && _followPathBackwardsFromEndToStart
|
if (_waitTimeRangeAtPathEnd.HasValue && IsFollowingPathBackwardsFromEndToStart()
|
||||||
&& ((_isReturningToStart && _currentNode == 0) || (!_isReturningToStart && _currentNode == _path.Nodes.Count - 1)))
|
&& ((_isReturningToStart && _currentNode == 0) || (!_isReturningToStart && _currentNode == _path.Nodes.Count - 1)))
|
||||||
{
|
{
|
||||||
owner.ClearUnitState(UnitState.RoamingMove);
|
owner.ClearUnitState(UnitState.RoamingMove);
|
||||||
@@ -446,7 +444,7 @@ namespace Game.Movement
|
|||||||
if ((_currentNode == _path.Nodes.Count - 1) && !_repeating)
|
if ((_currentNode == _path.Nodes.Count - 1) && !_repeating)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!_followPathBackwardsFromEndToStart || _path.Nodes.Count < 2)
|
if (!IsFollowingPathBackwardsFromEndToStart() || _path.Nodes.Count < 2)
|
||||||
_currentNode = (_currentNode + 1) % _path.Nodes.Count;
|
_currentNode = (_currentNode + 1) % _path.Nodes.Count;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -470,6 +468,14 @@ namespace Game.Movement
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsFollowingPathBackwardsFromEndToStart()
|
||||||
|
{
|
||||||
|
if (_followPathBackwardsFromEndToStart.HasValue)
|
||||||
|
return _followPathBackwardsFromEndToStart.Value;
|
||||||
|
|
||||||
|
return _path.Flags.HasFlag(WaypointPathFlags.FollowPathBackwardsFromEndToStart);
|
||||||
|
}
|
||||||
|
|
||||||
public override string GetDebugInfo()
|
public override string GetDebugInfo()
|
||||||
{
|
{
|
||||||
return $"Current Node: {_currentNode}\n{base.GetDebugInfo()}";
|
return $"Current Node: {_currentNode}\n{base.GetDebugInfo()}";
|
||||||
|
|||||||
@@ -1030,7 +1030,7 @@ namespace Game.Movement
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void MovePath(uint pathId, bool repeatable, TimeSpan? duration = null, float? speed = null, MovementWalkRunSpeedSelectionMode speedSelectionMode = MovementWalkRunSpeedSelectionMode.Default,
|
public void MovePath(uint pathId, bool repeatable, 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)
|
||||||
{
|
{
|
||||||
if (pathId == 0)
|
if (pathId == 0)
|
||||||
return;
|
return;
|
||||||
@@ -1040,7 +1040,7 @@ namespace Game.Movement
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void MovePath(WaypointPath path, bool repeatable, TimeSpan? duration = null, float? speed = null, MovementWalkRunSpeedSelectionMode speedSelectionMode = MovementWalkRunSpeedSelectionMode.Default,
|
public void MovePath(WaypointPath path, bool repeatable, 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)
|
||||||
{
|
{
|
||||||
Log.outDebug(LogFilter.Movement, $"MotionMaster::MovePath: '{_owner.GetGUID()}', starts moving over path Id: {path.Id} (repeatable: {repeatable})");
|
Log.outDebug(LogFilter.Movement, $"MotionMaster::MovePath: '{_owner.GetGUID()}', starts moving over path Id: {path.Id} (repeatable: {repeatable})");
|
||||||
Add(new WaypointMovementGenerator(path, repeatable, duration, speed, speedSelectionMode, waitTimeRangeAtPathEnd, wanderDistanceAtPathEnds, followPathBackwardsFromEndToStart, generatePath), MovementSlot.Default);
|
Add(new WaypointMovementGenerator(path, repeatable, duration, speed, speedSelectionMode, waitTimeRangeAtPathEnd, wanderDistanceAtPathEnds, followPathBackwardsFromEndToStart, generatePath), MovementSlot.Default);
|
||||||
|
|||||||
Reference in New Issue
Block a user