66 TC_LOG_FATAL(
"misc",
"BaseEntity::~BaseEntity {} deleted but still in update list!!",
GetGUID());
106 flags.ActivePlayer =
true;
114 flags.SmoothPhasing =
true;
118 buf <<
uint8(updateType);
120 buf <<
uint8(objectType);
125 std::size_t sizePos = buf.
wpos();
127 buf <<
uint8(fieldFlags);
164 std::size_t sizePos = buf.
wpos();
191 data.
append(fragments.data(), fragments.size());
237 std::span<uint32 const> PauseTimes;
239 PauseTimes =
static_cast<GameObject const*
>(
this)->GetPauseTimes();
264 if (
flags.MovementUpdate)
266 Unit const* unit =
static_cast<Unit const*
>(
this);
298 data.
WriteBit(HasStandingOnGameObjectGUID);
312 if (HasStandingOnGameObjectGUID)
333 if (data.
WriteBit(HasFallDirection))
362 data <<
uint32(movementForces->GetForces()->size());
363 data << float(movementForces->GetModMagnitude());
393 for (
MovementForce const& force : *movementForces->GetForces())
400 data <<
uint32(PauseTimes.size());
402 if (
flags.Stationary)
408 if (
flags.CombatVictim)
410 Unit const* unit =
static_cast<Unit const*
>(
this);
414 if (
flags.ServerTime)
419 Unit const* unit =
static_cast<Unit const*
>(
this);
453 if (!PauseTimes.empty())
454 data.
append(PauseTimes.data(), PauseTimes.size());
456 if (
flags.MovementTransport)
462 if (
flags.GameObject)
495 if (
flags.SmoothPhasing)
498 ASSERT(smoothPhasingInfo);
508 if (
flags.SceneObject)
618 if (
flags.ActivePlayer)
620 Player const* player =
static_cast<Player const*
>(
this);
628 if (HasSceneInstanceIDs)
632 data <<
uint32(sceneInstanceId);
639 data <<
uint8((1 << maxRunes) - 1);
642 for (
uint32 i = 0; i < maxRunes; ++i)
647 if (
flags.Conversation)
696 UpdateDataMapType::iterator iter = data_map.emplace(player, player->
GetMapId()).first;
std::unordered_map< Player *, UpdateData > UpdateDataMapType
#define TC_LOG_FATAL(filterType__, message__,...)
@ GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT
@ ADV_FLYING_DOUBLE_JUMP_VEL_MOD
@ ADV_FLYING_OVER_MAX_DECELERATION
@ ADV_FLYING_LIFT_COEFFICIENT
@ ADV_FLYING_ADD_IMPULSE_MAX_SPEED
@ ADV_FLYING_GLIDE_START_MIN_HEIGHT
@ ADV_FLYING_AIR_FRICTION
@ ADV_FLYING_LAUNCH_SPEED_COEFFICIENT
@ ADV_FLYING_SURFACE_FRICTION
@ ADV_FLYING_PITCHING_RATE_DOWN
@ ADV_FLYING_TURN_VELOCITY_THRESHOLD
@ ADV_FLYING_PITCHING_RATE_UP
@ ADV_FLYING_BANKING_RATE
@ UPDATETYPE_CREATE_OBJECT
@ UPDATETYPE_CREATE_OBJECT2
ObjectGuid const & GetGUID() const
void BuildUpdateChangesMask()
virtual std::string GetDebugInfo() const
WowCS::EntityFragmentsHolder m_entityFragments
bool IsWorldObject() const
virtual bool AddToObjectUpdate()=0
virtual void RemoveFromWorld()
CreateObjectBits m_updateFlag
virtual void DestroyForPlayer(Player const *target) const
void AddToObjectUpdateIfNeeded()
virtual void AddToWorld()
static void BuildEntityFragments(ByteBuffer &data, std::span< WowCS::EntityFragment const > fragments)
void BuildDestroyUpdateBlock(UpdateData *data) const
virtual void RemoveFromObjectUpdate()=0
void BuildMovementUpdate(ByteBuffer &data, CreateObjectBits flags, Player const *target) const
void ClearUpdateMask(bool remove)
virtual void BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target) const
bool IsGameObject() const
ByteBuffer & PrepareValuesUpdateBuffer(UpdateData *data) const
void SendOutOfRangeForPlayer(Player const *target) const
void BuildValuesUpdateBlockForPlayer(UpdateData *data, Player const *target) const
void BuildOutOfRangeUpdateBlock(UpdateData *data) const
virtual UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const *target) const
void BuildFieldsUpdate(Player *player, UpdateDataMapType &data_map) const
void SendUpdateToPlayer(Player *player) const
void put(std::size_t pos, T value)
uint32 GetTextureKitId() const
constexpr bool HasFlag(T flag) const
GameObjectTemplate const * GetGOInfo() const
int64 GetPackedLocalRotation() const
Optional< float > GetPathProgressForClient() const
uint32 GetWorldEffectID() const
void SendDirectMessage(WorldPacket const *data) const
uint32 GetPowerIndex(Powers power) const override
uint32 GetRuneBaseCooldown() const
bool HaveAtClient(BaseEntity const *u) const
uint8 GetRunesState() const
uint32 GetRuneCooldown(uint8 index) const
SceneTemplateByInstance const & GetSceneTemplateByInstanceMap() const
SmoothPhasingInfo const * GetInfoForSeer(ObjectGuid seer) const
uint32 GetTransportPeriod() const
Optional< uint32 > GetNextStopTimestamp() const
uint32 GetUnitMovementFlags() const
float GetSpeed(UnitMoveType mtype) const
MovementForces const * GetMovementForces() const
bool IsSplineEnabled() const
float GetAdvFlyingSpeedMax(AdvFlyingRateTypeRange speedType) const
int32 GetMaxPower(Powers power) const
float GetAdvFlyingSpeedMin(AdvFlyingRateTypeRange speedType) const
bool HasUnitMovementFlag(uint32 f) const
uint32 GetExtraUnitMovementFlags() const
float GetAdvFlyingSpeed(AdvFlyingRateTypeSingle speedType) const
std::unique_ptr< Movement::MoveSpline > movespline
Vehicle * GetVehicleKit() const
uint32 GetExtraUnitMovementFlags2() const
void AddDestroyObject(ObjectGuid guid)
void AddOutOfRangeGUID(ObjectGuid guid)
bool BuildPacket(WorldPacket *packet)
VehicleEntry const * GetVehicleInfo() const
constexpr uint32 GetMapId() const
virtual uint16 GetMeleeAnimKitId() const
virtual uint16 GetMovementAnimKitId() const
virtual Position const & GetStationaryPosition() const
SmoothPhasing * GetSmoothPhasing()
virtual uint16 GetAIAnimKitId() const
MovementInfo m_movementInfo
static void WriteCreateObjectSplineDataBlock(::Movement::MoveSpline const &moveSpline, ByteBuffer &data)
static void WriteMovementForceWithDirection(MovementForce const &movementForce, ByteBuffer &data, Position const *objectPosition=nullptr)
std::string StringFormat(FormatString< Args... > fmt, Args &&... args) noexcept
Default TC string format function.
@ FJamHousingCornerstone_C
@ PlayerInitiativeComponent_C
@ FHousingRoomComponentMesh_C
@ FNeighborhoodMirrorData_C
@ FMirroredPositionData_C
@ PlayerHouseInfoComponent_C
EntityFragmentInfos const * EntityFragmentInfo
constexpr bool IsIndirectFragment(EntityFragment frag)
struct WowCS::FragmentInfoInitializer InitFragments
Optional< Inertia > inertia
Optional< Drive > driveStatus
Optional< ObjectGuid > standingOnGameObjectGUID
struct MovementInfo::JumpInfo jump
float stepUpStartElevation
struct MovementInfo::TransportInfo transport
Optional< AdvFlying > advFlying
Streamer< XYZO > PositionXYZOStream()
constexpr float GetPositionX() const
constexpr float GetPositionY() const
constexpr float GetOrientation() const
constexpr float GetPositionZ() const
Optional< ObjectGuid > ReplaceObject
std::array< EntityFragmentSerializeFn, N > SerializeUpdate
std::array< EntityFragmentSerializeFn, N > SerializeCreate
static void Register(EntityFragment fragment, EntityFragmentSerializeFn serializeCreate, EntityFragmentSerializeFn serializeUpdate, EntityFragmentIsChangedFn isChanged, EntityFragmentClearChangedFn clearChanged)
std::array< EntityFragment, N > Ids
std::array< uint8, N > Masks
std::array< void const *, N > Data
std::span< EntityFragment const > GetIds() const
uint8 ContentsChangedMask
UpdateableFragments Updateable
FragmentInfoInitializer()