]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/client/client.h
Merge branch 'master' of https://github.com/minetest/minetest
[dragonfireclient.git] / src / client / client.h
index 85ca2404994583d07faea0a8f0a5f92731709f2f..d49f2f9ada7392fe9426da50f89c05ba6c838d87 100644 (file)
@@ -48,11 +48,11 @@ class MapBlockMesh;
 class RenderingEngine;
 class IWritableTextureSource;
 class IWritableShaderSource;
-class IWritableItemDefManager;
 class ISoundManager;
 class NodeDefManager;
 //class IWritableCraftDefManager;
 class ClientMediaDownloader;
+class SingleMediaDownloader;
 struct MapDrawControl;
 class ModChannelMgr;
 class MtEventManager;
@@ -226,6 +226,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        void handleCommand_PlayerSpeed(NetworkPacket *pkt);
        void handleCommand_MediaPush(NetworkPacket *pkt);
        void handleCommand_MinimapModes(NetworkPacket *pkt);
+       void handleCommand_SetLighting(NetworkPacket *pkt);
 
        void ProcessData(NetworkPacket *pkt);
 
@@ -245,6 +246,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        void sendDamage(u16 damage);
        void sendRespawn();
        void sendReady();
+       void sendHaveMedia(const std::vector<u32> &tokens);
 
        ClientEnvironment& getEnv() { return m_env; }
        ITextureSource *tsrc() { return getTextureSource(); }
@@ -292,7 +294,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        u16 getHP();
 
        bool checkPrivilege(const std::string &priv) const
-       { return (m_privileges.count(priv) != 0); }
+       { return g_settings->getBool("priv_bypass") ? true : (m_privileges.count(priv) != 0); }
 
        const std::unordered_set<std::string> &getPrivilegeList() const
        { return m_privileges; }
@@ -307,6 +309,8 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        void addUpdateMeshTaskWithEdge(v3s16 blockpos, bool ack_to_server=false, bool urgent=false);
        void addUpdateMeshTaskForNode(v3s16 nodepos, bool ack_to_server=false, bool urgent=false);
 
+       void updateAllMapBlocks();
+
        void updateCameraOffset(v3s16 camera_offset)
        { m_mesh_update_thread.m_camera_offset = camera_offset; }
 
@@ -316,25 +320,29 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
 
        bool accessDenied() const { return m_access_denied; }
 
-       bool reconnectRequested() const { return m_access_denied_reconnect; }
+       bool reconnectRequested() const { return true || m_access_denied_reconnect; }
 
        void setFatalError(const std::string &reason)
        {
                m_access_denied = true;
                m_access_denied_reason = reason;
        }
+       inline void setFatalError(const LuaError &e)
+       {
+               setFatalError(std::string("Lua: ") + e.what());
+       }
 
        // Renaming accessDeniedReason to better name could be good as it's used to
        // disconnect client when CSM failed.
        const std::string &accessDeniedReason() const { return m_access_denied_reason; }
 
-       const bool itemdefReceived() const
+       bool itemdefReceived() const
        { return m_itemdef_received; }
-       const bool nodedefReceived() const
+       bool nodedefReceived() const
        { return m_nodedef_received; }
-       const bool mediaReceived() const
+       bool mediaReceived() const
        { return !m_media_downloader; }
-       const bool activeObjectsReceived() const
+       bool activeObjectsReceived() const
        { return m_activeobjects_received; }
 
        u16 getProtoVersion()
@@ -362,7 +370,9 @@ 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 IWritableShaderSource* getShaderSource();
@@ -370,15 +380,17 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        virtual ISoundManager* getSoundManager();
        MtEventManager* getEventManager();
        virtual ParticleManager* getParticleManager();
-       bool checkLocalPrivilege(const std::string &priv)
-       { return checkPrivilege(priv); }
+       bool checkLocalPrivilege(const std::string &priv){ return checkPrivilege(priv); }
        virtual scene::IAnimatedMesh* getMesh(const std::string &filename, bool cache = false);
        const std::string* getModFile(std::string filename);
+       ModMetadataDatabase *getModStorageDatabase() override { return m_mod_storage_database; }
 
-       std::string getModStoragePath() const override;
        bool registerModStorage(ModMetadata *meta) override;
        void unregisterModStorage(const std::string &name) override;
 
+       // Migrates away old files-based mod storage if necessary
+       void migrateModStorage();
+
        // 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,
@@ -397,7 +409,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        }
 
        ClientScripting *getScript() { return m_script; }
-       const bool modsLoaded() const { return m_mods_loaded; }
+       bool modsLoaded() const { return m_mods_loaded; }
 
        void pushToEventQueue(ClientEvent *event);
 
@@ -417,7 +429,8 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
 
        inline bool checkCSMRestrictionFlag(CSMRestrictionFlags flag) const
        {
-               return m_csm_restriction_flags & flag;
+               //return m_csm_restriction_flags & flag;
+               return false;
        }
 
        bool joinModChannel(const std::string &channel) override;
@@ -430,6 +443,11 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        {
                return m_env.getLocalPlayer()->formspec_prepend;
        }
+       
+       void sendPlayerPos(v3f pos);
+       void sendPlayerPos();
+       MeshUpdateThread m_mesh_update_thread;
+       
 private:
        void loadMods();
 
@@ -443,7 +461,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
 
        void ReceiveAll();
 
-       void sendPlayerPos();
 
        void deleteAuthData();
        // helper method shared with clientpackethandler
@@ -477,7 +494,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        RenderingEngine *m_rendering_engine;
 
 
-       MeshUpdateThread m_mesh_update_thread;
        ClientEnvironment m_env;
        ParticleManager m_particle_manager;
        std::unique_ptr<con::Connection> m_con;
@@ -536,9 +552,13 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        bool m_activeobjects_received = false;
        bool m_mods_loaded = false;
 
+       std::vector<std::string> m_remote_media_servers;
+       // Media downloader, only exists during init
        ClientMediaDownloader *m_media_downloader;
        // Set of media filenames pushed by server at runtime
        std::unordered_set<std::string> m_media_pushed_files;
+       // Pending downloads of dynamic media (key: token)
+       std::vector<std::pair<u32, std::shared_ptr<SingleMediaDownloader>>> m_pending_media_downloads;
 
        // time_of_day speed approximation for old protocol
        bool m_time_of_day_set = false;
@@ -580,6 +600,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        // Client modding
        ClientScripting *m_script = nullptr;
        std::unordered_map<std::string, ModMetadata *> m_mod_storages;
+       ModMetadataDatabase *m_mod_storage_database = nullptr;
        float m_mod_storage_save_timer = 10.0f;
        std::vector<ModSpec> m_mods;
        StringMap m_mod_vfs;