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;
79 data << WorldPackets::As<uint64>(movementInfo.
flags);
82 data << float(movementInfo.
pitch);
85 uint32 removeMovementForcesCount = 0;
86 data << removeMovementForcesCount;
99 data << WorldPackets::Bits<1>(hasTransportData);
100 data << WorldPackets::Bits<1>(hasFallData);
101 data << WorldPackets::Bits<1>(
false);
102 data << WorldPackets::Bits<1>(
false);
103 data << WorldPackets::Bits<1>(
false);
113 if (hasTransportData)
121 data << WorldPackets::Bits<1>(hasFallDirection);
123 if (hasFallDirection)
134 data << movementInfo.
inertia->force.PositionXYZStream();
140 data << float(movementInfo.
advFlying->forwardVelocity);
141 data << float(movementInfo.
advFlying->upVelocity);
147 data << float(movementInfo.
driveStatus->movementAngle);
148 data << WorldPackets::Bits<1>(movementInfo.
driveStatus->accelerating);
149 data << WorldPackets::Bits<1>(movementInfo.
driveStatus->drifting);
158 data >> movementInfo.
guid;
159 data >> WorldPackets::As<uint64>(movementInfo.
flags);
160 data >> movementInfo.
time;
162 data >> movementInfo.
pitch;
165 uint32 removeMovementForcesCount;
166 data >> removeMovementForcesCount;
173 for (
uint32 i = 0; i < removeMovementForcesCount; ++i)
174 data >> WorldPackets::Ignored<ObjectGuid>;
177 bool hasTransport = data.
ReadBit();
199 bool hasFallDirection = data.
ReadBit();
200 if (hasFallDirection)
210 data >> movementInfo.
inertia->id;
211 data >> movementInfo.
inertia->force.PositionXYZStream();
212 data >> movementInfo.
inertia->lifetime;
217 data >> movementInfo.
advFlying->forwardVelocity;
218 data >> movementInfo.
advFlying->upVelocity;
249 data <<
int16(monsterSplineFilterKey.
Idx);
257 data << Size<uint32>(monsterSplineFilter.
FilterKeys);
258 data << float(monsterSplineFilter.
BaseSpeed);
314 data <<
int32(nodeInfo.SpellID);
315 data << nodeInfo.Visual;
316 data <<
uint32(nodeInfo.StartNodeIndex);
333 switch (movementSpline.
Face)
335 case ::Movement::MONSTER_MOVE_FACING_SPOT:
338 case ::Movement::MONSTER_MOVE_FACING_TARGET:
342 case ::Movement::MONSTER_MOVE_FACING_ANGLE:
347 data << BitsSize<16>(movementSpline.
Points);
388 data << movementMonsterSpline.
ID;
389 data << movementMonsterSpline.
Move;
390 data << Bits<1>(movementMonsterSpline.
CrzTeleport);
409 dest = G3D::Vector3::zero();
414 data << dest.x << dest.y << dest.z;
417 data << Bits<1>(hasSplineMove);
431 case ::Movement::MONSTER_MOVE_FACING_SPOT:
434 data << float(moveSpline.
facing.
f.
x);
435 data << float(moveSpline.
facing.
f.
y);
436 data << float(moveSpline.
facing.
f.
z);
439 case ::Movement::MONSTER_MOVE_FACING_TARGET:
442 case ::Movement::MONSTER_MOVE_FACING_ANGLE:
450 data << Bits<1>(hasFadeObjectTime);
451 data << BitsSize<16>(moveSpline.
getPath());
452 data << Bits<1>(
false);
455 data << Bits<1>(hasJumpExtraData);
458 data << Bits<1>(
false);
461 if (hasFadeObjectTime)
464 data.
append(
reinterpret_cast<float const*
>(moveSpline.
getPath().data()), moveSpline.
getPath().size() * 3);
488 if (hasJumpExtraData)
497 data << float(moveSpline.
turn->StartFacing);
498 data << float(moveSpline.
turn->TotalTurnRads);
499 data << float(moveSpline.
turn->RadsPerSec);
524 data << movementForce.
ID;
525 data << movementForce.
Origin;
535 if (lengthSquared > 0.0f)
537 float mult = 1.0f / std::sqrt(lengthSquared) * movementForce.
Magnitude;
544 if (lengthSquared > minLengthSquared)
560 data << Bits<2>(movementForce.
Type);
601 if (splineFlags.FadeObject)
615 std::vector<G3D::Vector3>
const& array = spline.
getPoints();
617 if (splineFlags.UncompressedPath)
620 for (
uint32 i = 0; i < count; ++i)
621 movementSpline.
Points.emplace_back(array[i + 2].x, array[i + 2].y, array[i + 2].z);
626 G3D::Vector3
const* realPath = &array[1];
628 movementSpline.
Points.emplace_back(realPath[lastIdx].x, realPath[lastIdx].y, realPath[lastIdx].z);
632 G3D::Vector3 middle = (realPath[0] + realPath[lastIdx]) / 2.f;
635 for (
uint32 i = 1; i < lastIdx; ++i)
637 G3D::Vector3 delta = middle - realPath[i];
638 movementSpline.
PackedDeltas.emplace_back(delta.x, delta.y, delta.z);
764 data << teleportLocation.
Pos;
801 _worldPacket << Bits<1>(
Vehicle->VehicleExitVoluntary);
802 _worldPacket << Bits<1>(
Vehicle->VehicleExitTeleport);
811 data >> movementForce.
ID;
812 data >> movementForce.
Origin;
819 data >> movementForce.
Flags;
820 data >> Bits<2>(movementForce.
Type);
1060 _worldPacket << Bits<1>(
On);
1087 _worldPacket << Bits<2>(
Reason);
1101 _worldPacket << Bits<2>(
Reason);
1109 data << float(collisionHeightInfo.
Height);
1110 data << float(collisionHeightInfo.
Scale);
1118 data << float(stateChangeRangeInfo.
Min);
1119 data << float(stateChangeRangeInfo.
Max);
1149 if (stateChange.
Speed)
1150 data << float(*stateChange.
Speed);
1152 if (stateChange.
Range)
1153 data << *stateChange.
Range;
@ MOVEMENTFLAG_FALLING_FAR
ByteBuffer & operator<<(ByteBuffer &data, MovementInfo::TransportInfo const &transportInfo)
ByteBuffer & operator>>(ByteBuffer &data, MovementInfo::TransportInfo &transportInfo)
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)
Duration< Milliseconds, uint32 > LifetimeMs
Duration< Milliseconds, uint32 > LifetimeMs
WorldPacket const * Write() override
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
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
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
WorldPacket const * Write() override
Duration< Milliseconds, uint32 > LifetimeMs
MovementForce const * Force
WorldPacket const * Write() override
WorldPacket const * Write() override
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
WorldPacket const * Write() override
Optional< float > SwimBackSpeed
Optional< float > TurnRate
Optional< float > SwimSpeed
Optional< float > FlightSpeed
Optional< float > RunBackSpeed
Optional< float > PitchRate
std::span< MovementForce const > MovementForces
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
bool HasMovementFlag(MovementFlags flag) const
Optional< Inertia > inertia
Optional< Drive > driveStatus
Optional< ObjectGuid > standingOnGameObjectGUID
struct MovementInfo::JumpInfo jump
float stepUpStartElevation
struct MovementInfo::TransportInfo transport
Optional< AdvFlying > advFlying
struct Movement::FacingInfo::@311 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