From 4e249fb3fbf75f0359758760d88e22aa5b14533c Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sat, 27 Nov 2010 01:02:21 +0200 Subject: Initial files --- src/inventory.h | 195 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 src/inventory.h (limited to 'src/inventory.h') diff --git a/src/inventory.h b/src/inventory.h new file mode 100644 index 000000000..8ea8bd650 --- /dev/null +++ b/src/inventory.h @@ -0,0 +1,195 @@ +/* +(c) 2010 Perttu Ahola +*/ + +#ifndef INVENTORY_HEADER +#define INVENTORY_HEADER + +#include +#include +#include +#include "common_irrlicht.h" +#include "debug.h" +#include "mapblockobject.h" +// For g_materials +#include "main.h" + +class InventoryItem +{ +public: + InventoryItem(); + virtual ~InventoryItem(); + + static InventoryItem* deSerialize(std::istream &is); + + virtual const char* getName() const = 0; + // Shall write the name and the parameters + virtual void serialize(std::ostream &os) = 0; + // Shall make an exact clone of the item + virtual InventoryItem* clone() = 0; + // Shall return an image to show in the GUI (or NULL) + virtual video::ITexture * getImage() { return NULL; } + // Shall return a text to show in the GUI + virtual std::string getText() { return ""; } + +private: +}; + +#define MATERIAL_ITEM_MAX_COUNT 99 + +class MaterialItem : public InventoryItem +{ +public: + MaterialItem(u8 material, u16 count) + { + m_material = material; + m_count = count; + } + /* + Implementation interface + */ + virtual const char* getName() const + { + return "MaterialItem"; + } + virtual void serialize(std::ostream &os) + { + //os.imbue(std::locale("C")); + os< MATERIAL_ITEM_MAX_COUNT) + return 0; + return MATERIAL_ITEM_MAX_COUNT - m_count; + } + void add(u16 count) + { + assert(m_count + count <= MATERIAL_ITEM_MAX_COUNT); + m_count += count; + } + void remove(u16 count) + { + assert(m_count >= count); + m_count -= count; + } +private: + u8 m_material; + u16 m_count; +}; + +class MapBlockObjectItem : public InventoryItem +{ +public: + /*MapBlockObjectItem(MapBlockObject *obj) + { + m_inventorystring = obj->getInventoryString(); + }*/ + MapBlockObjectItem(std::string inventorystring) + { + m_inventorystring = inventorystring; + } + + /* + Implementation interface + */ + virtual const char* getName() const + { + return "MBOItem"; + } + virtual void serialize(std::ostream &os) + { + for(;;) + { + size_t t = m_inventorystring.find('|'); + if(t == std::string::npos) + break; + m_inventorystring[t] = '?'; + } + os< m_items; + u32 m_size; +}; + +#endif + -- cgit v1.2.3