aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortreeston <treeston.mmoc@gmail.com>2016-08-31 21:41:23 +0200
committerjoschiwald <joschiwald.trinity@gmail.com>2017-02-18 17:55:40 +0100
commit7b3b333dd5b0bdb8a176d54571eb424ecec20bdc (patch)
treee4d768883583adbfd1cc3f61f781fb098c6e8d14
parentebbcd601b95d05f631a22552e27223a04f0aa08f (diff)
Core/Position: Allow implicit casting to G3D::Vector. Also, add a utility overload to MotionMaster.
(cherry picked from commit 9f15482b849d7a77a4a0cc68f18aabb8ee6c58c9)
-rw-r--r--src/server/game/Entities/Object/Position.cpp5
-rw-r--r--src/server/game/Entities/Object/Position.h2
-rw-r--r--src/server/game/Movement/MotionMaster.cpp4
-rw-r--r--src/server/game/Movement/MotionMaster.h2
4 files changed, 13 insertions, 0 deletions
diff --git a/src/server/game/Entities/Object/Position.cpp b/src/server/game/Entities/Object/Position.cpp
index ad3c5a2b03b..6c5ad7a97ef 100644
--- a/src/server/game/Entities/Object/Position.cpp
+++ b/src/server/game/Entities/Object/Position.cpp
@@ -26,6 +26,11 @@ Position::Position(G3D::Vector3 const& vect)
Relocate(vect.x, vect.y, vect.z, 0.f);
}
+Position::operator G3D::Vector3() const
+{
+ return { m_positionX, m_positionY, m_positionZ };
+}
+
bool Position::operator==(Position const &a)
{
return (G3D::fuzzyEq(a.m_positionX, m_positionX) &&
diff --git a/src/server/game/Entities/Object/Position.h b/src/server/game/Entities/Object/Position.h
index b814b6bf9ed..1553d4e0791 100644
--- a/src/server/game/Entities/Object/Position.h
+++ b/src/server/game/Entities/Object/Position.h
@@ -33,6 +33,8 @@ struct TC_GAME_API Position
Position(G3D::Vector3 const& vect);
+ operator G3D::Vector3() const;
+
struct PositionXYStreamer
{
explicit PositionXYStreamer(Position& pos) : Pos(&pos) { }
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index 6b12e1d625f..6756463283f 100644
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -443,7 +443,11 @@ void MotionMaster::MoveCirclePath(float x, float y, float z, float radius, bool
void MotionMaster::MoveSmoothPath(uint32 pointId, G3D::Vector3 const* pathPoints, size_t pathSize, bool walk)
{
Movement::PointsArray path(pathPoints, pathPoints + pathSize);
+ MoveSmoothPath(pointId, path, walk);
+}
+void MotionMaster::MoveSmoothPath(uint32 pointId, Movement::PointsArray const& path, bool walk)
+{
Movement::MoveSplineInit init(_owner);
if (_owner->CanFly())
init.SetUncompressed();
diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h
index dee4f47b376..905dcde580e 100644
--- a/src/server/game/Movement/MotionMaster.h
+++ b/src/server/game/Movement/MotionMaster.h
@@ -23,6 +23,7 @@
#include <vector>
#include "SharedDefines.h"
#include "Object.h"
+#include "MoveSplineInitArgs.h"
class MovementGenerator;
class Unit;
@@ -194,6 +195,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, uint32 arrivalSpellId = 0, ObjectGuid const& arrivalSpellTargetGuid = ObjectGuid::Empty);
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);
+ void MoveSmoothPath(uint32 pointId, Movement::PointsArray const& points, bool walk);
void MoveFall(uint32 id = 0);
void MoveSeekAssistance(float x, float y, float z);