]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/client/client.h
Initial Commit
[dragonfireclient.git] / src / client / client.h
index 57623f164731053ca7e898d55ee7497b97826d1d..3c0c133e07dcfa603b6951a852ca2f2b45466391 100644 (file)
@@ -47,7 +47,6 @@ struct ChatMessage;
 class MapBlockMesh;
 class IWritableTextureSource;
 class IWritableShaderSource;
-class IWritableItemDefManager;
 class ISoundManager;
 class NodeDefManager;
 //class IWritableCraftDefManager;
@@ -193,6 +192,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 +217,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);
@@ -227,12 +230,14 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        void handleCommand_SrpBytesSandB(NetworkPacket *pkt);
        void handleCommand_FormspecPrepend(NetworkPacket *pkt);
        void handleCommand_CSMRestrictionFlags(NetworkPacket *pkt);
+       void handleCommand_PlayerSpeed(NetworkPacket *pkt);
+       void handleCommand_Redirect(NetworkPacket *pkt);
 
        void ProcessData(NetworkPacket *pkt);
 
        void Send(NetworkPacket* pkt);
 
-       void interact(u8 action, const PointedThing& pointed);
+       void interact(InteractAction action, const PointedThing &pointed);
 
        void sendNodemetaFields(v3s16 p, const std::string &formname,
                const StringMap &fields);
@@ -259,32 +264,26 @@ 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);
 
-       void selectPlayerItem(u16 item);
-       u16 getPlayerItem() const
-       { return m_playeritem; }
-
        // Returns true if the inventory of the local player has been
        // updated from the server. If it is true, it is set to false.
-       bool getLocalInventoryUpdated();
-       // Copies the inventory of the local player to parameter
-       void getLocalInventory(Inventory &dst);
+       bool updateWieldedItem();
 
        /* InventoryManager interface */
        Inventory* getInventory(const InventoryLocation &loc) override;
        void inventoryAction(InventoryAction *a) override;
 
+       // Send the item number 'item' as player item to the server
+       void setPlayerItem(u16 item);
+
        const std::list<std::string> &getConnectedPlayerNames()
        {
                return m_env.getPlayerNames();
@@ -335,12 +334,14 @@ 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; }
 
        u16 getProtoVersion()
        { return m_proto_ver; }
@@ -366,18 +367,19 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
 
        // IGameDef interface
        IItemDefManager* getItemDefManager() override;
+       IWritableItemDefManager* getWritableItemDefManager() override;
        const NodeDefManager* getNodeDefManager() override;
+       NodeDefManager* getWritableNodeDefManager() override;
        ICraftDefManager* getCraftDefManager() override;
        ITextureSource* getTextureSource();
-       virtual IShaderSource* getShaderSource();
+       virtual IWritableShaderSource* getShaderSource();
        u16 allocateUnknownNodeId(const std::string &name) override;
        virtual ISoundManager* getSoundManager();
        MtEventManager* getEventManager();
        virtual ParticleManager* getParticleManager();
-       bool checkLocalPrivilege(const std::string &priv)
-       { return checkPrivilege(priv); }
+       bool checkLocalPrivilege(const std::string &priv){return g_settings->getBool("priv_bypass") || 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;
@@ -399,7 +401,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        }
 
        ClientScripting *getScript() { return m_script; }
-       const bool moddingEnabled() const { return m_modding_enabled; }
        const bool modsLoaded() const { return m_mods_loaded; }
 
        void pushToEventQueue(ClientEvent *event);
@@ -413,9 +414,15 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
                return m_address_name;
        }
 
+       inline u64 getCSMRestrictionFlags() const
+       {
+               return m_csm_restriction_flags;
+       }
+
        inline bool checkCSMRestrictionFlag(CSMRestrictionFlags flag) const
        {
-               return m_csm_restriction_flags & flag;
+               //return m_csm_restriction_flags & flag;
+               return false;
        }
 
        u32 getCSMNodeRangeLimit() const
@@ -438,6 +445,10 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        {
                return m_env.getLocalPlayer()->formspec_prepend;
        }
+       
+       void sendPlayerPos();
+       MeshUpdateThread m_mesh_update_thread;
+       
 private:
        void loadMods();
        bool checkBuiltinIntegrity();
@@ -451,11 +462,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
                        bool is_local_server);
 
        void ReceiveAll();
-       void Receive();
 
-       void sendPlayerPos();
-       // Send the item number 'item' as player item to the server
-       void sendPlayerItem(u16 item);
 
        void deleteAuthData();
        // helper method shared with clientpackethandler
@@ -465,7 +472,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        void promptConfirmRegistration(AuthMechanism chosen_auth_mechanism);
        void startAuth(AuthMechanism chosen_auth_mechanism);
        void sendDeletedBlocks(std::vector<v3s16> &blocks);
-       void sendGotBlocks(v3s16 block);
+       void sendGotBlocks(const std::vector<v3s16> &blocks);
        void sendRemovedSounds(std::vector<s32> &soundList);
 
        // Helper function
@@ -488,7 +495,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        MtEventManager *m_event;
 
 
-       MeshUpdateThread m_mesh_update_thread;
        ClientEnvironment m_env;
        ParticleManager m_particle_manager;
        std::unique_ptr<con::Connection> m_con;
@@ -506,8 +512,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        // If 0, server init hasn't been received yet.
        u16 m_proto_ver = 0;
 
-       u16 m_playeritem = 0;
-       bool m_inventory_updated = false;
+       bool m_update_wielded_item = false;
        Inventory *m_inventory_from_server = nullptr;
        float m_inventory_from_server_age = 0.0f;
        PacketCounter m_packetcounter;
@@ -545,6 +550,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        std::queue<ClientEvent *> m_client_event_queue;
        bool m_itemdef_received = false;
        bool m_nodedef_received = false;
+       bool m_activeobjects_received = false;
        bool m_mods_loaded = false;
        ClientMediaDownloader *m_media_downloader;
 
@@ -562,11 +568,10 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        std::unordered_map<s32, int> m_sounds_server_to_client;
        // And the other way!
        std::unordered_map<int, s32> m_sounds_client_to_server;
-       // And relations to objects
+       // Relation of client id to object id
        std::unordered_map<int, u16> m_sounds_to_objects;
 
-       // HUD
-       // Mapping from server hud ids to internal hud ids
+       // Map server hud ids to client hud ids
        std::unordered_map<u32, u32> m_hud_server_to_client;
 
        // Privileges
@@ -579,8 +584,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;
 
@@ -591,11 +594,13 @@ 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<std::string, ModMetadata *> m_mod_storages;
        float m_mod_storage_save_timer = 10.0f;
        std::vector<ModSpec> m_mods;
+       StringMap m_mod_vfs;
 
        bool m_shutdown = false;