Tooltips: Unify the tooltip[] and list[] description tooltip display functions (...
[oweals/minetest.git] / src / itemdef.h
index 805b4aa5dd09bfb8b977bad71b93177a4d7bdcef..2d7ff570dee3f828ee848d4f9363d2cc0aa36b96 100644 (file)
@@ -28,7 +28,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "itemgroup.h"
 #include "sound.h"
 class IGameDef;
+class Client;
 struct ToolCapabilities;
+#ifndef SERVER
+#include "client/tile.h"
+struct ItemMesh;
+struct ItemStack;
+#endif
 
 /*
        Base item definition
@@ -56,12 +62,14 @@ struct ItemDefinition
        */
        std::string inventory_image; // Optional for nodes, mandatory for tools/craftitems
        std::string wield_image; // If empty, inventory_image or mesh (only nodes) is used
+       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
@@ -99,18 +107,25 @@ public:
        // 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;
@@ -125,18 +140,18 @@ public:
        // 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
 
        // Remove all registered item and node definitions and aliases
@@ -144,6 +159,7 @@ public:
        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.