diff options
| author | Shauren <shauren.trinity@gmail.com> | 2017-05-16 22:16:21 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2017-05-16 22:16:21 +0200 |
| commit | a12a34b1dce93b17dcb2978937ac00288949ae13 (patch) | |
| tree | 81dc0776fe697795169497ec213f3790459b6095 /src/server/game/Entities/Object | |
| parent | b421a5c0cbaf8acd8f1152c96ad7872cb8d7c9e3 (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.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Position.cpp | 28 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Position.h | 79 |
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__ |
