X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fclient%2FMasterState.hpp;h=50773a63d03e7d700b7e7e5b7c63d6da8f8b33c3;hb=38a4cffc0b6aa58e49d24c06aad7bee14cb6515d;hp=af2e6aac8710a7b92e4af91566766e8387a43a0c;hpb=1afc887a2040dfdedfa66913e94ff7a9634f648f;p=blank.git diff --git a/src/client/MasterState.hpp b/src/client/MasterState.hpp index af2e6aa..50773a6 100644 --- a/src/client/MasterState.hpp +++ b/src/client/MasterState.hpp @@ -1,12 +1,13 @@ #ifndef BLANK_CLIENT_CLIENTSTATE_HPP_ #define BLANK_CLIENT_CLIENTSTATE_HPP_ +#include "Client.hpp" #include "InitialState.hpp" #include "InteractiveState.hpp" #include "../app/State.hpp" -#include "../net/Client.hpp" -#include "../net/PacketHandler.hpp" +#include "../net/ConnectionHandler.hpp" +#include #include @@ -20,7 +21,7 @@ class InteractiveState; class MasterState : public State -, public PacketHandler { +, public ConnectionHandler { public: MasterState( @@ -46,8 +47,24 @@ public: void Update(int dt) override; void Render(Viewport &) override; + void OnPacketLost(std::uint16_t) override; + void OnTimeout() override; + void On(const Packet::Join &) override; void On(const Packet::Part &) override; + void On(const Packet::SpawnEntity &) override; + void On(const Packet::DespawnEntity &) override; + void On(const Packet::EntityUpdate &) override; + void On(const Packet::PlayerCorrection &) override; + void On(const Packet::ChunkBegin &) override; + void On(const Packet::ChunkData &) override; + +private: + /// flag entity as updated by given packet + /// returns false if the update should be ignored + bool UpdateEntity(std::uint32_t id, std::uint16_t seq); + /// drop update information or given entity + void ClearEntity(std::uint32_t id); private: Environment &env; @@ -59,6 +76,15 @@ private: InitialState init_state; + int login_packet; + + struct UpdateStatus { + std::uint16_t last_packet; + int last_update; + }; + std::map update_status; + IntervalTimer update_timer; + }; }