diff options
Diffstat (limited to 'src')
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; |