mirror of
https://github.com/Jous99/F4MP.git
synced 2026-01-13 00:20:54 +01:00
88 lines
4.1 KiB
C
88 lines
4.1 KiB
C
|
|
#pragma once
|
||
|
|
|
||
|
|
#include <Events/PacketEvent.h>
|
||
|
|
#include <Structs/ActorData.h>
|
||
|
|
|
||
|
|
struct UpdateEvent;
|
||
|
|
struct CharacterInteriorCellChangeEvent;
|
||
|
|
struct CharacterSpawnedEvent;
|
||
|
|
struct World;
|
||
|
|
struct AssignCharacterRequest;
|
||
|
|
struct CharacterSpawnRequest;
|
||
|
|
struct ClientReferencesMoveRequest;
|
||
|
|
struct RequestFactionsChanges;
|
||
|
|
struct GridCellCoords;
|
||
|
|
struct RequestOwnershipTransfer;
|
||
|
|
struct CharacterRemoveEvent;
|
||
|
|
struct CharacterExteriorCellChangeEvent;
|
||
|
|
struct RequestOwnershipClaim;
|
||
|
|
struct OwnershipTransferEvent;
|
||
|
|
struct MountRequest;
|
||
|
|
struct NewPackageRequest;
|
||
|
|
struct RequestRespawn;
|
||
|
|
struct SyncExperienceRequest;
|
||
|
|
struct DialogueRequest;
|
||
|
|
struct SubtitleRequest;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Manages player and actor state.
|
||
|
|
*/
|
||
|
|
struct CharacterService
|
||
|
|
{
|
||
|
|
CharacterService(World& aWorld, entt::dispatcher& aDispatcher) noexcept;
|
||
|
|
~CharacterService() noexcept = default;
|
||
|
|
|
||
|
|
TP_NOCOPYMOVE(CharacterService);
|
||
|
|
|
||
|
|
static void Serialize(World& aRegistry, entt::entity aEntity, CharacterSpawnRequest* apSpawnRequest) noexcept;
|
||
|
|
|
||
|
|
protected:
|
||
|
|
void OnUpdate(const UpdateEvent& acEvent) const noexcept;
|
||
|
|
void OnCharacterExteriorCellChange(const CharacterExteriorCellChangeEvent& acEvent) const noexcept;
|
||
|
|
void OnCharacterInteriorCellChange(const CharacterInteriorCellChangeEvent& acEvent) const noexcept;
|
||
|
|
void OnAssignCharacterRequest(const PacketEvent<AssignCharacterRequest>& acMessage) const noexcept;
|
||
|
|
void OnOwnershipTransferRequest(const PacketEvent<RequestOwnershipTransfer>& acMessage) const noexcept;
|
||
|
|
void OnOwnershipTransferEvent(const OwnershipTransferEvent& acEvent) const noexcept;
|
||
|
|
void OnOwnershipClaimRequest(const PacketEvent<RequestOwnershipClaim>& acMessage) const noexcept;
|
||
|
|
void OnCharacterRemoveEvent(const CharacterRemoveEvent& acEvent) const noexcept;
|
||
|
|
void OnCharacterSpawned(const CharacterSpawnedEvent& acEvent) const noexcept;
|
||
|
|
void OnReferencesMoveRequest(const PacketEvent<ClientReferencesMoveRequest>& acMessage) const noexcept;
|
||
|
|
void OnFactionsChanges(const PacketEvent<RequestFactionsChanges>& acMessage) const noexcept;
|
||
|
|
void OnMountRequest(const PacketEvent<MountRequest>& acMessage) const noexcept;
|
||
|
|
void OnNewPackageRequest(const PacketEvent<NewPackageRequest>& acMessage) const noexcept;
|
||
|
|
void OnRequestRespawn(const PacketEvent<RequestRespawn>& acMessage) const noexcept;
|
||
|
|
void OnSyncExperienceRequest(const PacketEvent<SyncExperienceRequest>& acMessage) const noexcept;
|
||
|
|
void OnDialogueRequest(const PacketEvent<DialogueRequest>& acMessage) const noexcept;
|
||
|
|
void OnSubtitleRequest(const PacketEvent<SubtitleRequest>& acMessage) const noexcept;
|
||
|
|
|
||
|
|
void CreateCharacter(const PacketEvent<AssignCharacterRequest>& acMessage) const noexcept;
|
||
|
|
void TransferOwnership(Player* apPlayer, const uint32_t acServerId, const ActorData& acActorData) const noexcept;
|
||
|
|
ActorData BuildActorData(const entt::entity acEntity) const noexcept;
|
||
|
|
void ApplyActorData(const entt::entity acEntity, const ActorData& acActorData) const noexcept;
|
||
|
|
void BroadcastActorData(Player* apPlayer, const entt::entity acEntity, const ActorData& acActorData) const noexcept;
|
||
|
|
|
||
|
|
void ProcessFactionsChanges() const noexcept;
|
||
|
|
void ProcessMovementChanges() const noexcept;
|
||
|
|
|
||
|
|
private:
|
||
|
|
World& m_world;
|
||
|
|
|
||
|
|
entt::scoped_connection m_updateConnection;
|
||
|
|
entt::scoped_connection m_exteriorCellChangeEventConnection;
|
||
|
|
entt::scoped_connection m_interiorCellChangeEventConnection;
|
||
|
|
entt::scoped_connection m_characterAssignRequestConnection;
|
||
|
|
entt::scoped_connection m_transferOwnershipConnection;
|
||
|
|
entt::scoped_connection m_ownershipTransferEventConnection;
|
||
|
|
entt::scoped_connection m_claimOwnershipConnection;
|
||
|
|
entt::scoped_connection m_removeCharacterConnection;
|
||
|
|
entt::scoped_connection m_characterSpawnedConnection;
|
||
|
|
entt::scoped_connection m_referenceMovementSnapshotConnection;
|
||
|
|
entt::scoped_connection m_factionsChangesConnection;
|
||
|
|
entt::scoped_connection m_mountConnection;
|
||
|
|
entt::scoped_connection m_newPackageConnection;
|
||
|
|
entt::scoped_connection m_requestRespawnConnection;
|
||
|
|
entt::scoped_connection m_syncExperienceConnection;
|
||
|
|
entt::scoped_connection m_dialogueConnection;
|
||
|
|
entt::scoped_connection m_subtitleConnection;
|
||
|
|
};
|