diff options
| author | Shauren <shauren.trinity@gmail.com> | 2014-11-02 14:56:16 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2014-11-02 14:56:16 +0100 |
| commit | 2a22db23883cacc05dfd2bb7cf1ee4c3be3269f7 (patch) | |
| tree | 4c41f4fb0cd87093ab73fb955aeda9342624c970 /src/server/game/Movement/Spline | |
| parent | 292c8b781810b8a2f3c146c581303c4328c9f2a0 (diff) | |
Core/PacketIO: Updated SMSG_UPDATE_OBJECT
Diffstat (limited to 'src/server/game/Movement/Spline')
| -rw-r--r-- | src/server/game/Movement/Spline/MovementPacketBuilder.cpp | 133 | ||||
| -rw-r--r-- | src/server/game/Movement/Spline/MovementPacketBuilder.h | 3 |
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 |
