F4MP/codigos originales/tiltedcode/Code/client/Services/InventoryService.h

75 lines
2.4 KiB
C
Raw Normal View History

#pragma once
struct World;
struct TransportService;
struct UpdateEvent;
struct NotifyObjectInventoryChanges;
struct NotifyInventoryChanges;
struct InventoryChangeEvent;
struct EquipmentChangeEvent;
struct NotifyEquipmentChanges;
/**
* @brief Manages inventories of actors and containers.
*
* The initial contents of actor inventories are synced through spawn messages through CharacterService
* @see CharacterService
* The initial contents of container inventories are synced through the ObjectService
* @see ObjectService
* The InventoryService manages any changes to both the current equipment of actors,
* and the contents of both actor and object inventories.
*/
struct InventoryService
{
InventoryService(World& aWorld, entt::dispatcher& aDispatcher, TransportService& aTransport) noexcept;
~InventoryService() noexcept = default;
TP_NOCOPYMOVE(InventoryService);
/**
* @brief Check weapon state.
* @see RunWeaponStateUpdates
*/
void OnUpdate(const UpdateEvent& acUpdateEvent) noexcept;
/**
* @brief Sends out inventory changes made by the local client.
*/
void OnInventoryChangeEvent(const InventoryChangeEvent& acEvent) noexcept;
/**
* @brief Sends out equipment changes made by the local client.
*/
void OnEquipmentChangeEvent(const EquipmentChangeEvent& acEvent) noexcept;
/**
* @brief Applies inventory changes sent by the server.
*/
void OnNotifyInventoryChanges(const NotifyInventoryChanges& acMessage) noexcept;
/**
* @brief Applies equipment changes sent by the server.
*/
void OnNotifyEquipmentChanges(const NotifyEquipmentChanges& acMessage) noexcept;
private:
/**
* Checks whether local actors their weapon draw states have changed,
* and if so, send the new states to the server.
*/
void RunWeaponStateUpdates() noexcept;
/**
* Checks whether an NPC's (local or remote) equipment is bugged (i.e. naked NPCS)
* and resets their inventory.
*/
void RunNakedNPCBugChecks() noexcept;
World& m_world;
entt::dispatcher& m_dispatcher;
TransportService& m_transport;
entt::scoped_connection m_updateConnection;
entt::scoped_connection m_inventoryConnection;
entt::scoped_connection m_equipmentConnection;
entt::scoped_connection m_inventoryChangeConnection;
entt::scoped_connection m_equipmentChangeConnection;
};