28 bool hasPrevTime = transportInfo.
prevTime != 0;
29 bool hasVehicleId = transportInfo.
vehicleId != 0;
31 data << transportInfo.
guid;
36 data << transportInfo.
seat;
37 data << transportInfo.
time;
39 data << WorldPackets::Bits<1>(hasPrevTime);
40 data << WorldPackets::Bits<1>(hasVehicleId);
55 data >> transportInfo.
guid;
57 data >> transportInfo.
seat;
58 data >> transportInfo.
time;
60 bool hasPrevTime = data.
ReadBit();
61 bool hasVehicleId = data.
ReadBit();
76 bool hasFallData = hasFallDirection || movementInfo.
jump.
fallTime != 0;
78 data << movementInfo.
guid;
84 data << float(movementInfo.
pitch);
87 uint32 removeMovementForcesCount = 0;
88 data << removeMovementForcesCount;
101 data << WorldPackets::Bits<1>(hasTransportData);
102 data << WorldPackets::Bits<1>(hasFallData);
103 data << WorldPackets::Bits<1>(
false);
104 data << WorldPackets::Bits<1>(
false);
105 data << WorldPackets::Bits<1>(
false);
112 if (hasTransportData)
121 data << movementInfo.
inertia->force.PositionXYZStream();
127 data << float(movementInfo.
advFlying->forwardVelocity);
128 data << float(movementInfo.
advFlying->upVelocity);
136 data << WorldPackets::Bits<1>(hasFallDirection);
138 if (hasFallDirection)
149 data << float(movementInfo.
driveStatus->movementAngle);
150 data << WorldPackets::Bits<1>(movementInfo.
driveStatus->accelerating);
151 data << WorldPackets::Bits<1>(movementInfo.
driveStatus->drifting);
160 data >> movementInfo.
guid;
161 data >> movementInfo.
flags;
162 data >> movementInfo.
flags2;
163 data >> movementInfo.
flags3;
164 data >> movementInfo.
time;
166 data >> movementInfo.
pitch;
169 uint32 removeMovementForcesCount;
170 data >> removeMovementForcesCount;
177 for (
uint32 i = 0; i < removeMovementForcesCount; ++i)
184 bool hasTransport = data.
ReadBit();
201 data >> movementInfo.
inertia->id;
202 data >> movementInfo.
inertia->force.PositionXYZStream();
203 data >> movementInfo.
inertia->lifetime;
208 data >> movementInfo.
advFlying->forwardVelocity;
209 data >> movementInfo.
advFlying->upVelocity;
219 bool hasFallDirection = data.
ReadBit();
220 if (hasFallDirection)
256 data <<
int16(monsterSplineFilterKey.
Idx);
264 data << Size<uint32>(monsterSplineFilter.
FilterKeys);
265 data << float(monsterSplineFilter.
BaseSpeed);
321 data <<
int32(nodeInfo.SpellID);
322 data << nodeInfo.Visual;
323 data <<
uint32(nodeInfo.StartNodeIndex);
340 switch (movementSpline.
Face)
342 case ::Movement::MONSTER_MOVE_FACING_SPOT:
345 case ::Movement::MONSTER_MOVE_FACING_TARGET:
349 case ::Movement::MONSTER_MOVE_FACING_ANGLE:
354 data << BitsSize<16>(movementSpline.
Points);
395 data << movementMonsterSpline.
ID;
396 data << Bits<1>(movementMonsterSpline.
CrzTeleport);
400 data << movementMonsterSpline.
Move;
416 dest = G3D::Vector3::zero();
421 data << dest.x << dest.y << dest.z;
424 data << Bits<1>(hasSplineMove);
436 data << Bits<1>(hasFadeObjectTime);
437 data << BitsSize<16>(moveSpline.
getPath());
438 data << Bits<1>(
false);
441 data << Bits<1>(hasJumpExtraData);
444 data << Bits<1>(
false);
462 case ::Movement::MONSTER_MOVE_FACING_SPOT:
465 data << float(moveSpline.
facing.
f.
x);
466 data << float(moveSpline.
facing.
f.
y);
467 data << float(moveSpline.
facing.
f.
z);
470 case ::Movement::MONSTER_MOVE_FACING_TARGET:
473 case ::Movement::MONSTER_MOVE_FACING_ANGLE:
480 if (hasFadeObjectTime)
483 data.
append(
reinterpret_cast<float const*
>(moveSpline.
getPath().data()), moveSpline.
getPath().size() * 3);
494 if (hasJumpExtraData)
503 data << float(moveSpline.
turn->StartFacing);
504 data << float(moveSpline.
turn->TotalTurnRads);
505 data << float(moveSpline.
turn->RadsPerSec);
530 data << movementForce.
ID;
531 data << movementForce.
Origin;
541 if (lengthSquared > 0.0f)
543 float mult = 1.0f / std::sqrt(lengthSquared) * movementForce.
Magnitude;
550 if (lengthSquared > minLengthSquared)
566 data << Bits<2>(movementForce.
Type);
607 if (splineFlags.FadeObject)
621 std::vector<G3D::Vector3>
const& array = spline.
getPoints();
623 if (splineFlags.UncompressedPath)
626 for (
uint32 i = 0; i < count; ++i)
627 movementSpline.
Points.emplace_back(array[i + 2].x, array[i + 2].y, array[i + 2].z);
632 G3D::Vector3
const* realPath = &array[1];
634 movementSpline.
Points.emplace_back(realPath[lastIdx].x, realPath[lastIdx].y, realPath[lastIdx].z);
638 G3D::Vector3 middle = (realPath[0] + realPath[lastIdx]) / 2.f;
641 for (
uint32 i = 1; i < lastIdx; ++i)
643 G3D::Vector3 delta = middle - realPath[i];
644 movementSpline.
PackedDeltas.emplace_back(delta.x, delta.y, delta.z);
770 data << teleportLocation.
Pos;
804 _worldPacket << Bits<1>(
Vehicle->VehicleExitVoluntary);
805 _worldPacket << Bits<1>(
Vehicle->VehicleExitTeleport);
817 data >> movementForce.
ID;
818 data >> movementForce.
Origin;
825 data >> movementForce.
Flags;
826 data >> Bits<2>(movementForce.
Type);
1066 _worldPacket << Bits<1>(
On);
1093 _worldPacket << Bits<2>(
Reason);
1107 _worldPacket << Bits<2>(
Reason);
1115 data << float(collisionHeightInfo.
Height);
1116 data << float(collisionHeightInfo.
Scale);
1124 data << float(stateChangeRangeInfo.
Min);
1125 data << float(stateChangeRangeInfo.
Max);
1158 if (stateChange.
Speed)
1159 data << float(*stateChange.
Speed);
1161 if (stateChange.
Range)
1162 data << *stateChange.
Range;
ByteBuffer & operator<<(ByteBuffer &data, MovementInfo::TransportInfo const &transportInfo)
ByteBuffer & operator>>(ByteBuffer &data, MovementInfo::TransportInfo &transportInfo)
@ MOVEMENTFLAG_FALLING_FAR
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
constexpr std::underlying_type_t< T > AsUnderlyingType() const
Optional< TurnData > turn
MySpline::ControlArray const & getPath() const
Optional< AnimTierTransition > anim_tier
MySpline const & _Spline() const
float vertical_acceleration
Vector3 const & FinalDestination() const
MoveSplineFlag splineflags
Optional< SpellEffectExtraData > spell_effect_extra
ControlArray const & getPoints() const
Vector3 const & getPoint(index_type i) const
index_type getPointCount() const
static void WriteCreateObjectSplineDataBlock(::Movement::MoveSpline const &moveSpline, ByteBuffer &data)
static void WriteMovementForceWithDirection(MovementForce const &movementForce, ByteBuffer &data, Position const *objectPosition=nullptr)
WorldPacket const * Write() override
WorldPacket const * Write() override
MovementMonsterSpline SplineData
WorldPacket const * Write() override
TaggedPosition< Position::XYZ > Pos
void InitializeSplineData(::Movement::MoveSpline const &moveSpline)
MovementForce const * Force
WorldPacket const * Write() override
Optional< MoveKnockBackSpeeds > Speeds
TaggedPosition< Position::XY > Direction
WorldPacket const * Write() override
MoveKnockBackSpeeds Speeds
WorldPacket const * Write() override
WorldPacket const * Write() override
UpdateCollisionHeightReason Reason
WorldPacket const * Write() override
UpdateCollisionHeightReason Reason
std::vector< MoveStateChange > StateChanges
WorldPacket const * Write() override
uint32 SequenceIndex
Unit movement packet index, incremented each time.
WorldPacket const * Write() override
uint32 SequenceIndex
Unit movement packet index, incremented each time.
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
TaggedPosition< Position::XYZ > Pos
Optional< ObjectGuid > TransportGUID
MovementForce const * Force
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
Optional< float > RunSpeed
Optional< float > WalkSpeed
Optional< float > FlightBackSpeed
::MovementForces::Container const * MovementForces
WorldPacket const * Write() override
Optional< float > SwimBackSpeed
Optional< float > TurnRate
Optional< float > SwimSpeed
Optional< float > FlightSpeed
Optional< float > RunBackSpeed
Optional< float > PitchRate
WorldPacket const * Write() override
TaggedPosition< Position::XYZ > MovementOffset
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
uint32 SummonerVirtualRealmAddress
WorldPacket const * Write() override
WorldPacket const * Write() override
int32 MapDifficultyXConditionID
Optional< int32 > TaxiPathID
TaggedPosition< Position::XYZ > OldMapPosition
Optional< int32 > TransferSpellID
Optional< ShipTransferPending > Ship
WorldPacket const * Write() override
ByteBuffer & operator<<(ByteBuffer &data, MonsterSplineFilterKey const &monsterSplineFilterKey)
ByteBuffer & operator>>(ByteBuffer &data, MovementForce &movementForce)
OptionalInitWriter< T > OptionalInit(Optional< T > const &value)
TaggedPosition< Position::XYZ > Origin
TaggedPosition< Position::XYZ > Direction
Optional< Inertia > inertia
Optional< Drive > driveStatus
Optional< ObjectGuid > standingOnGameObjectGUID
struct MovementInfo::JumpInfo jump
float stepUpStartElevation
struct MovementInfo::TransportInfo transport
bool HasMovementFlag(uint32 flag) const
Optional< AdvFlying > advFlying
struct Movement::FacingInfo::@309 f
Streamer< XYZO > PositionXYZOStream()
constexpr float GetPositionX() const
constexpr float GetPositionY() const
constexpr float GetExactDistSq(float x, float y, float z) const
constexpr float GetOrientation() const
constexpr float GetPositionZ() const
UpdateCollisionHeightReason Reason
TaggedPosition< Position::XY > Direction
uint32 ExtraDuration
Duration of the transition (unit does not move during this time)
std::array< MonsterSplineSpellVisualNodeInfo, 16 > NodeInfo
float DistToPrevFilterKey
std::vector< MonsterSplineFilterKey > FilterKeys
Optional< int32 > DriveCapabilityRecID
Optional< StateChangeRangeInfo > Range
Optional< int32 > VehicleRecID
Optional< ObjectGuid > MovementForceGUID
Optional< int32 > MovementInertiaID
Optional< KnockBackInfo > KnockBack
Optional< uint32 > MovementInertiaLifetimeMs
Optional< CollisionHeightInfo > CollisionHeight
Optional< MovementForce > MovementForce_
bool StopUseFaceDirection
std::vector< TaggedPosition< Position::XYZ > > Points
Optional< MonsterSplineTurnData > TurnData
Optional< MonsterSplineClientSpellVisualData > SpellVisualData
Optional< MonsterSplineSpellEffectExtraData > SpellEffectExtraData
Optional< MonsterSplineJumpExtraData > JumpExtraData
bool VehicleExitVoluntary
std::vector< TaggedPosition< Position::PackedXYZ > > PackedDeltas
Optional< MonsterSplineAnimTierTransition > AnimTierTransition
Optional< MonsterSplineFilter > SplineFilter
TaggedPosition< Position::XYZ > FaceSpot
TaggedPosition< Position::XYZO > Pos
EnumFlag< MoveSplineFlagEnum > Raw