aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Movement/Spline
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2014-11-02 14:56:16 +0100
committerShauren <shauren.trinity@gmail.com>2014-11-02 14:56:16 +0100
commit2a22db23883cacc05dfd2bb7cf1ee4c3be3269f7 (patch)
tree4c41f4fb0cd87093ab73fb955aeda9342624c970 /src/server/game/Movement/Spline
parent292c8b781810b8a2f3c146c581303c4328c9f2a0 (diff)
Core/PacketIO: Updated SMSG_UPDATE_OBJECT
Diffstat (limited to 'src/server/game/Movement/Spline')
-rw-r--r--src/server/game/Movement/Spline/MovementPacketBuilder.cpp133
-rw-r--r--src/server/game/Movement/Spline/MovementPacketBuilder.h3
2 files changed, 55 insertions, 81 deletions
diff --git a/src/server/game/Movement/Spline/MovementPacketBuilder.cpp b/src/server/game/Movement/Spline/MovementPacketBuilder.cpp
index fa44c19c354..02fdabb3938 100644
--- a/src/server/game/Movement/Spline/MovementPacketBuilder.cpp
+++ b/src/server/game/Movement/Spline/MovementPacketBuilder.cpp
@@ -149,100 +149,75 @@ namespace Movement
WriteLinearPath(spline, data);
}
- void PacketBuilder::WriteCreateBits(MoveSpline const& moveSpline, ByteBuffer& data)
+ void PacketBuilder::WriteCreate(MoveSpline const& moveSpline, ByteBuffer& data)
{
- if (!data.WriteBit(!moveSpline.Finalized()))
- return;
-
- data.WriteBits(uint8(moveSpline.spline.mode()), 2);
- data.WriteBit(moveSpline.splineflags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation));
- data.WriteBits(moveSpline.getPath().size(), 22);
- switch (moveSpline.splineflags & MoveSplineFlag::Mask_Final_Facing)
+ data << uint32(moveSpline.GetId()); // ID
+ if (!moveSpline.isCyclic()) // Destination
{
- case MoveSplineFlag::Final_Target:
- {
- ObjectGuid targetGuid(moveSpline.facing.target);
- data.WriteBits(2, 2);
- data.WriteBit(targetGuid[4]);
- data.WriteBit(targetGuid[3]);
- data.WriteBit(targetGuid[7]);
- data.WriteBit(targetGuid[2]);
- data.WriteBit(targetGuid[6]);
- data.WriteBit(targetGuid[1]);
- data.WriteBit(targetGuid[0]);
- data.WriteBit(targetGuid[5]);
- break;
- }
- case MoveSplineFlag::Final_Angle:
- data.WriteBits(0, 2);
- break;
- case MoveSplineFlag::Final_Point:
- data.WriteBits(1, 2);
- break;
- default:
- data.WriteBits(3, 2);
- break;
+ Vector3 dest = moveSpline.FinalDestination();
+ data << float(dest.z);
+ data << float(dest.x);
+ data << float(dest.y);
}
+ else
+ data << Vector3::zero();
- data.WriteBit((moveSpline.splineflags & MoveSplineFlag::Parabolic) && moveSpline.effect_start_time < moveSpline.Duration());
- data.WriteBits(moveSpline.splineflags.raw(), 25);
- }
-
- void PacketBuilder::WriteCreateData(MoveSpline const& moveSpline, ByteBuffer& data)
- {
- if (!moveSpline.Finalized())
+ if (data.WriteBit(!moveSpline.Finalized())) // MovementSplineMove
{
MoveSplineFlag const& splineFlags = moveSpline.splineflags;
+ data.FlushBits();
- if ((splineFlags & MoveSplineFlag::Parabolic) && moveSpline.effect_start_time < moveSpline.Duration())
- data << moveSpline.vertical_acceleration; // added in 3.1
+ data.WriteBits(moveSpline.splineflags.raw(), 25); // SplineFlags
+ data.WriteBits(uint8(moveSpline.spline.mode()), 2); // Mode
- data << moveSpline.timePassed();
+ bool HasJumpGravity = data.WriteBit(moveSpline.splineflags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation)); // HasJumpGravity
+ bool HasSpecialTime = data.WriteBit((moveSpline.splineflags & MoveSplineFlag::Parabolic) && moveSpline.effect_start_time < moveSpline.Duration()); // HasSpecialTime
if (splineFlags.final_angle)
- data << moveSpline.facing.angle;
+ data.WriteBit(3);
else if (splineFlags.final_target)
- {
- ObjectGuid facingGuid(moveSpline.facing.target);
- data.WriteByteSeq(facingGuid[5]);
- data.WriteByteSeq(facingGuid[3]);
- data.WriteByteSeq(facingGuid[7]);
- data.WriteByteSeq(facingGuid[1]);
- data.WriteByteSeq(facingGuid[6]);
- data.WriteByteSeq(facingGuid[4]);
- data.WriteByteSeq(facingGuid[2]);
- data.WriteByteSeq(facingGuid[0]);
- }
-
- uint32 nodes = moveSpline.getPath().size();
- for (uint32 i = 0; i < nodes; ++i)
- {
- data << float(moveSpline.getPath()[i].z);
- data << float(moveSpline.getPath()[i].x);
- data << float(moveSpline.getPath()[i].y);
- }
+ data.WriteBit(2);
+ else if (splineFlags.final_point)
+ data.WriteBit(1);
+ else
+ data.WriteBit(0);
- if (splineFlags.final_point)
- data << moveSpline.facing.f.x << moveSpline.facing.f.z << moveSpline.facing.f.y;
+ data.WriteBit(0); // HasSplineFilterKey
- data << float(1.f); // splineInfo.duration_mod_next; added in 3.1
- data << moveSpline.Duration();
- if (splineFlags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation))
- data << moveSpline.effect_start_time; // added in 3.1
+ data << int32(moveSpline.timePassed()); // Elapsed
+ data << uint32(moveSpline.Duration()); // Duration
+ data << float(1.0f); // DurationModifier
+ data << float(1.0f); // NextDurationModifier
- data << float(1.f); // splineInfo.duration_mod; added in 3.1
- }
+ uint32 PointsCount = moveSpline.getPath().size();
+ data << uint32(PointsCount);
- if (!moveSpline.isCyclic())
- {
- Vector3 dest = moveSpline.FinalDestination();
- data << float(dest.z);
- data << float(dest.x);
- data << float(dest.y);
+ if (splineFlags.final_angle) // FaceDirection
+ data << moveSpline.facing.angle;
+ else if (splineFlags.final_target) // FaceGUID
+ data << moveSpline.facing.target;
+ else if (splineFlags.final_point) // FaceSpot
+ data << moveSpline.facing.f.x << moveSpline.facing.f.y << moveSpline.facing.f.z;
+
+ if (HasJumpGravity)
+ data << float(moveSpline.vertical_acceleration); // JumpGravity
+
+ if (HasSpecialTime)
+ data << uint32(moveSpline.effect_start_time); // SpecialTime
+
+ //if (HasSplineFilterKey)
+ //{
+ // data << uint32(FilterKeysCount);
+ // for (var i = 0; i < PointsCount; ++i)
+ // {
+ // data << float(In);
+ // data << float(Out);
+ // }
+
+ // data.WriteBits(FilterFlags, 2);
+ //}
+
+ data.append<Vector3>(&moveSpline.getPath()[0], PointsCount); // Points
}
- else
- data << Vector3::zero();
-
- data << moveSpline.GetId();
}
}
diff --git a/src/server/game/Movement/Spline/MovementPacketBuilder.h b/src/server/game/Movement/Spline/MovementPacketBuilder.h
index 750cdc0fdbf..2878a330f67 100644
--- a/src/server/game/Movement/Spline/MovementPacketBuilder.h
+++ b/src/server/game/Movement/Spline/MovementPacketBuilder.h
@@ -37,8 +37,7 @@ namespace Movement
static void WriteMonsterMove(const MoveSpline& mov, WorldPacket& data);
static void WriteStopMovement(Vector3 const& loc, uint32 splineId, ByteBuffer& data);
- static void WriteCreateBits(MoveSpline const& moveSpline, ByteBuffer& data);
- static void WriteCreateData(MoveSpline const& moveSpline, ByteBuffer& data);
+ static void WriteCreate(MoveSpline const& moveSpline, ByteBuffer& data);
};
}
#endif // TRINITYSERVER_PACKET_BUILDER_H