]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/inventory.h
Fix mods not being recursively enabled
[dragonfireclient.git] / src / inventory.h
index b7a93553d879aacf3a159a3da51edbf2bc4c4eb6..8b31de3a8ae39ee563764fd09991e89ef11fad51 100644 (file)
@@ -40,15 +40,16 @@ 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;
+       std::string getShortDescription(IItemDefManager *itemdef) const;
 
        /*
                Quantity methods
@@ -197,7 +198,7 @@ class InventoryList
        void serialize(std::ostream &os, bool incremental) const;
        void deSerialize(std::istream &is);
 
-       InventoryList(const InventoryList &other);
+       InventoryList(const InventoryList &other) { *this = other; }
        InventoryList & operator = (const InventoryList &other);
        bool operator == (const InventoryList &other) const;
        bool operator != (const InventoryList &other) const
@@ -205,16 +206,25 @@ class InventoryList
                return !(*this == other);
        }
 
-       const std::string &getName() const;
-       u32 getSize() const;
-       u32 getWidth() const;
+       const std::string &getName() const { return m_name; }
+       u32 getSize() const { return static_cast<u32>(m_items.size()); }
+       u32 getWidth() const { return m_width; }
        // Count used slots
        u32 getUsedSlots() const;
-       u32 getFreeSlots() const;
 
        // Get reference to item
-       const ItemStack& getItem(u32 i) const;
-       ItemStack& getItem(u32 i);
+       const ItemStack &getItem(u32 i) const
+       {
+               assert(i < m_size); // Pre-condition
+               return m_items[i];
+       }
+       ItemStack &getItem(u32 i)
+       {
+               assert(i < m_size); // Pre-condition
+               return m_items[i];
+       }
+       // Get reference to all items
+       const std::vector<ItemStack> &getItems() const { return m_items; }
        // Returns old item. Parameter can be an empty item.
        ItemStack changeItem(u32 i, const ItemStack &newitem);
        // Delete item
@@ -271,7 +281,7 @@ class InventoryList
 private:
        std::vector<ItemStack> m_items;
        std::string m_name;
-       u32 m_size;
+       u32 m_size; // always the same as m_items.size()
        u32 m_width = 0;
        IItemDefManager *m_itemdef;
        bool m_dirty = true;
@@ -297,10 +307,11 @@ class Inventory
        void serialize(std::ostream &os, bool incremental = false) const;
        void deSerialize(std::istream &is);
 
+       // Creates a new list if none exists or truncates existing lists
        InventoryList * addList(const std::string &name, u32 size);
        InventoryList * getList(const std::string &name);
        const InventoryList * getList(const std::string &name) const;
-       std::vector<const InventoryList*> getLists();
+       const std::vector<InventoryList *> &getLists() const { return m_lists; }
        bool deleteList(const std::string &name);
        // A shorthand for adding items. Returns leftover item (possibly empty).
        ItemStack addItem(const std::string &listname, const ItemStack &newitem)
@@ -323,15 +334,18 @@ class Inventory
                return false;
        }
 
-       inline void setModified(bool dirty)
+       inline void setModified(bool dirty = true)
        {
                m_dirty = dirty;
-               for (const auto &list : m_lists)
-                       list->setModified(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;
+       s32 getListIndex(const std::string &name) const;
 
        std::vector<InventoryList*> m_lists;
        IItemDefManager *m_itemdef;