X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclient%2Fclient.h;h=2dba1506ed1f45faec522b902f3367ce2ea42e25;hb=bc1888ff21d50eb21c8f4d381e5dcc8049f7e36c;hp=934175ff27b53d6460ea815094e6bb766d6c07f9;hpb=81c7f0ae044b1131ad082e5e705c5276f82ac6ce;p=minetest.git diff --git a/src/client/client.h b/src/client/client.h index 934175ff2..2dba1506e 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -82,34 +82,24 @@ class PacketCounter void add(u16 command) { - std::map::iterator n = m_packets.find(command); - if(n == m_packets.end()) - { + auto n = m_packets.find(command); + if (n == m_packets.end()) m_packets[command] = 1; - } else - { n->second++; - } } void clear() { - for (auto &m_packet : m_packets) { - m_packet.second = 0; - } + m_packets.clear(); } - void print(std::ostream &o) - { - for (const auto &m_packet : m_packets) { - o << "cmd "<< m_packet.first <<" count "<< m_packet.second << std::endl; - } - } + u32 sum() const; + void print(std::ostream &o) const; private: // command, count - std::map m_packets; + std::map m_packets; }; class ClientScripting; @@ -193,6 +183,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef void handleCommand_ActiveObjectRemoveAdd(NetworkPacket* pkt); void handleCommand_ActiveObjectMessages(NetworkPacket* pkt); void handleCommand_Movement(NetworkPacket* pkt); + void handleCommand_Fov(NetworkPacket *pkt); void handleCommand_HP(NetworkPacket* pkt); void handleCommand_Breath(NetworkPacket* pkt); void handleCommand_MovePlayer(NetworkPacket* pkt); @@ -217,6 +208,9 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef void handleCommand_HudSetFlags(NetworkPacket* pkt); void handleCommand_HudSetParam(NetworkPacket* pkt); void handleCommand_HudSetSky(NetworkPacket* pkt); + void handleCommand_HudSetSun(NetworkPacket* pkt); + void handleCommand_HudSetMoon(NetworkPacket* pkt); + void handleCommand_HudSetStars(NetworkPacket* pkt); void handleCommand_CloudParams(NetworkPacket* pkt); void handleCommand_OverrideDayNightRatio(NetworkPacket* pkt); void handleCommand_LocalPlayerAnimations(NetworkPacket* pkt); @@ -228,6 +222,8 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef void handleCommand_FormspecPrepend(NetworkPacket *pkt); void handleCommand_CSMRestrictionFlags(NetworkPacket *pkt); void handleCommand_PlayerSpeed(NetworkPacket *pkt); + void handleCommand_MediaPush(NetworkPacket *pkt); + void handleCommand_MinimapModes(NetworkPacket *pkt); void ProcessData(NetworkPacket *pkt); @@ -260,14 +256,11 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef // Causes urgent mesh updates (unlike Map::add/removeNodeWithEvent) void removeNode(v3s16 p); - /** - * Helper function for Client Side Modding - * CSM restrictions are applied there, this should not be used for core engine - * @param p - * @param is_valid_position - * @return - */ - MapNode getNode(v3s16 p, bool *is_valid_position); + // helpers to enforce CSM restrictions + MapNode CSMGetNode(v3s16 p, bool *is_valid_position); + int CSMClampRadius(v3s16 pos, int radius); + v3s16 CSMClampPos(v3s16 pos); + void addNode(v3s16 p, MapNode n, bool remove_metadata = true); void setPlayerControl(PlayerControl &control); @@ -333,11 +326,11 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef // disconnect client when CSM failed. const std::string &accessDeniedReason() const { return m_access_denied_reason; } - bool itemdefReceived() + const bool itemdefReceived() const { return m_itemdef_received; } - bool nodedefReceived() + const bool nodedefReceived() const { return m_nodedef_received; } - bool mediaReceived() + const bool mediaReceived() const { return !m_media_downloader; } const bool activeObjectsReceived() const { return m_activeobjects_received; } @@ -345,7 +338,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef u16 getProtoVersion() { return m_proto_ver; } - bool connectedToServer(); void confirmRegistration(); bool m_is_registration_confirmation_state = false; bool m_simple_singleplayer_mode; @@ -369,7 +361,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef const NodeDefManager* getNodeDefManager() override; ICraftDefManager* getCraftDefManager() override; ITextureSource* getTextureSource(); - virtual IShaderSource* getShaderSource(); + virtual IWritableShaderSource* getShaderSource(); u16 allocateUnknownNodeId(const std::string &name) override; virtual ISoundManager* getSoundManager(); MtEventManager* getEventManager(); @@ -377,7 +369,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef bool checkLocalPrivilege(const std::string &priv) { return checkPrivilege(priv); } virtual scene::IAnimatedMesh* getMesh(const std::string &filename, bool cache = false); - const std::string* getModFile(const std::string &filename); + const std::string* getModFile(std::string filename); std::string getModStoragePath() const override; bool registerModStorage(ModMetadata *meta) override; @@ -385,7 +377,8 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef // The following set of functions is used by ClientMediaDownloader // Insert a media file appropriately into the appropriate manager - bool loadMedia(const std::string &data, const std::string &filename); + bool loadMedia(const std::string &data, const std::string &filename, + bool from_media_push = false); // Send a request for conventional media transfer void request_media(const std::vector &file_requests); @@ -412,19 +405,14 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef return m_address_name; } - inline bool checkCSMRestrictionFlag(CSMRestrictionFlags flag) const - { - return m_csm_restriction_flags & flag; - } - - u32 getCSMNodeRangeLimit() const + inline u64 getCSMRestrictionFlags() const { - return m_csm_restriction_noderange; + return m_csm_restriction_flags; } - inline std::unordered_map &getHUDTranslationMap() + inline bool checkCSMRestrictionFlag(CSMRestrictionFlags flag) const { - return m_hud_server_to_client; + return m_csm_restriction_flags & flag; } bool joinModChannel(const std::string &channel) override; @@ -439,7 +427,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef } private: void loadMods(); - bool checkBuiltinIntegrity(); // Virtual methods from con::PeerHandler void peerAdded(con::Peer *peer) override; @@ -450,7 +437,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef bool is_local_server); void ReceiveAll(); - void Receive(); void sendPlayerPos(); @@ -493,6 +479,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef Camera *m_camera = nullptr; Minimap *m_minimap = nullptr; bool m_minimap_disabled_by_server = false; + // Server serialization version u8 m_server_ser_ver; @@ -534,7 +521,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef AuthMechanism m_chosen_auth_mech; void *m_auth_data = nullptr; - bool m_access_denied = false; bool m_access_denied_reconnect = false; std::string m_access_denied_reason = ""; @@ -543,7 +529,10 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef bool m_nodedef_received = false; bool m_activeobjects_received = false; bool m_mods_loaded = false; + ClientMediaDownloader *m_media_downloader; + // Set of media filenames pushed by server at runtime + std::unordered_set m_media_pushed_files; // time_of_day speed approximation for old protocol bool m_time_of_day_set = false; @@ -559,12 +548,9 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef std::unordered_map m_sounds_server_to_client; // And the other way! std::unordered_map m_sounds_client_to_server; - // And relations to objects + // Relation of client id to object id std::unordered_map m_sounds_to_objects; - // Map server hud ids to client hud ids - std::unordered_map m_hud_server_to_client; - // Privileges std::unordered_set m_privileges; @@ -575,8 +561,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef // Storage for mesh data for creating multiple instances of the same mesh StringMap m_mesh_data; - StringMap m_mod_files; - // own state LocalClientState m_state; @@ -587,11 +571,12 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef IntervalLimiter m_localdb_save_interval; u16 m_cache_save_interval; + // Client modding ClientScripting *m_script = nullptr; - bool m_modding_enabled; std::unordered_map m_mod_storages; float m_mod_storage_save_timer = 10.0f; std::vector m_mods; + StringMap m_mod_vfs; bool m_shutdown = false;