]> git.lizzy.rs Git - minetest.git/blobdiff - src/itemdef.h
Fix Enter key after creating a new world (#12997)
[minetest.git] / src / itemdef.h
index fb157705f2b04006ae7d9e54374e657e65c73924..3bb27559ecedf3353d4e98d5762c7b7371186527 100644 (file)
@@ -18,27 +18,24 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
-#ifndef ITEMDEF_HEADER
-#define ITEMDEF_HEADER
+#pragma once
 
 #include "irrlichttypes_extrabloated.h"
 #include <string>
 #include <iostream>
 #include <set>
-#include <map>
 #include "itemgroup.h"
 #include "sound.h"
-#include "util/container.h"
-#include "util/thread.h"
-
+#include "texture_override.h" // TextureOverride
+class IGameDef;
+class Client;
+struct ToolCapabilities;
 #ifndef SERVER
 #include "client/tile.h"
+struct ItemMesh;
+struct ItemStack;
 #endif
 
-class IGameDef;
-class INodeDefManager;
-struct ToolCapabilities;
-
 /*
        Base item definition
 */
@@ -48,7 +45,7 @@ enum ItemType
        ITEM_NONE,
        ITEM_NODE,
        ITEM_CRAFT,
-       ITEM_TOOL
+       ITEM_TOOL,
 };
 
 struct ItemDefinition
@@ -59,18 +56,23 @@ struct ItemDefinition
        ItemType type;
        std::string name; // "" = hand
        std::string description; // Shown in tooltip.
+       std::string short_description;
 
        /*
                Visual properties
        */
        std::string inventory_image; // Optional for nodes, mandatory for tools/craftitems
+       std::string inventory_overlay; // Overlay of inventory_image.
        std::string wield_image; // If empty, inventory_image or mesh (only nodes) is used
+       std::string wield_overlay; // Overlay of wield_image.
+       std::string palette_image; // If specified, the item will be colorized based on this
+       video::SColor color; // The fallback color of the node.
        v3f wield_scale;
 
        /*
                Item stack and interaction properties
        */
-       s16 stack_max;
+       u16 stack_max;
        bool usable;
        bool liquids_pointable;
        // May be NULL. If non-NULL, deleted by destructor
@@ -78,12 +80,14 @@ struct ItemDefinition
        ItemGroupList groups;
        SimpleSoundSpec sound_place;
        SimpleSoundSpec sound_place_failed;
+       SimpleSoundSpec sound_use, sound_use_air;
        f32 range;
 
        // Client shall immediately place this node when player places the item.
        // Server will update the precise end result a moment later.
        // "" = no prediction
        std::string node_placement_prediction;
+       u8 place_param2;
 
        /*
                Some helpful methods
@@ -94,7 +98,7 @@ struct ItemDefinition
        ~ItemDefinition();
        void reset();
        void serialize(std::ostream &os, u16 protocol_version) const;
-       void deSerialize(std::istream &is);
+       void deSerialize(std::istream &is, u16 protocol_version);
 private:
        void resetInitial();
 };
@@ -102,24 +106,32 @@ struct ItemDefinition
 class IItemDefManager
 {
 public:
-       IItemDefManager(){}
-       virtual ~IItemDefManager(){}
+       IItemDefManager() = default;
+
+       virtual ~IItemDefManager() = default;
 
        // Get item definition
        virtual const ItemDefinition& get(const std::string &name) const=0;
        // Get alias definition
-       virtual std::string getAlias(const std::string &name) const=0;
+       virtual const std::string &getAlias(const std::string &name) const=0;
        // Get set of all defined item names and aliases
-       virtual std::set<std::string> getAll() const=0;
+       virtual void getAll(std::set<std::string> &result) const=0;
        // Check if item is known
        virtual bool isKnown(const std::string &name) const=0;
 #ifndef SERVER
        // Get item inventory texture
        virtual video::ITexture* getInventoryTexture(const std::string &name,
-                       IGameDef *gamedef) const=0;
+                       Client *client) const=0;
        // Get item wield mesh
-       virtual scene::IMesh* getWieldMesh(const std::string &name,
-               IGameDef *gamedef) const=0;
+       virtual ItemMesh* getWieldMesh(const std::string &name,
+               Client *client) const=0;
+       // Get item palette
+       virtual Palette* getPalette(const std::string &name,
+               Client *client) const = 0;
+       // Returns the base color of an item stack: the color of all
+       // tiles that do not define their own color.
+       virtual video::SColor getItemstackColor(const ItemStack &stack,
+               Client *client) const = 0;
 #endif
 
        virtual void serialize(std::ostream &os, u16 protocol_version)=0;
@@ -128,31 +140,37 @@ class IItemDefManager
 class IWritableItemDefManager : public IItemDefManager
 {
 public:
-       IWritableItemDefManager(){}
-       virtual ~IWritableItemDefManager(){}
+       IWritableItemDefManager() = default;
+
+       virtual ~IWritableItemDefManager() = default;
 
        // Get item definition
        virtual const ItemDefinition& get(const std::string &name) const=0;
        // Get alias definition
-       virtual std::string getAlias(const std::string &name) const=0;
+       virtual const std::string &getAlias(const std::string &name) const=0;
        // Get set of all defined item names and aliases
-       virtual std::set<std::string> getAll() const=0;
+       virtual void getAll(std::set<std::string> &result) const=0;
        // Check if item is known
        virtual bool isKnown(const std::string &name) const=0;
 #ifndef SERVER
        // Get item inventory texture
        virtual video::ITexture* getInventoryTexture(const std::string &name,
-                       IGameDef *gamedef) const=0;
+                       Client *client) const=0;
        // Get item wield mesh
-       virtual scene::IMesh* getWieldMesh(const std::string &name,
-               IGameDef *gamedef) const=0;
+       virtual ItemMesh* getWieldMesh(const std::string &name,
+               Client *client) const=0;
 #endif
 
+       // Replace the textures of registered nodes with the ones specified in
+       // the texture pack's override.txt files
+       virtual void applyTextureOverrides(const std::vector<TextureOverride> &overrides)=0;
+
        // Remove all registered item and node definitions and aliases
        // Then re-add the builtin item definitions
        virtual void clear()=0;
        // Register item definition
        virtual void registerItem(const ItemDefinition &def)=0;
+       virtual void unregisterItem(const std::string &name)=0;
        // Set an alias so that items named <name> will load as <convert_to>.
        // Alias is not set if <name> has already been defined.
        // Alias will be removed if <name> is defined at a later point of time.
@@ -160,83 +178,10 @@ class IWritableItemDefManager : public IItemDefManager
                        const std::string &convert_to)=0;
 
        virtual void serialize(std::ostream &os, u16 protocol_version)=0;
-       virtual void deSerialize(std::istream &is)=0;
+       virtual void deSerialize(std::istream &is, u16 protocol_version)=0;
 
        // Do stuff asked by threads that can only be done in the main thread
        virtual void processQueue(IGameDef *gamedef)=0;
 };
 
-
-class CItemDefManager: public IWritableItemDefManager
-{
-public:
-       CItemDefManager();
-       virtual ~CItemDefManager();
-       virtual const ItemDefinition& get(const std::string &name_) const;
-       virtual std::string getAlias(const std::string &name) const;
-       virtual std::set<std::string> getAll() const;
-       virtual bool isKnown(const std::string &name_) const;
-
-#ifndef SERVER
-       // Get item inventory texture
-       virtual video::ITexture* getInventoryTexture(const std::string &name,
-                       IGameDef *gamedef) const;
-
-       // Get item wield mesh
-       virtual scene::IMesh* getWieldMesh(const std::string &name,
-                       IGameDef *gamedef) const;
-#endif
-       void clear();
-
-       virtual void registerItem(const ItemDefinition &def);
-       virtual void registerAlias(const std::string &name,
-                       const std::string &convert_to);
-       void serialize(std::ostream &os, u16 protocol_version);
-       void deSerialize(std::istream &is);
-
-       void processQueue(IGameDef *gamedef);
-
-private:
-
-#ifndef SERVER
-       struct ClientCached
-       {
-               video::ITexture *inventory_texture;
-               scene::IMesh *wield_mesh;
-
-               ClientCached();
-       };
-
-       void createNodeItemTexture(const std::string& name,
-                       const ItemDefinition& def, INodeDefManager* nodedef,
-                       ClientCached* cc, IGameDef* gamedef, ITextureSource* tsrc) const;
-
-       ClientCached* createClientCachedDirect(const std::string &name,
-                       IGameDef *gamedef) const;
-
-       ClientCached* getClientCached(const std::string &name,
-                       IGameDef *gamedef) const;
-
-       // The id of the thread that is allowed to use irrlicht directly
-       threadid_t m_main_thread;
-
-       // A reference to this can be returned when nothing is found, to avoid NULLs
-       mutable ClientCached m_dummy_clientcached;
-
-       // Cached textures and meshes
-       mutable MutexedMap<std::string, ClientCached*> m_clientcached;
-
-       // Queued clientcached fetches (to be processed by the main thread)
-       mutable RequestQueue<std::string, ClientCached*, u8, u8> m_get_clientcached_queue;
-#endif
-
-       // Key is name
-       std::map<std::string, ItemDefinition*> m_item_definitions;
-
-       // Aliases
-       std::map<std::string, std::string> m_aliases;
-};
-
 IWritableItemDefManager* createItemDefManager();
-
-#endif