X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Finventory.h;h=67a7859ed14dafc9baa35913d27766f79f6ce1d2;hb=1780adeea63630e67f4af8b300f6ae710d9af486;hp=95a0bb43e7594fe33432c3726ff1b6c2a9b1b0a5;hpb=8e3b63bd28579d8f8cb3e7844600504f12b087a5;p=dragonfireclient.git diff --git a/src/inventory.h b/src/inventory.h index 95a0bb43e..67a7859ed 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -40,13 +40,15 @@ struct ItemStack ~ItemStack() = default; // Serialization - void serialize(std::ostream &os) const; + void serialize(std::ostream &os, bool serialize_meta = true) const; // 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; + std::string getItemString(bool include_meta = true) const; + // Returns the tooltip + std::string getDescription(IItemDefManager *itemdef) const; /* Quantity methods @@ -192,7 +194,7 @@ class InventoryList void setSize(u32 newsize); void setWidth(u32 newWidth); void setName(const std::string &name); - void serialize(std::ostream &os) const; + void serialize(std::ostream &os, bool incremental) const; void deSerialize(std::istream &is); InventoryList(const InventoryList &other); @@ -263,12 +265,16 @@ class InventoryList // also with optional rollback recording void moveItemSomewhere(u32 i, InventoryList *dest, u32 count); + inline bool checkModified() const { return m_dirty; } + inline void setModified(bool dirty = true) { m_dirty = dirty; } + private: std::vector m_items; std::string m_name; u32 m_size; u32 m_width = 0; IItemDefManager *m_itemdef; + bool m_dirty = true; }; class Inventory @@ -277,7 +283,6 @@ class Inventory ~Inventory(); void clear(); - void clearContents(); Inventory(IItemDefManager *itemdef); Inventory(const Inventory &other); @@ -288,7 +293,8 @@ class Inventory return !(*this == other); } - void serialize(std::ostream &os) const; + // Never ever serialize to disk using "incremental"! + void serialize(std::ostream &os, bool incremental = false) const; void deSerialize(std::istream &is); InventoryList * addList(const std::string &name, u32 size); @@ -299,28 +305,38 @@ 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 + inline bool checkModified() const { - return m_dirty; + if (m_dirty) + return true; + + for (const auto &list : m_lists) + if (list->checkModified()) + return true; + + return false; } - void setModified(const bool x) + inline void setModified(bool dirty = true) { - m_dirty = x; + m_dirty = dirty; + // Set all as handled + if (!dirty) { + for (const auto &list : m_lists) + list->setModified(dirty); + } } - private: // -1 if not found const s32 getListIndex(const std::string &name) const; std::vector m_lists; IItemDefManager *m_itemdef; - bool m_dirty = false; + bool m_dirty = true; };