aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Object
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-05-16 22:16:21 +0200
committerShauren <shauren.trinity@gmail.com>2017-05-16 22:16:21 +0200
commita12a34b1dce93b17dcb2978937ac00288949ae13 (patch)
tree81dc0776fe697795169497ec213f3790459b6095 /src/server/game/Entities/Object
parentb421a5c0cbaf8acd8f1152c96ad7872cb8d7c9e3 (diff)
Core/Game: Include cleanup - removed G3D classes from packets
* Use our own Position class instead, with the coords written to packets being part of type
Diffstat (limited to 'src/server/game/Entities/Object')
-rw-r--r--src/server/game/Entities/Object/Object.cpp10
-rw-r--r--src/server/game/Entities/Object/Position.cpp28
-rw-r--r--src/server/game/Entities/Object/Position.h79
3 files changed, 65 insertions, 52 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 333a6a3c5d0..c59ae332c9e 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -519,7 +519,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const
*data << uint32(areaTrigger->GetTimeSinceCreated());
- *data << areaTrigger->GetRollPitchYaw();
+ *data << areaTrigger->GetRollPitchYaw().PositionXYZStream();
bool hasAbsoluteOrientation = areaTriggerTemplate->HasFlag(AREATRIGGER_FLAG_HAS_ABSOLUTE_ORIENTATION);
bool hasDynamicShape = areaTriggerTemplate->HasFlag(AREATRIGGER_FLAG_HAS_DYNAMIC_SHAPE);
@@ -578,11 +578,11 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const
data->WriteBits(splinePoints.size(), 16);
for (G3D::Vector3 const& spline : splinePoints)
- *data << spline;
+ *data << spline.x << spline.y << spline.z;
}
if (hasTargetRollPitchYaw)
- *data << areaTrigger->GetTargetRollPitchYaw();
+ *data << areaTrigger->GetTargetRollPitchYaw().PositionXYZStream();
if (hasScaleCurveID)
*data << uint32(areaTriggerMiscTemplate->ScaleCurveId);
@@ -626,10 +626,10 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const
*data << float(areaTriggerTemplate->PolygonDatas.HeightTarget);
for (G3D::Vector2 const& vertice : areaTriggerTemplate->PolygonVertices)
- *data << vertice;
+ *data << vertice.x << vertice.y;
for (G3D::Vector2 const& vertice : areaTriggerTemplate->PolygonVerticesTarget)
- *data << vertice;
+ *data << vertice.x << vertice.y;
}
if (hasAreaTriggerCylinder)
diff --git a/src/server/game/Entities/Object/Position.cpp b/src/server/game/Entities/Object/Position.cpp
index bbb6ee271cb..63120fff443 100644
--- a/src/server/game/Entities/Object/Position.cpp
+++ b/src/server/game/Entities/Object/Position.cpp
@@ -22,16 +22,6 @@
#include <G3D/g3dmath.h>
-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) &&
@@ -175,14 +165,14 @@ std::string Position::ToString() const
return sstr.str();
}
-ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYStreamer const& streamer)
+ByteBuffer& operator<<(ByteBuffer& buf, Position::ConstStreamer<Position::XY> const& streamer)
{
buf << streamer.Pos->GetPositionX();
buf << streamer.Pos->GetPositionY();
return buf;
}
-ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYStreamer const& streamer)
+ByteBuffer& operator>>(ByteBuffer& buf, Position::Streamer<Position::XY> const& streamer)
{
float x, y;
buf >> x >> y;
@@ -190,7 +180,7 @@ ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYStreamer const& stre
return buf;
}
-ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZStreamer const& streamer)
+ByteBuffer& operator<<(ByteBuffer& buf, Position::ConstStreamer<Position::XYZ> const& streamer)
{
buf << streamer.Pos->GetPositionX();
buf << streamer.Pos->GetPositionY();
@@ -198,7 +188,7 @@ ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZStreamer const& str
return buf;
}
-ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZStreamer const& streamer)
+ByteBuffer& operator>>(ByteBuffer& buf, Position::Streamer<Position::XYZ> const& streamer)
{
float x, y, z;
buf >> x >> y >> z;
@@ -206,7 +196,7 @@ ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZStreamer const& str
return buf;
}
-ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer)
+ByteBuffer& operator<<(ByteBuffer& buf, Position::ConstStreamer<Position::XYZO> const& streamer)
{
buf << streamer.Pos->GetPositionX();
buf << streamer.Pos->GetPositionY();
@@ -215,10 +205,16 @@ ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZOStreamer const& st
return buf;
}
-ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer)
+ByteBuffer& operator>>(ByteBuffer& buf, Position::Streamer<Position::XYZO> const& streamer)
{
float x, y, z, o;
buf >> x >> y >> z >> o;
streamer.Pos->Relocate(x, y, z, o);
return buf;
}
+
+ByteBuffer& operator<<(ByteBuffer& buf, Position::ConstStreamer<Position::PackedXYZ> const& streamer)
+{
+ buf.appendPackXYZ(streamer.Pos->GetPositionX(), streamer.Pos->GetPositionY(), streamer.Pos->GetPositionZ());
+ return buf;
+}
diff --git a/src/server/game/Entities/Object/Position.h b/src/server/game/Entities/Object/Position.h
index 74e1d7c6e42..381f970a014 100644
--- a/src/server/game/Entities/Object/Position.h
+++ b/src/server/game/Entities/Object/Position.h
@@ -19,9 +19,6 @@
#define Trinity_game_Position_h__
#include "Common.h"
-
-#include <G3D/Vector3.h>
-
#include <cmath>
class ByteBuffer;
@@ -33,25 +30,24 @@ struct TC_GAME_API Position
Position(Position const& loc) { Relocate(loc); }
- Position(G3D::Vector3 const& vect);
-
- operator G3D::Vector3() const;
+ // streamer tags
+ struct XY;
+ struct XYZ;
+ struct XYZO;
+ struct PackedXYZ;
- struct PositionXYStreamer
+ template<class Tag>
+ struct ConstStreamer
{
- explicit PositionXYStreamer(Position& pos) : Pos(&pos) { }
- Position* Pos;
+ explicit ConstStreamer(Position const& pos) : Pos(&pos) { }
+ Position const* Pos;
};
- struct PositionXYZStreamer
+ template<class Tag>
+ struct Streamer
{
- explicit PositionXYZStreamer(Position& pos) : Pos(&pos) { }
- Position* Pos;
- };
-
- struct PositionXYZOStreamer
- {
- explicit PositionXYZOStreamer(Position& pos) : Pos(&pos) { }
+ explicit Streamer(Position& pos) : Pos(&pos) { }
+ operator ConstStreamer<Tag>() { return ConstStreamer<Tag>(*Pos); }
Position* Pos;
};
@@ -95,11 +91,6 @@ public:
m_positionX = pos->m_positionX; m_positionY = pos->m_positionY; m_positionZ = pos->m_positionZ; SetOrientation(pos->m_orientation);
}
- void Relocate(G3D::Vector3 const& pos)
- {
- m_positionX = pos.x; m_positionY = pos.y; m_positionZ = pos.z;
- }
-
void RelocateOffset(Position const &offset);
void SetOrientation(float orientation)
@@ -129,9 +120,14 @@ public:
Position GetPosition() const { return *this; }
- Position::PositionXYStreamer PositionXYStream() { return PositionXYStreamer(*this); }
- Position::PositionXYZStreamer PositionXYZStream() { return PositionXYZStreamer(*this); }
- Position::PositionXYZOStreamer PositionXYZOStream() { return PositionXYZOStreamer(*this); }
+ Streamer<XY> PositionXYStream() { return Streamer<XY>(*this); }
+ ConstStreamer<XY> PositionXYStream() const { return ConstStreamer<XY>(*this); }
+ Streamer<XYZ> PositionXYZStream() { return Streamer<XYZ>(*this); }
+ ConstStreamer<XYZ> PositionXYZStream() const { return ConstStreamer<XYZ>(*this); }
+ Streamer<XYZO> PositionXYZOStream() { return Streamer<XYZO>(*this); }
+ ConstStreamer<XYZO> PositionXYZOStream() const { return ConstStreamer<XYZO>(*this); }
+ Streamer<PackedXYZ> PositionPackedXYZStream() { return Streamer<PackedXYZ>(*this); }
+ ConstStreamer<PackedXYZ> PositionPackedXYZStream() const { return ConstStreamer<PackedXYZ>(*this); }
bool IsPositionValid() const;
@@ -289,11 +285,32 @@ public:
uint32 m_mapId;
};
-TC_GAME_API ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYStreamer const& streamer);
-TC_GAME_API ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYStreamer const& streamer);
-TC_GAME_API ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZStreamer const& streamer);
-TC_GAME_API ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZStreamer const& streamer);
-TC_GAME_API ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer);
-TC_GAME_API ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer);
+TC_GAME_API ByteBuffer& operator<<(ByteBuffer& buf, Position::ConstStreamer<Position::XY> const& streamer);
+TC_GAME_API ByteBuffer& operator>>(ByteBuffer& buf, Position::Streamer<Position::XY> const& streamer);
+TC_GAME_API ByteBuffer& operator<<(ByteBuffer& buf, Position::ConstStreamer<Position::XYZ> const& streamer);
+TC_GAME_API ByteBuffer& operator>>(ByteBuffer& buf, Position::Streamer<Position::XYZ> const& streamer);
+TC_GAME_API ByteBuffer& operator<<(ByteBuffer& buf, Position::ConstStreamer<Position::XYZO> const& streamer);
+TC_GAME_API ByteBuffer& operator>>(ByteBuffer& buf, Position::Streamer<Position::XYZO> const& streamer);
+TC_GAME_API ByteBuffer& operator<<(ByteBuffer& buf, Position::ConstStreamer<Position::PackedXYZ> const& streamer);
+
+template<class Tag>
+struct TaggedPosition
+{
+ TaggedPosition(float x = 0.0f, float y = 0.0f, float z = 0.0f, float o = 0.0f) : Pos(x, y, z, o) { }
+ TaggedPosition(Position const& pos) : Pos(pos) { }
+
+ TaggedPosition& operator=(Position const& pos)
+ {
+ Pos.Relocate(pos);
+ return *this;
+ }
+
+ operator Position() const { return Pos; }
+
+ friend ByteBuffer& operator<<(ByteBuffer& buf, TaggedPosition const& tagged) { return buf << Position::ConstStreamer<Tag>(tagged.Pos); }
+ friend ByteBuffer& operator>>(ByteBuffer& buf, TaggedPosition& tagged) { return buf >> Position::Streamer<Tag>(tagged.Pos); }
+
+ Position Pos;
+};
#endif // Trinity_game_Position_h__