X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Finventory.h;h=07d81a3f7eecb77c8575616bd87a763d447357f4;hb=9c72d44fe75cc448cc0da1191a36fe6a7d879f20;hp=0cbd97abc3dc70bdcc050523316bfd1cde9a2267;hpb=d1d57cf5c34c9a4626fd8e3b40db3ea321b40335;p=dragonfireclient.git diff --git a/src/inventory.h b/src/inventory.h index 0cbd97abc..07d81a3f7 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -35,6 +35,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #define QUANTITY_ITEM_MAX_COUNT 99 +class ServerActiveObject; +class ServerEnvironment; + class InventoryItem { public: @@ -54,6 +57,14 @@ class InventoryItem #endif // Shall return a text to show in the GUI virtual std::string getText() { return ""; } + // Creates an object from the item, to be placed in the world. + virtual ServerActiveObject* createSAO(ServerEnvironment *env, u16 id, v3f pos); + // Gets amount of items that dropping one SAO will decrement + virtual u16 getDropCount(){ return getCount(); } + + /* + Quantity methods + */ // Shall return true if the item can be add()ed to the other virtual bool addableTo(InventoryItem *other) @@ -61,9 +72,6 @@ class InventoryItem return false; } - /* - Quantity methods - */ u16 getCount() { return m_count; @@ -72,6 +80,7 @@ class InventoryItem { m_count = count; } + // This should return something else for stackable items virtual u16 freeSpace() { return 0; @@ -87,6 +96,16 @@ class InventoryItem m_count -= count; } + /* + Other properties + */ + // Whether it can be cooked + virtual bool isCookable(){return false;} + // Time of cooking + virtual float getCookTime(){return 3.0;} + // Result of cooking + virtual InventoryItem *createCookResult(){return NULL;} + protected: u16 m_count; }; @@ -148,6 +167,11 @@ class MaterialItem : public InventoryItem return 0; return QUANTITY_ITEM_MAX_COUNT - m_count; } + /* + Other properties + */ + bool isCookable(); + InventoryItem *createCookResult(); /* Special methods */ @@ -159,6 +183,7 @@ class MaterialItem : public InventoryItem u8 m_content; }; +//TODO: Remove class MapBlockObjectItem : public InventoryItem { public: @@ -246,26 +271,7 @@ class CraftItem : public InventoryItem return new CraftItem(m_subname, m_count); } #ifndef SERVER - video::ITexture * getImage() - { - if(g_texturesource == NULL) - return NULL; - - std::string name; - - if(m_subname == "Stick") - name = "stick.png"; - else if(m_subname == "lump_of_coal") - name = "lump_of_coal.png"; - else if(m_subname == "lump_of_iron") - name = "lump_of_iron.png"; - else - name = "cloud.png"; - - // Get such a texture - //return g_irrlicht->getTexture(name); - return g_texturesource->getTextureRaw(name); - } + video::ITexture * getImage(); #endif std::string getText() { @@ -273,6 +279,10 @@ class CraftItem : public InventoryItem os<getName()) != "CraftItem") @@ -288,6 +298,11 @@ class CraftItem : public InventoryItem return 0; return QUANTITY_ITEM_MAX_COUNT - m_count; } + /* + Other properties + */ + bool isCookable(); + InventoryItem *createCookResult(); /* Special methods */ @@ -335,11 +350,31 @@ class ToolItem : public InventoryItem std::string basename; if(m_toolname == "WPick") - basename = "tool_wpick.png"; + basename = "tool_woodpick.png"; else if(m_toolname == "STPick") - basename = "tool_stpick.png"; + basename = "tool_stonepick.png"; + else if(m_toolname == "SteelPick") + basename = "tool_steelpick.png"; else if(m_toolname == "MesePick") basename = "tool_mesepick.png"; + else if(m_toolname == "WShovel") + basename = "tool_woodshovel.png"; + else if(m_toolname == "STShovel") + basename = "tool_stoneshovel.png"; + else if(m_toolname == "SteelShovel") + basename = "tool_steelshovel.png"; + else if(m_toolname == "WAxe") + basename = "tool_woodaxe.png"; + else if(m_toolname == "STAxe") + basename = "tool_stoneaxe.png"; + else if(m_toolname == "SteelAxe") + basename = "tool_steelaxe.png"; + else if(m_toolname == "WSword") + basename = "tool_woodsword.png"; + else if(m_toolname == "STSword") + basename = "tool_stonesword.png"; + else if(m_toolname == "SteelSword") + basename = "tool_steelsword.png"; else basename = "cloud.png"; @@ -355,11 +390,6 @@ class ToolItem : public InventoryItem os<getTextureRaw(os.str()); - - /*TextureSpec spec; - spec.addTid(g_irrlicht->getTextureId(basename)); - spec.addTid(g_irrlicht->getTextureId(os.str())); - return g_irrlicht->getTexture(spec);*/ } #endif std::string getText() @@ -428,6 +458,10 @@ class InventoryList u32 getSize(); // Count used slots u32 getUsedSlots(); + u32 getFreeSlots(); + + /*bool getDirty(){ return m_dirty; } + void setDirty(bool dirty=true){ m_dirty = dirty; }*/ // Get pointer to item InventoryItem * getItem(u32 i); @@ -463,6 +497,7 @@ class InventoryList core::array m_items; u32 m_size; std::string m_name; + //bool m_dirty; }; class Inventory