aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Movement
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-06-04 01:00:45 +0200
committerShauren <shauren.trinity@gmail.com>2017-06-04 01:00:45 +0200
commitb453e124231a90321fe79fbf3a62acdcfa54a691 (patch)
treeca2a815b923080385ed9a3a69aefe20ee54a7969 /src/server/game/Movement
parentec72a59b08e71ebc7ba00b32592ec903a7995a84 (diff)
Core/Game: Include cleanup part 5
* ObjectMgr.h * Player.h * Unit.h * G3D should no longer propagate everywhere from Spline/MotionMaster
Diffstat (limited to 'src/server/game/Movement')
-rw-r--r--src/server/game/Movement/MotionMaster.cpp12
-rw-r--r--src/server/game/Movement/MotionMaster.h4
-rw-r--r--src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.h4
-rw-r--r--src/server/game/Movement/PathGenerator.h1
-rw-r--r--src/server/game/Movement/Spline/MoveSpline.cpp8
-rw-r--r--src/server/game/Movement/Spline/MoveSpline.h1
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInit.cpp31
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInit.h28
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInitArgs.h14
-rw-r--r--src/server/game/Movement/Spline/Spline.h1
-rw-r--r--src/server/game/Movement/Spline/SplineChain.h6
11 files changed, 65 insertions, 45 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index 9618146160e..6d60c96d72a 100644
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -21,6 +21,7 @@
#include "Creature.h"
#include "ScriptSystem.h"
#include "Log.h"
+#include "Map.h"
#include "ConfusedMovementGenerator.h"
#include "FleeingMovementGenerator.h"
#include "HomeMovementGenerator.h"
@@ -457,7 +458,7 @@ void MotionMaster::MoveCirclePath(float x, float y, float z, float radius, bool
init.Launch();
}
-void MotionMaster::MoveSmoothPath(uint32 pointId, G3D::Vector3 const* pathPoints, size_t pathSize, bool walk, bool fly)
+void MotionMaster::MoveSmoothPath(uint32 pointId, Position const* pathPoints, size_t pathSize, bool walk, bool fly)
{
Movement::MoveSplineInit init(_owner);
if (fly)
@@ -466,7 +467,12 @@ void MotionMaster::MoveSmoothPath(uint32 pointId, G3D::Vector3 const* pathPoints
init.SetUncompressed();
}
- Movement::PointsArray path(pathPoints, pathPoints + pathSize);
+ Movement::PointsArray path;
+ path.reserve(pathSize);
+ std::transform(pathPoints, pathPoints + pathSize, std::back_inserter(path), [](Position const& point)
+ {
+ return G3D::Vector3(point.GetPositionX(), point.GetPositionY(), point.GetPositionZ());
+ });
init.MovebyPath(path);
init.SetSmooth();
init.SetWalk(walk);
@@ -488,7 +494,7 @@ void MotionMaster::MoveAlongSplineChain(uint32 pointId, uint16 dbChainId, bool w
TC_LOG_ERROR("misc", "MotionMaster::MoveAlongSplineChain: non-creature %s tried to walk along DB spline chain. Ignoring.", _owner->GetGUID().ToString().c_str());
return;
}
- SplineChain const* chain = sScriptSystemMgr->GetSplineChain(owner, dbChainId);
+ std::vector<SplineChainLink> const* chain = sScriptSystemMgr->GetSplineChain(owner, dbChainId);
if (!chain)
{
TC_LOG_ERROR("misc", "MotionMaster::MoveAlongSplineChain: creature with entry %u tried to walk along non-existing spline chain with DB id %u.", owner->GetEntry(), dbChainId);
diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h
index e338b61244e..a509c908cd1 100644
--- a/src/server/game/Movement/MotionMaster.h
+++ b/src/server/game/Movement/MotionMaster.h
@@ -46,7 +46,7 @@ namespace Movement
#define VISUAL_WAYPOINT 1
// values 0 ... MAX_DB_MOTION_TYPE-1 used in DB
-enum MovementGeneratorType
+enum MovementGeneratorType : uint8
{
IDLE_MOTION_TYPE = 0, // IdleMovementGenerator.h
RANDOM_MOTION_TYPE = 1, // RandomMovementGenerator.h
@@ -215,7 +215,7 @@ class TC_GAME_API MotionMaster //: private std::stack<MovementGenerator *>
}
void MoveJump(float x, float y, float z, float o, float speedXY, float speedZ, uint32 id = EVENT_JUMP, bool hasOrientation = false, JumpArrivalCastArgs const* arrivalCast = nullptr, Movement::SpellEffectExtraData const* spellEffectExtraData = nullptr);
void MoveCirclePath(float x, float y, float z, float radius, bool clockwise, uint8 stepCount);
- void MoveSmoothPath(uint32 pointId, G3D::Vector3 const* pathPoints, size_t pathSize, bool walk = false, bool fly = false);
+ void MoveSmoothPath(uint32 pointId, Position const* pathPoints, size_t pathSize, bool walk = false, bool fly = false);
// Walk along spline chain stored in DB (script_spline_chain_meta and script_spline_chain_waypoints)
void MoveAlongSplineChain(uint32 pointId, uint16 dbChainId, bool walk);
void MoveAlongSplineChain(uint32 pointId, std::vector<SplineChainLink> const& chain, bool walk);
diff --git a/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.h b/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.h
index 2892dc3e5c6..a0fbabb4fe1 100644
--- a/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.h
@@ -24,7 +24,7 @@
class TC_GAME_API SplineChainMovementGenerator : public MovementGenerator
{
public:
- explicit SplineChainMovementGenerator(uint32 id, SplineChain const& chain, bool walk = false) : _id(id), _chain(chain), _chainSize(chain.size()), _walk(walk), finished(false), _nextIndex(0), _nextFirstWP(0), _msToNext(0) { }
+ explicit SplineChainMovementGenerator(uint32 id, std::vector<SplineChainLink> const& chain, bool walk = false) : _id(id), _chain(chain), _chainSize(chain.size()), _walk(walk), finished(false), _nextIndex(0), _nextFirstWP(0), _msToNext(0) { }
explicit SplineChainMovementGenerator(SplineChainResumeInfo const& info) : _id(info.PointID), _chain(*info.Chain), _chainSize(info.Chain->size()), _walk(info.IsWalkMode), finished(info.SplineIndex >= info.Chain->size()), _nextIndex(info.SplineIndex), _nextFirstWP(info.PointIndex), _msToNext(info.TimeToNext) { }
void Initialize(Unit* me) override;
void Finalize(Unit* me) override;
@@ -41,7 +41,7 @@ class TC_GAME_API SplineChainMovementGenerator : public MovementGenerator
void SendSplineFor(Unit* me, uint32 index, uint32& toNext);
uint32 SendPathSpline(Unit* me, Movement::PointsArray const& wp) const;
uint32 const _id;
- SplineChain const& _chain;
+ std::vector<SplineChainLink> const& _chain;
uint8 const _chainSize;
bool const _walk;
bool finished;
diff --git a/src/server/game/Movement/PathGenerator.h b/src/server/game/Movement/PathGenerator.h
index a3e88b8a705..2884f8a1220 100644
--- a/src/server/game/Movement/PathGenerator.h
+++ b/src/server/game/Movement/PathGenerator.h
@@ -23,6 +23,7 @@
#include "DetourNavMesh.h"
#include "DetourNavMeshQuery.h"
#include "MoveSplineInitArgs.h"
+#include <G3D/Vector3.h>
class Unit;
diff --git a/src/server/game/Movement/Spline/MoveSpline.cpp b/src/server/game/Movement/Spline/MoveSpline.cpp
index a30c91c070c..9dc75a1225d 100644
--- a/src/server/game/Movement/Spline/MoveSpline.cpp
+++ b/src/server/game/Movement/Spline/MoveSpline.cpp
@@ -257,6 +257,14 @@ bool MoveSplineInitArgs::_checkPathLengths() const
return false;
return true;
}
+MoveSplineInitArgs::MoveSplineInitArgs(size_t path_capacity /*= 16*/) : path_Idx_offset(0), velocity(0.f),
+parabolic_amplitude(0.f), time_perc(0.f), splineId(0), initialOrientation(0.f),
+walk(false), HasVelocity(false), TransformForTransport(true)
+{
+ path.reserve(path_capacity);
+}
+
+MoveSplineInitArgs::~MoveSplineInitArgs() = default;
/// ============================================================================================
diff --git a/src/server/game/Movement/Spline/MoveSpline.h b/src/server/game/Movement/Spline/MoveSpline.h
index 2df68eb94e8..c88037b7506 100644
--- a/src/server/game/Movement/Spline/MoveSpline.h
+++ b/src/server/game/Movement/Spline/MoveSpline.h
@@ -21,6 +21,7 @@
#include "Spline.h"
#include "MoveSplineInitArgs.h"
+#include <G3D/Vector3.h>
namespace WorldPackets
{
diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp
index 1f36a292bbf..1745ef24a39 100644
--- a/src/server/game/Movement/Spline/MoveSplineInit.cpp
+++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp
@@ -17,10 +17,11 @@
*/
#include "MoveSplineInit.h"
+#include "MovementPackets.h"
#include "MoveSpline.h"
-#include "Unit.h"
+#include "PathGenerator.h"
#include "Transport.h"
-#include "MovementPackets.h"
+#include "Unit.h"
namespace Movement
{
@@ -189,7 +190,19 @@ namespace Movement
args.flags.steering = unit->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_STEERING);
}
- void MoveSplineInit::SetFacing(const Unit* target)
+ MoveSplineInit::~MoveSplineInit() = default;
+
+ void MoveSplineInit::SetFacing(Vector3 const& spot)
+ {
+ TransportPathTransform transform(unit, args.TransformForTransport);
+ Vector3 finalSpot = transform(spot);
+ args.facing.f.x = finalSpot.x;
+ args.facing.f.y = finalSpot.y;
+ args.facing.f.z = finalSpot.z;
+ args.facing.type = MONSTER_MOVE_FACING_SPOT;
+ }
+
+ void MoveSplineInit::SetFacing(Unit const* target)
{
args.facing.angle = unit->GetAngle(target);
args.facing.target = target->GetGUID();
@@ -210,6 +223,18 @@ namespace Movement
args.facing.type = MONSTER_MOVE_FACING_ANGLE;
}
+ void MoveSplineInit::MovebyPath(const PointsArray& controls, int32 path_offset)
+ {
+ args.path_Idx_offset = path_offset;
+ args.path.reserve(controls.size());
+ std::transform(controls.begin(), controls.end(), std::back_inserter(args.path), TransportPathTransform(unit, args.TransformForTransport));
+ }
+
+ void MoveSplineInit::MoveTo(float x, float y, float z, bool generatePath, bool forceDestination)
+ {
+ MoveTo(G3D::Vector3(x, y, z), generatePath, forceDestination);
+ }
+
void MoveSplineInit::MoveTo(const Vector3& dest, bool generatePath, bool forceDestination)
{
if (generatePath)
diff --git a/src/server/game/Movement/Spline/MoveSplineInit.h b/src/server/game/Movement/Spline/MoveSplineInit.h
index e02f840f107..cca4c32ef2b 100644
--- a/src/server/game/Movement/Spline/MoveSplineInit.h
+++ b/src/server/game/Movement/Spline/MoveSplineInit.h
@@ -20,7 +20,6 @@
#define TRINITYSERVER_MOVESPLINEINIT_H
#include "MoveSplineInitArgs.h"
-#include "PathGenerator.h"
class Unit;
@@ -54,6 +53,9 @@ namespace Movement
public:
explicit MoveSplineInit(Unit* m);
+ ~MoveSplineInit();
+ MoveSplineInit(MoveSplineInit const&) = delete;
+ MoveSplineInit& operator=(MoveSplineInit const&) = delete;
/* Final pass of initialization that launches spline movement.
*/
@@ -80,7 +82,7 @@ namespace Movement
*/
void SetFacing(float angle);
void SetFacing(Vector3 const& point);
- void SetFacing(const Unit* target);
+ void SetFacing(Unit const* target);
/* Initializes movement by path
* @param path - array of points, shouldn't be empty
@@ -170,18 +172,6 @@ namespace Movement
inline void MoveSplineInit::SetTransportExit() { args.flags.EnableTransportExit(); }
inline void MoveSplineInit::SetOrientationFixed(bool enable) { args.flags.orientationFixed = enable; }
- inline void MoveSplineInit::MovebyPath(const PointsArray& controls, int32 path_offset)
- {
- args.path_Idx_offset = path_offset;
- args.path.resize(controls.size());
- std::transform(controls.begin(), controls.end(), args.path.begin(), TransportPathTransform(unit, args.TransformForTransport));
- }
-
- inline void MoveSplineInit::MoveTo(float x, float y, float z, bool generatePath, bool forceDestination)
- {
- MoveTo(G3D::Vector3(x, y, z), generatePath, forceDestination);
- }
-
inline void MoveSplineInit::SetParabolic(float amplitude, float time_shift)
{
args.time_perc = time_shift;
@@ -195,16 +185,6 @@ namespace Movement
args.flags.EnableAnimation((uint8)anim);
}
- inline void MoveSplineInit::SetFacing(Vector3 const& spot)
- {
- TransportPathTransform transform(unit, args.TransformForTransport);
- Vector3 finalSpot = transform(spot);
- args.facing.f.x = finalSpot.x;
- args.facing.f.y = finalSpot.y;
- args.facing.f.z = finalSpot.z;
- args.facing.type = MONSTER_MOVE_FACING_SPOT;
- }
-
inline void MoveSplineInit::DisableTransportPathTransformations() { args.TransformForTransport = false; }
inline void MoveSplineInit::SetSpellEffectExtraData(SpellEffectExtraData const& spellEffectExtraData)
diff --git a/src/server/game/Movement/Spline/MoveSplineInitArgs.h b/src/server/game/Movement/Spline/MoveSplineInitArgs.h
index d9688674dfc..f0011bcb9fb 100644
--- a/src/server/game/Movement/Spline/MoveSplineInitArgs.h
+++ b/src/server/game/Movement/Spline/MoveSplineInitArgs.h
@@ -22,7 +22,6 @@
#include "MoveSplineFlag.h"
#include "ObjectGuid.h"
#include "Optional.h"
-#include <G3D/Vector3.h>
class Unit;
@@ -32,7 +31,10 @@ namespace Movement
struct FacingInfo
{
- G3D::Vector3 f;
+ struct
+ {
+ float x, y, z;
+ } f;
ObjectGuid target;
float angle;
@@ -51,12 +53,8 @@ namespace Movement
struct MoveSplineInitArgs
{
- MoveSplineInitArgs(size_t path_capacity = 16) : path_Idx_offset(0), velocity(0.f),
- parabolic_amplitude(0.f), time_perc(0.f), splineId(0), initialOrientation(0.f),
- walk(false), HasVelocity(false), TransformForTransport(true)
- {
- path.reserve(path_capacity);
- }
+ explicit MoveSplineInitArgs(size_t path_capacity = 16);
+ ~MoveSplineInitArgs();
PointsArray path;
FacingInfo facing;
diff --git a/src/server/game/Movement/Spline/Spline.h b/src/server/game/Movement/Spline/Spline.h
index e0f7cdce7fc..a029eb295bf 100644
--- a/src/server/game/Movement/Spline/Spline.h
+++ b/src/server/game/Movement/Spline/Spline.h
@@ -23,6 +23,7 @@
#include "Errors.h"
#include <G3D/Vector3.h>
#include <limits>
+#include <vector>
namespace Movement {
diff --git a/src/server/game/Movement/Spline/SplineChain.h b/src/server/game/Movement/Spline/SplineChain.h
index 33d816712b7..e189dc3ecbf 100644
--- a/src/server/game/Movement/Spline/SplineChain.h
+++ b/src/server/game/Movement/Spline/SplineChain.h
@@ -19,6 +19,7 @@
#define TRINITY_SPLINECHAIN_H
#include "MoveSplineInitArgs.h"
+#include <G3D/Vector3.h>
struct TC_GAME_API SplineChainLink
{
@@ -29,17 +30,16 @@ struct TC_GAME_API SplineChainLink
uint32 ExpectedDuration;
uint32 TimeToNext;
};
-typedef std::vector<SplineChainLink> SplineChain;
struct TC_GAME_API SplineChainResumeInfo
{
SplineChainResumeInfo() : PointID(0), Chain(nullptr), IsWalkMode(false), SplineIndex(0), PointIndex(0), TimeToNext(0) { }
- SplineChainResumeInfo(uint32 id, SplineChain const* chain, bool walk, uint8 splineIndex, uint8 wpIndex, uint32 msToNext) :
+ SplineChainResumeInfo(uint32 id, std::vector<SplineChainLink> const* chain, bool walk, uint8 splineIndex, uint8 wpIndex, uint32 msToNext) :
PointID(id), Chain(chain), IsWalkMode(walk), SplineIndex(splineIndex), PointIndex(wpIndex), TimeToNext(msToNext) { }
bool Empty() const { return Chain == nullptr; }
void Clear() { Chain = nullptr; }
uint32 PointID;
- SplineChain const* Chain;
+ std::vector<SplineChainLink> const* Chain;
bool IsWalkMode;
uint8 SplineIndex;
uint8 PointIndex;