X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Finventory.h;h=a690eb5ae29d825b4635888d23d1a0aa407fb738;hb=0115da1d6348a08388238d8728daaa048a603522;hp=676088b94425d41a80fae40076540240285df2b0;hpb=6d0ea26c2d62c3774ff384cf1bfc2a3372b49a3b;p=minetest.git diff --git a/src/inventory.h b/src/inventory.h index 676088b94..a690eb5ae 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -20,13 +20,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef INVENTORY_HEADER #define INVENTORY_HEADER -#include -#include -#include -#include -#include "irrlichttypes_bloated.h" #include "debug.h" #include "itemdef.h" +#include "irrlichttypes.h" +#include +#include +#include +#include struct ToolCapabilities; @@ -40,8 +40,9 @@ struct ItemStack // Serialization void serialize(std::ostream &os) const; - void deSerialize(std::istream &is, IItemDefManager *itemdef); - void deSerialize(const std::string &s, IItemDefManager *itemdef); + // Deserialization. Pass itemdef unless you don't want aliases resolved. + void deSerialize(std::istream &is, IItemDefManager *itemdef = NULL); + void deSerialize(const std::string &s, IItemDefManager *itemdef = NULL); // Returns the string used for inventory std::string getItemString() const; @@ -70,7 +71,7 @@ struct ItemStack void remove(u16 n) { - assert(count >= n); + assert(count >= n); // Pre-condition count -= n; if(count == 0) clear(); // reset name, wear and metadata too @@ -183,6 +184,11 @@ class InventoryList InventoryList(const InventoryList &other); InventoryList & operator = (const InventoryList &other); + bool operator == (const InventoryList &other) const; + bool operator != (const InventoryList &other) const + { + return !(*this == other); + } const std::string &getName() const; u32 getSize() const; @@ -238,7 +244,13 @@ class InventoryList // Move an item to a different list (or a different stack in the same list) // count is the maximum number of items to move (0 for everything) - void moveItem(u32 i, InventoryList *dest, u32 dest_i, u32 count = 0); + // returns number of moved items + u32 moveItem(u32 i, InventoryList *dest, u32 dest_i, + u32 count = 0, bool swap_if_needed = true, bool *did_swap = NULL); + + // like moveItem, but without a fixed destination index + // also with optional rollback recording + void moveItemSomewhere(u32 i, InventoryList *dest, u32 count); private: std::vector m_items; @@ -258,7 +270,12 @@ class Inventory Inventory(IItemDefManager *itemdef); Inventory(const Inventory &other); Inventory & operator = (const Inventory &other); - + bool operator == (const Inventory &other) const; + bool operator != (const Inventory &other) const + { + return !(*this == other); + } + void serialize(std::ostream &os) const; void deSerialize(std::istream &is); @@ -270,18 +287,30 @@ class Inventory // A shorthand for adding items. Returns leftover item (possibly empty). ItemStack addItem(const std::string &listname, const ItemStack &newitem) { + m_dirty = true; InventoryList *list = getList(listname); if(list == NULL) return newitem; return list->addItem(newitem); } - + + bool checkModified() const + { + return m_dirty; + } + + void setModified(const bool x) + { + m_dirty = x; + } + private: // -1 if not found const s32 getListIndex(const std::string &name) const; std::vector m_lists; IItemDefManager *m_itemdef; + bool m_dirty; }; #endif