LocalPlayer::accelerateHorizontal: cleanups
[oweals/minetest.git] / src / client.h
index ab9801d6218deb1a406537537500079cf6ed54c1..adac83e5cbf3f190ea10a033723e1be9cbb7c51b 100644 (file)
@@ -37,10 +37,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "mapnode.h"
 #include "tileanimation.h"
 #include "mesh_generator_thread.h"
+#include <fstream>
+#include "filesys.h"
 
 #define CLIENT_CHAT_MESSAGE_LIMIT_PER_10S 10.0f
 
 struct MeshMakeData;
+struct ChatMessage;
 class MapBlockMesh;
 class IWritableTextureSource;
 class IWritableShaderSource;
@@ -273,6 +276,16 @@ public:
        ~Client();
        DISABLE_CLASS_COPY(Client);
 
+       // Load local mods into memory
+       void loadMods();
+       void scanModSubfolder(const std::string &mod_name, const std::string &mod_path,
+                               std::string mod_subpath);
+       inline void scanModIntoMemory(const std::string &mod_name, const std::string &mod_path)
+       {
+               scanModSubfolder(mod_name, mod_path, "");
+       }
+
+       // Initizle the mods
        void initMods();
 
        /*
@@ -316,7 +329,8 @@ public:
        void handleCommand_BlockData(NetworkPacket* pkt);
        void handleCommand_Inventory(NetworkPacket* pkt);
        void handleCommand_TimeOfDay(NetworkPacket* pkt);
-       void handleCommand_ChatMessage(NetworkPacket* pkt);
+       void handleCommand_ChatMessageOld(NetworkPacket *pkt);
+       void handleCommand_ChatMessage(NetworkPacket *pkt);
        void handleCommand_ActiveObjectRemoveAdd(NetworkPacket* pkt);
        void handleCommand_ActiveObjectMessages(NetworkPacket* pkt);
        void handleCommand_Movement(NetworkPacket* pkt);
@@ -350,6 +364,7 @@ public:
        void handleCommand_EyeOffset(NetworkPacket* pkt);
        void handleCommand_UpdatePlayerList(NetworkPacket* pkt);
        void handleCommand_SrpBytesSandB(NetworkPacket* pkt);
+       void handleCommand_CSMFlavourLimits(NetworkPacket *pkt);
 
        void ProcessData(NetworkPacket *pkt);
 
@@ -382,6 +397,14 @@ public:
 
        // Causes urgent mesh updates (unlike Map::add/removeNodeWithEvent)
        void removeNode(v3s16 p);
+
+       /**
+        * Helper function for Client Side Modding
+        * Flavour is 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);
        void addNode(v3s16 p, MapNode n, bool remove_metadata = true);
 
@@ -492,6 +515,7 @@ public:
        bool checkLocalPrivilege(const std::string &priv)
        { return checkPrivilege(priv); }
        virtual scene::IAnimatedMesh* getMesh(const std::string &filename);
+       const std::string* getModFile(const std::string &filename);
 
        virtual std::string getModStoragePath() const;
        virtual bool registerModStorage(ModMetadata *meta);
@@ -507,9 +531,9 @@ public:
 
        void makeScreenshot();
 
-       inline void pushToChatQueue(const std::wstring &input)
+       inline void pushToChatQueue(ChatMessage *cec)
        {
-               m_chat_queue.push(input);
+               m_chat_queue.push(cec);
        }
 
        ClientScripting *getScript() { return m_script; }
@@ -537,6 +561,16 @@ public:
                return m_address_name;
        }
 
+       inline bool checkCSMFlavourLimit(CSMFlavourLimit flag) const
+       {
+               return m_csm_flavour_limits & flag;
+       }
+
+       u32 getCSMNodeRangeLimit() const
+       {
+               return m_csm_noderange_limit;
+       }
+
 private:
 
        // Virtual methods from con::PeerHandler
@@ -616,10 +650,10 @@ private:
        // 0 <= m_daynight_i < DAYNIGHT_CACHE_COUNT
        //s32 m_daynight_i;
        //u32 m_daynight_ratio;
-       std::queue<std::wstring> m_chat_queue;
        std::queue<std::wstring> m_out_chat_queue;
        u32 m_last_chat_message_sent;
        float m_chat_message_allowance = 5.0f;
+       std::queue<ChatMessage *> m_chat_queue;
 
        // The authentication methods we can use to enter sudo mode (=change password)
        u32 m_sudo_auth_methods;
@@ -672,6 +706,8 @@ private:
        // 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;
 
@@ -684,9 +720,14 @@ private:
        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;
        GameUIFlags *m_game_ui_flags;
 
        bool m_shutdown = false;
+
+       // CSM flavour limits byteflag
+       u64 m_csm_flavour_limits = CSMFlavourLimit::CSM_FL_NONE;
+       u32 m_csm_noderange_limit = 8;
 };
 
 #endif // !CLIENT_HEADER