mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/Movement: FIxed followPathBackwardsFromEndToStart parameter of MotionMaster::MovePath
This commit is contained in:
@@ -1114,7 +1114,7 @@ void MotionMaster::MoveDistract(uint32 timer, float orientation)
|
||||
|
||||
void MotionMaster::MovePath(uint32 pathId, bool repeatable, Optional<Milliseconds> duration, Optional<float> speed,
|
||||
MovementWalkRunSpeedSelectionMode speedSelectionMode, Optional<std::pair<Milliseconds, Milliseconds>> waitTimeRangeAtPathEnd,
|
||||
Optional<float> wanderDistanceAtPathEnds, bool followPathBackwardsFromEndToStart, bool generatePath)
|
||||
Optional<float> wanderDistanceAtPathEnds, Optional<bool> followPathBackwardsFromEndToStart, bool generatePath)
|
||||
{
|
||||
if (!pathId)
|
||||
return;
|
||||
@@ -1127,7 +1127,7 @@ void MotionMaster::MovePath(uint32 pathId, bool repeatable, Optional<Millisecond
|
||||
|
||||
void MotionMaster::MovePath(WaypointPath const& path, bool repeatable, Optional<Milliseconds> duration, Optional<float> speed,
|
||||
MovementWalkRunSpeedSelectionMode speedSelectionMode, Optional<std::pair<Milliseconds, Milliseconds>> waitTimeRangeAtPathEnd,
|
||||
Optional<float> wanderDistanceAtPathEnds, bool followPathBackwardsFromEndToStart, bool generatePath)
|
||||
Optional<float> wanderDistanceAtPathEnds, Optional<bool> followPathBackwardsFromEndToStart, bool generatePath)
|
||||
{
|
||||
TC_LOG_DEBUG("movement.motionmaster", "MotionMaster::MovePath: '{}', starts moving over path Id: {} (repeatable: {})",
|
||||
_owner->GetGUID().ToString(), path.Id, repeatable ? "YES" : "NO");
|
||||
|
||||
@@ -200,11 +200,11 @@ class TC_GAME_API MotionMaster
|
||||
void MovePath(uint32 pathId, bool repeatable, Optional<Milliseconds> duration = {}, Optional<float> speed = {},
|
||||
MovementWalkRunSpeedSelectionMode speedSelectionMode = MovementWalkRunSpeedSelectionMode::Default,
|
||||
Optional<std::pair<Milliseconds, Milliseconds>> waitTimeRangeAtPathEnd = {}, Optional<float> wanderDistanceAtPathEnds = {},
|
||||
bool followPathBackwardsFromEndToStart = false, bool generatePath = true);
|
||||
Optional<bool> followPathBackwardsFromEndToStart = {}, bool generatePath = true);
|
||||
void MovePath(WaypointPath const& path, bool repeatable, Optional<Milliseconds> duration = {}, Optional<float> speed = {},
|
||||
MovementWalkRunSpeedSelectionMode speedSelectionMode = MovementWalkRunSpeedSelectionMode::Default,
|
||||
Optional<std::pair<Milliseconds, Milliseconds>> waitTimeRangeAtPathEnd = {}, Optional<float> wanderDistanceAtPathEnds = {},
|
||||
bool followPathBackwardsFromEndToStart = false, bool generatePath = true);
|
||||
Optional<bool> followPathBackwardsFromEndToStart = {}, bool generatePath = true);
|
||||
|
||||
/**
|
||||
* \brief Makes the Unit turn in place
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
WaypointMovementGenerator<Creature>::WaypointMovementGenerator(uint32 pathId, bool repeating, Optional<Milliseconds> duration, Optional<float> speed,
|
||||
MovementWalkRunSpeedSelectionMode speedSelectionMode, Optional<std::pair<Milliseconds, Milliseconds>> waitTimeRangeAtPathEnd,
|
||||
Optional<float> wanderDistanceAtPathEnds, bool followPathBackwardsFromEndToStart, bool generatePath)
|
||||
Optional<float> wanderDistanceAtPathEnds, Optional<bool> followPathBackwardsFromEndToStart, bool generatePath)
|
||||
: _nextMoveTime(0), _pathId(pathId), _repeating(repeating), _loadedFromDB(true),
|
||||
_speed(speed), _speedSelectionMode(speedSelectionMode), _waitTimeRangeAtPathEnd(std::move(waitTimeRangeAtPathEnd)),
|
||||
_wanderDistanceAtPathEnds(wanderDistanceAtPathEnds), _followPathBackwardsFromEndToStart(followPathBackwardsFromEndToStart), _isReturningToStart(false),
|
||||
@@ -46,7 +46,7 @@ WaypointMovementGenerator<Creature>::WaypointMovementGenerator(uint32 pathId, bo
|
||||
|
||||
WaypointMovementGenerator<Creature>::WaypointMovementGenerator(WaypointPath const& path, bool repeating, Optional<Milliseconds> duration, Optional<float> speed,
|
||||
MovementWalkRunSpeedSelectionMode speedSelectionMode, Optional<std::pair<Milliseconds, Milliseconds>> waitTimeRangeAtPathEnd,
|
||||
Optional<float> wanderDistanceAtPathEnds, bool followPathBackwardsFromEndToStart, bool generatePath)
|
||||
Optional<float> wanderDistanceAtPathEnds, Optional<bool> followPathBackwardsFromEndToStart, bool generatePath)
|
||||
: _nextMoveTime(0), _pathId(0), _repeating(repeating), _loadedFromDB(false),
|
||||
_speed(speed), _speedSelectionMode(speedSelectionMode), _waitTimeRangeAtPathEnd(std::move(waitTimeRangeAtPathEnd)),
|
||||
_wanderDistanceAtPathEnds(wanderDistanceAtPathEnds), _followPathBackwardsFromEndToStart(followPathBackwardsFromEndToStart), _isReturningToStart(false),
|
||||
@@ -133,8 +133,6 @@ void WaypointMovementGenerator<Creature>::DoInitialize(Creature* owner)
|
||||
return;
|
||||
}
|
||||
|
||||
_followPathBackwardsFromEndToStart = GetPath()->Flags.HasFlag(WaypointPathFlags::FollowPathBackwardsFromEndToStart);
|
||||
|
||||
if (GetPath()->Nodes.size() == 1)
|
||||
_repeating = false;
|
||||
|
||||
@@ -285,7 +283,7 @@ void WaypointMovementGenerator<Creature>::OnArrived(Creature* owner)
|
||||
_nextMoveTime.Reset(waypoint.Delay);
|
||||
}
|
||||
|
||||
if (_waitTimeRangeAtPathEnd && _followPathBackwardsFromEndToStart
|
||||
if (_waitTimeRangeAtPathEnd && IsFollowingPathBackwardsFromEndToStart()
|
||||
&& ((_isReturningToStart && _currentNode == 0) || (!_isReturningToStart && _currentNode == GetPath()->Nodes.size() - 1)))
|
||||
{
|
||||
owner->ClearUnitState(UNIT_STATE_ROAMING_MOVE);
|
||||
@@ -433,7 +431,7 @@ bool WaypointMovementGenerator<Creature>::ComputeNextNode()
|
||||
if ((_currentNode == GetPath()->Nodes.size() - 1) && !_repeating)
|
||||
return false;
|
||||
|
||||
if (!_followPathBackwardsFromEndToStart || GetPath()->Nodes.size() < WAYPOINT_PATH_FLAG_FOLLOW_PATH_BACKWARDS_MINIMUM_NODES)
|
||||
if (!IsFollowingPathBackwardsFromEndToStart() || GetPath()->Nodes.size() < WAYPOINT_PATH_FLAG_FOLLOW_PATH_BACKWARDS_MINIMUM_NODES)
|
||||
_currentNode = (_currentNode + 1) % GetPath()->Nodes.size();
|
||||
else
|
||||
{
|
||||
@@ -458,6 +456,14 @@ bool WaypointMovementGenerator<Creature>::ComputeNextNode()
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WaypointMovementGenerator<Creature>::IsFollowingPathBackwardsFromEndToStart() const
|
||||
{
|
||||
if (_followPathBackwardsFromEndToStart)
|
||||
return *_followPathBackwardsFromEndToStart;
|
||||
|
||||
return GetPath()->Flags.HasFlag(WaypointPathFlags::FollowPathBackwardsFromEndToStart);
|
||||
}
|
||||
|
||||
std::string WaypointMovementGenerator<Creature>::GetDebugInfo() const
|
||||
{
|
||||
std::stringstream sstr;
|
||||
|
||||
@@ -38,11 +38,11 @@ class WaypointMovementGenerator<Creature> : public MovementGeneratorMedium<Creat
|
||||
explicit WaypointMovementGenerator(uint32 pathId, bool repeating, Optional<Milliseconds> duration = {}, Optional<float> speed = {},
|
||||
MovementWalkRunSpeedSelectionMode speedSelectionMode = MovementWalkRunSpeedSelectionMode::Default,
|
||||
Optional<std::pair<Milliseconds, Milliseconds>> waitTimeRangeAtPathEnd = {}, Optional<float> wanderDistanceAtPathEnds = {},
|
||||
bool followPathBackwardsFromEndToStart = false, bool generatePath = true);
|
||||
Optional<bool> followPathBackwardsFromEndToStart = {}, bool generatePath = true);
|
||||
explicit WaypointMovementGenerator(WaypointPath const& path, bool repeating, Optional<Milliseconds> duration, Optional<float> speed,
|
||||
MovementWalkRunSpeedSelectionMode speedSelectionMode,
|
||||
Optional<std::pair<Milliseconds, Milliseconds>> waitTimeRangeAtPathEnd, Optional<float> wanderDistanceAtPathEnds,
|
||||
bool followPathBackwardsFromEndToStart, bool generatePath);
|
||||
Optional<bool> followPathBackwardsFromEndToStart, bool generatePath);
|
||||
~WaypointMovementGenerator();
|
||||
|
||||
MovementGeneratorType GetMovementGeneratorType() const override;
|
||||
@@ -78,6 +78,8 @@ class WaypointMovementGenerator<Creature> : public MovementGeneratorMedium<Creat
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IsFollowingPathBackwardsFromEndToStart() const;
|
||||
|
||||
TimeTracker _nextMoveTime;
|
||||
uint32 _pathId;
|
||||
bool _repeating;
|
||||
@@ -88,7 +90,7 @@ class WaypointMovementGenerator<Creature> : public MovementGeneratorMedium<Creat
|
||||
MovementWalkRunSpeedSelectionMode _speedSelectionMode;
|
||||
Optional<std::pair<Milliseconds, Milliseconds>> _waitTimeRangeAtPathEnd;
|
||||
Optional<float> _wanderDistanceAtPathEnds;
|
||||
bool _followPathBackwardsFromEndToStart;
|
||||
Optional<bool> _followPathBackwardsFromEndToStart;
|
||||
bool _isReturningToStart;
|
||||
bool _generatePath;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user