diff options
Diffstat (limited to 'src/inventory.h')
-rw-r--r-- | src/inventory.h | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/src/inventory.h b/src/inventory.h index 3f299993a..b7a93553d 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -194,7 +194,7 @@ public: 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); @@ -265,12 +265,16 @@ public: // 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<ItemStack> m_items; std::string m_name; u32 m_size; u32 m_width = 0; IItemDefManager *m_itemdef; + bool m_dirty = true; }; class Inventory @@ -279,7 +283,6 @@ public: ~Inventory(); void clear(); - void clearContents(); Inventory(IItemDefManager *itemdef); Inventory(const Inventory &other); @@ -290,7 +293,8 @@ public: 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); @@ -301,28 +305,35 @@ public: // 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) { - m_dirty = x; + m_dirty = 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<InventoryList*> m_lists; IItemDefManager *m_itemdef; - bool m_dirty = false; + bool m_dirty = true; }; |