aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Movement/MotionMaster.cpp4
-rw-r--r--src/server/game/Movement/MotionMaster.h4
-rw-r--r--src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp18
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h8
4 files changed, 21 insertions, 13 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index 7c25d871900..e62d26e0917 100644
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -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");
diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h
index 840a8a08116..5f82006ef32 100644
--- a/src/server/game/Movement/MotionMaster.h
+++ b/src/server/game/Movement/MotionMaster.h
@@ -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
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
index bc2373809c3..4676ebb8141 100644
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
@@ -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;
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
index 280e5bf9579..8de8f5de52b 100755
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
@@ -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;
};