#pragma once #include #include namespace td { namespace client { class Client; class IClientState : private utils::SlotGuard { public: virtual void HandlePacket(const protocol::PacketBase& a_Packet) = 0; virtual void Update(float a_Delta) = 0; IClientState(); virtual ~IClientState(); protected: void SendPacket(const protocol::PacketBase& a_Packet); void SetNewState(const std::shared_ptr& a_NewState); virtual void Init() {} private: Client* m_Client; void SetClient(Client* a_Client); friend class Client; }; } // namespace server } // namespace td