aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Movement/MovementGenerator.cpp40
-rwxr-xr-xsrc/server/game/Movement/MovementGenerator.h17
-rw-r--r--src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp6
-rw-r--r--src/server/game/Movement/MovementGenerators/PathMovementBase.h9
-rw-r--r--src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp5
-rw-r--r--src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp23
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h5
7 files changed, 38 insertions, 67 deletions
diff --git a/src/server/game/Movement/MovementGenerator.cpp b/src/server/game/Movement/MovementGenerator.cpp
index d1fc73d6dd1..ee98f44a3a9 100644
--- a/src/server/game/Movement/MovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerator.cpp
@@ -16,14 +16,7 @@
*/
#include "MovementGenerator.h"
-#include "Creature.h"
-#include "IdleMovementGenerator.h"
-#include "MovementDefines.h"
-#include "PathGenerator.h"
-#include "RandomMovementGenerator.h"
-#include "UnitAI.h"
-#include "WaypointMovementGenerator.h"
-#include <sstream>
+#include "StringFormat.h"
MovementGenerator::~MovementGenerator()
{
@@ -33,13 +26,8 @@ MovementGenerator::~MovementGenerator()
std::string MovementGenerator::GetDebugInfo() const
{
- std::stringstream sstr;
- sstr << std::boolalpha
- << "Mode: " << std::to_string(Mode)
- << " Priority: " << std::to_string(Priority)
- << " Flags: " << Flags
- << " BaseUniteState: " << BaseUnitState;
- return sstr.str();
+ return Trinity::StringFormat("Mode: {} Priority: {} Flags: {} BaseUniteState: {}",
+ Mode, Priority, Flags, BaseUnitState);
}
void MovementGenerator::SetScriptResult(MovementStopReason reason)
@@ -50,25 +38,3 @@ void MovementGenerator::SetScriptResult(MovementStopReason reason)
ScriptResult.reset();
}
}
-
-IdleMovementFactory::IdleMovementFactory() : MovementGeneratorCreator(IDLE_MOTION_TYPE) { }
-
-MovementGenerator* IdleMovementFactory::Create(Unit* /*object*/) const
-{
- static IdleMovementGenerator instance;
- return &instance;
-}
-
-RandomMovementFactory::RandomMovementFactory() : MovementGeneratorCreator(RANDOM_MOTION_TYPE) { }
-
-MovementGenerator* RandomMovementFactory::Create(Unit* /*object*/) const
-{
- return new RandomMovementGenerator<Creature>();
-}
-
-WaypointMovementFactory::WaypointMovementFactory() : MovementGeneratorCreator(WAYPOINT_MOTION_TYPE) { }
-
-MovementGenerator* WaypointMovementFactory::Create(Unit* /*object*/) const
-{
- return new WaypointMovementGenerator<Creature>(0, true);
-}
diff --git a/src/server/game/Movement/MovementGenerator.h b/src/server/game/Movement/MovementGenerator.h
index 79d3a5b9191..08188c8b484 100755
--- a/src/server/game/Movement/MovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerator.h
@@ -125,34 +125,23 @@ class MovementGeneratorMedium : public MovementGenerator
typedef FactoryHolder<MovementGenerator, Unit, MovementGeneratorType> MovementGeneratorCreator;
-template<class Movement>
-struct MovementGeneratorFactory : public MovementGeneratorCreator
-{
- MovementGeneratorFactory(MovementGeneratorType movementGeneratorType) : MovementGeneratorCreator(movementGeneratorType) { }
-
- MovementGenerator* Create(Unit* /*object*/) const override
- {
- return new Movement();
- }
-};
-
struct IdleMovementFactory : public MovementGeneratorCreator
{
- IdleMovementFactory();
+ IdleMovementFactory() : MovementGeneratorCreator(IDLE_MOTION_TYPE) { }
MovementGenerator* Create(Unit* object) const override;
};
struct RandomMovementFactory : public MovementGeneratorCreator
{
- RandomMovementFactory();
+ RandomMovementFactory() : MovementGeneratorCreator(RANDOM_MOTION_TYPE) { }
MovementGenerator* Create(Unit* object) const override;
};
struct WaypointMovementFactory : public MovementGeneratorCreator
{
- WaypointMovementFactory();
+ WaypointMovementFactory() : MovementGeneratorCreator(WAYPOINT_MOTION_TYPE) { }
MovementGenerator* Create(Unit* object) const override;
};
diff --git a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp
index 1b524873841..30bc4b154c1 100644
--- a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp
@@ -60,6 +60,12 @@ MovementGeneratorType IdleMovementGenerator::GetMovementGeneratorType() const
return IDLE_MOTION_TYPE;
}
+MovementGenerator* IdleMovementFactory::Create(Unit* /*object*/) const
+{
+ static IdleMovementGenerator instance;
+ return &instance;
+}
+
//----------------------------------------------------//
RotateMovementGenerator::RotateMovementGenerator(uint32 id, RotateDirection direction, Optional<Milliseconds> duration,
diff --git a/src/server/game/Movement/MovementGenerators/PathMovementBase.h b/src/server/game/Movement/MovementGenerators/PathMovementBase.h
index fb3d2eddccf..7fe02bd100f 100644
--- a/src/server/game/Movement/MovementGenerators/PathMovementBase.h
+++ b/src/server/game/Movement/MovementGenerators/PathMovementBase.h
@@ -25,18 +25,21 @@ template<class Entity, class BasePath>
class PathMovementBase
{
public:
+ using PathType = BasePath;
+
PathMovementBase() : _path(), _currentNode(0) { }
- virtual ~PathMovementBase() { };
+ explicit PathMovementBase(PathType&& path) : _path(std::move(path)), _currentNode(0) { }
+ virtual ~PathMovementBase() = default;
uint32 GetCurrentNode() const { return _currentNode; }
virtual std::string GetDebugInfo() const
{
return "Current Node: " + std::to_string(GetCurrentNode());
- };
+ }
protected:
- BasePath _path;
+ PathType _path;
uint32 _currentNode;
};
diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
index e1ab9c3ad38..ff705836a88 100644
--- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
@@ -275,3 +275,8 @@ void RandomMovementGenerator<Creature>::DoFinalize(Creature* owner, bool active,
owner->AI()->MovementInform(RANDOM_MOTION_TYPE, 0);
}
}
+
+MovementGenerator* RandomMovementFactory::Create(Unit* /*object*/) const
+{
+ return new RandomMovementGenerator<Creature>();
+}
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
index 55f462d3f41..11ec5c65d38 100644
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
@@ -26,13 +26,12 @@
#include "MovementDefines.h"
#include "Transport.h"
#include "WaypointManager.h"
-#include <sstream>
WaypointMovementGenerator<Creature>::WaypointMovementGenerator(uint32 pathId, bool repeating, Optional<Milliseconds> duration, Optional<float> speed,
MovementWalkRunSpeedSelectionMode speedSelectionMode, Optional<std::pair<Milliseconds, Milliseconds>> waitTimeRangeAtPathEnd,
Optional<float> wanderDistanceAtPathEnds, Optional<bool> followPathBackwardsFromEndToStart, bool generatePath,
Optional<Scripting::v2::ActionResultSetter<MovementStopReason>>&& scriptResult /*= {}*/)
- : _nextMoveTime(0), _pathId(pathId), _repeating(repeating), _loadedFromDB(true),
+ : PathMovementBase(PathType(std::in_place_type<WaypointPath const*>)), _nextMoveTime(0), _pathId(pathId), _repeating(repeating),
_speed(speed), _speedSelectionMode(speedSelectionMode), _waitTimeRangeAtPathEnd(std::move(waitTimeRangeAtPathEnd)),
_wanderDistanceAtPathEnds(wanderDistanceAtPathEnds), _followPathBackwardsFromEndToStart(followPathBackwardsFromEndToStart), _isReturningToStart(false),
_generatePath(generatePath)
@@ -50,13 +49,11 @@ WaypointMovementGenerator<Creature>::WaypointMovementGenerator(WaypointPath cons
MovementWalkRunSpeedSelectionMode speedSelectionMode, Optional<std::pair<Milliseconds, Milliseconds>> waitTimeRangeAtPathEnd,
Optional<float> wanderDistanceAtPathEnds, Optional<bool> followPathBackwardsFromEndToStart, bool generatePath,
Optional<Scripting::v2::ActionResultSetter<MovementStopReason>>&& scriptResult /*= {}*/)
- : _nextMoveTime(0), _pathId(0), _repeating(repeating), _loadedFromDB(false),
+ : PathMovementBase(std::make_unique<WaypointPath>(path)), _nextMoveTime(0), _pathId(0), _repeating(repeating),
_speed(speed), _speedSelectionMode(speedSelectionMode), _waitTimeRangeAtPathEnd(std::move(waitTimeRangeAtPathEnd)),
_wanderDistanceAtPathEnds(wanderDistanceAtPathEnds), _followPathBackwardsFromEndToStart(followPathBackwardsFromEndToStart), _isReturningToStart(false),
_generatePath(generatePath)
{
- _path = std::make_unique<WaypointPath>(path);
-
Mode = MOTION_MODE_DEFAULT;
Priority = MOTION_PRIORITY_NORMAL;
Flags = MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING;
@@ -123,7 +120,7 @@ void WaypointMovementGenerator<Creature>::DoInitialize(Creature* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
- if (_loadedFromDB)
+ if (IsLoadedFromDB())
{
if (!_pathId)
_pathId = owner->GetWaypointPathId();
@@ -270,7 +267,7 @@ void WaypointMovementGenerator<Creature>::DoFinalize(Creature* owner, bool activ
SetScriptResult(MovementStopReason::Finished);
}
-void WaypointMovementGenerator<Creature>::MovementInform(Creature* owner)
+void WaypointMovementGenerator<Creature>::MovementInform(Creature const* owner) const
{
WaypointNode const& waypoint = GetPath()->Nodes[_currentNode];
if (CreatureAI* AI = owner->AI())
@@ -481,8 +478,12 @@ bool WaypointMovementGenerator<Creature>::IsFollowingPathBackwardsFromEndToStart
std::string WaypointMovementGenerator<Creature>::GetDebugInfo() const
{
- std::stringstream sstr;
- sstr << PathMovementBase::GetDebugInfo() << "\n"
- << MovementGeneratorMedium::GetDebugInfo();
- return sstr.str();
+ return Trinity::StringFormat("{}\n{}",
+ PathMovementBase::GetDebugInfo(),
+ MovementGeneratorMedium::GetDebugInfo());
+}
+
+MovementGenerator* WaypointMovementFactory::Create(Unit* /*object*/) const
+{
+ return new WaypointMovementGenerator<Creature>(0, true);
}
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
index 23d5cc1c7c6..f6f3380cbe2 100755
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
@@ -65,7 +65,7 @@ class WaypointMovementGenerator<Creature> : public MovementGeneratorMedium<Creat
std::string GetDebugInfo() const override;
private:
- void MovementInform(Creature*);
+ void MovementInform(Creature const*) const;
void OnArrived(Creature*);
void StartMove(Creature*, bool relaunch = false);
bool ComputeNextNode();
@@ -82,10 +82,11 @@ class WaypointMovementGenerator<Creature> : public MovementGeneratorMedium<Creat
bool IsFollowingPathBackwardsFromEndToStart() const;
+ bool IsLoadedFromDB() const { return std::holds_alternative<WaypointPath const*>(_path); }
+
TimeTracker _nextMoveTime;
uint32 _pathId;
bool _repeating;
- bool _loadedFromDB;
Optional<TimeTracker> _duration;
Optional<float> _speed;