X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fclient%2FMasterState.hpp;h=1d69998b58f3432f656a78906142704384977921;hb=9da6ac5e93d79e79658a95d5f6efe42146873583;hp=8eeadf051811596a8f3db3b47306b6b537925f62;hpb=51a0b19601cb4b044c7eee1782aa85fc3a399d33;p=blank.git diff --git a/src/client/MasterState.hpp b/src/client/MasterState.hpp index 8eeadf0..1d69998 100644 --- a/src/client/MasterState.hpp +++ b/src/client/MasterState.hpp @@ -1,12 +1,15 @@ #ifndef BLANK_CLIENT_CLIENTSTATE_HPP_ #define BLANK_CLIENT_CLIENTSTATE_HPP_ -#include "InitialState.hpp" -#include "InteractiveState.hpp" #include "../app/State.hpp" -#include "../net/Client.hpp" #include "../net/ConnectionHandler.hpp" +#include "Client.hpp" +#include "InitialState.hpp" +#include "InteractiveState.hpp" +#include "../app/Config.hpp" + +#include #include @@ -25,18 +28,18 @@ class MasterState public: MasterState( Environment &, - const World::Config &, - const Interface::Config &, - const Client::Config & + Config &, + const World::Config & ); Client &GetClient() noexcept { return client; } Environment &GetEnv() noexcept { return env; } + Config &GetConfig() noexcept { return config; } + const Config &GetConfig() const noexcept { return config; } + World::Config &GetWorldConf() noexcept { return world_conf; } const World::Config &GetWorldConf() const noexcept { return world_conf; } - const Interface::Config &GetInterfaceConf() const noexcept { return intf_conf; } - const Client::Config &GetClientConf() const noexcept { return client_conf; } void Quit(); @@ -54,12 +57,22 @@ public: 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; + void On(const Packet::BlockUpdate &) 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; + Config &config; World::Config world_conf; - const Interface::Config &intf_conf; - const Client::Config &client_conf; std::unique_ptr state; Client client; @@ -67,6 +80,13 @@ private: int login_packet; + struct UpdateStatus { + std::uint16_t last_packet; + int last_update; + }; + std::map update_status; + IntervalTimer update_timer; + }; }