mirror of
https://github.com/Jous99/F4MP.git
synced 2026-01-12 23:20:53 +01:00
88 lines
2.9 KiB
C++
88 lines
2.9 KiB
C++
#pragma once
|
|
|
|
struct World;
|
|
struct TransportService;
|
|
|
|
struct UpdateEvent;
|
|
struct ConnectedEvent;
|
|
struct DisconnectedEvent;
|
|
struct ServerSettings;
|
|
struct GridCellChangeEvent;
|
|
struct CellChangeEvent;
|
|
struct PlayerDialogueEvent;
|
|
struct PlayerLevelEvent;
|
|
struct PartyJoinedEvent;
|
|
struct PartyLeftEvent;
|
|
|
|
struct NotifyPlayerRespawn;
|
|
|
|
/**
|
|
* @brief Handles logic related to the local player.
|
|
*/
|
|
struct PlayerService
|
|
{
|
|
PlayerService(World& aWorld, entt::dispatcher& aDispatcher, TransportService& aTransport) noexcept;
|
|
~PlayerService() noexcept = default;
|
|
|
|
TP_NOCOPYMOVE(PlayerService);
|
|
|
|
protected:
|
|
void OnUpdate(const UpdateEvent& acEvent) noexcept;
|
|
void OnConnected(const ConnectedEvent& acEvent) noexcept;
|
|
void OnDisconnected(const DisconnectedEvent& acEvent) noexcept;
|
|
void OnServerSettingsReceived(const ServerSettings& acSettings) noexcept;
|
|
void OnNotifyPlayerRespawn(const NotifyPlayerRespawn& acMessage) const noexcept;
|
|
void OnGridCellChangeEvent(const GridCellChangeEvent& acEvent) const noexcept;
|
|
void OnCellChangeEvent(const CellChangeEvent& acEvent) const noexcept;
|
|
void OnPlayerDialogueEvent(const PlayerDialogueEvent& acEvent) const noexcept;
|
|
void OnPlayerLevelEvent(const PlayerLevelEvent& acEvent) const noexcept;
|
|
void OnPartyJoinedEvent(const PartyJoinedEvent& acEvent) noexcept;
|
|
void OnPartyLeftEvent(const PartyLeftEvent& acEvent) noexcept;
|
|
|
|
private:
|
|
/**
|
|
* @brief Run the respawn timer, and if it hits 0, respawn the player.
|
|
*/
|
|
void RunRespawnUpdates(const double acDeltaTime) noexcept;
|
|
void RunPostDeathUpdates(const double acDeltaTime) noexcept;
|
|
/**
|
|
* @brief Make sure difficulty doesn't get changed while connected
|
|
*/
|
|
void RunDifficultyUpdates() const noexcept;
|
|
void RunLevelUpdates() const noexcept;
|
|
void RunBeastFormDetection() const noexcept;
|
|
|
|
void ToggleDeathSystem(bool aSet) noexcept;
|
|
|
|
World& m_world;
|
|
entt::dispatcher& m_dispatcher;
|
|
TransportService& m_transport;
|
|
|
|
double m_respawnTimer = 0.0;
|
|
int32_t m_serverDifficulty = 6;
|
|
int32_t m_previousDifficulty = 6;
|
|
|
|
bool m_isDeathSystemEnabled = true;
|
|
|
|
bool m_knockdownStart = false;
|
|
double m_knockdownTimer = 0.0;
|
|
|
|
bool m_godmodeStart = false;
|
|
double m_godmodeTimer = 0.0;
|
|
|
|
uint32_t m_cachedMainSpellId = 0;
|
|
uint32_t m_cachedSecondarySpellId = 0;
|
|
uint32_t m_cachedPowerId = 0;
|
|
|
|
entt::scoped_connection m_updateConnection;
|
|
entt::scoped_connection m_connectedConnection;
|
|
entt::scoped_connection m_disconnectedConnection;
|
|
entt::scoped_connection m_settingsConnection;
|
|
entt::scoped_connection m_notifyRespawnConnection;
|
|
entt::scoped_connection m_gridCellChangeConnection;
|
|
entt::scoped_connection m_cellChangeConnection;
|
|
entt::scoped_connection m_playerDialogueConnection;
|
|
entt::scoped_connection m_playerLevelConnection;
|
|
entt::scoped_connection m_partyJoinedConnection;
|
|
entt::scoped_connection m_partyLeftConnection;
|
|
};
|