diff options
author | Majin Sniper <majinsniper@gmx.de> | 2009-02-23 19:19:55 +0100 |
---|---|---|
committer | Ira Rice <irarice@gmail.com> | 2009-02-23 18:32:06 -0700 |
commit | f65c1e48107fa2cc615c86d8f6829b50c05baa3f (patch) | |
tree | 81e95de6b7f9b53208d0c57072ef74a0941c22e8 /src/shopitem.h | |
parent | 48fb40dba78a5b748b53abfa79f8c0442a72a9c7 (diff) | |
download | mana-f65c1e48107fa2cc615c86d8f6829b50c05baa3f.tar.gz mana-f65c1e48107fa2cc615c86d8f6829b50c05baa3f.tar.bz2 mana-f65c1e48107fa2cc615c86d8f6829b50c05baa3f.tar.xz mana-f65c1e48107fa2cc615c86d8f6829b50c05baa3f.zip |
Allow to sell non-stackable items like stackables
Make it possible to sell non-stackable items all at once by introducing
"Duplicate Items" and a Shop that can handle them. Also fix a
trivial bug to correctly preview you money while selling.
Diffstat (limited to 'src/shopitem.h')
-rw-r--r-- | src/shopitem.h | 90 |
1 files changed, 86 insertions, 4 deletions
diff --git a/src/shopitem.h b/src/shopitem.h index 8b1ba4b2..d6226732 100644 --- a/src/shopitem.h +++ b/src/shopitem.h @@ -23,27 +23,100 @@ #ifndef _SHOPITEM_H #define _SHOPITEM_H +#include <stack> + #include "item.h" /** - * Represents an item in a shop inventory. + * Represents an item in a shop inventory. It can store quantity and inventory + * indices of duplicate entries in the shop as well. */ class ShopItem : public Item { public: /** - * Constructor. + * Constructor. Creates a new ShopItem. + * + * @param inventoryIndex the inventory index of the item + * @param id the id of the item + * @param quantity number of available copies of the item + * @param price price of the item + */ + ShopItem(int inventoryIndex, int id, int quantity, int price); + + /** + * Constructor. Creates a new ShopItem. Inventory index will be set to + * -1 and quantity to 0. + * + * @param id the id of the item + * @param price price of the item + */ + ShopItem(int id, int price); + + /** + * Destructor. + */ + ~ShopItem(); + + /** + * Add a duplicate. Id and price will be taken from this item. + * + * @param inventoryIndex the inventory index of the item + * @param quantity number of available copies of the item + */ + void addDuplicate (int inventoryIndex, int quantity); + + /** + * Add a duplicate. Id and price will be taken from this item. + * Needed for compatibility with ShopDuplicateItems (see) class + * documentation). */ - ShopItem(int id, int quantity, int price); + void addDuplicate (); + + /** + * Gets the quantity of the currently topmost duplicate. + * + * @return the quantity of the currently topmost duplicate + */ + int getCurrentQuantity() { + return mDuplicates.empty() ? 0 : mDuplicates.top()->quantity; + } + + /** + * Gets the inventory index of the currently topmost duplicate. + * + * @return the inventory index of the currently topmost duplicate + */ + int getCurrentInvIndex() { + return mDuplicates.empty() ? mInvIndex : + mDuplicates.top()->inventoryIndex; + } + + /** + * Reduces the quantity of the topmost duplicate by the specified + * amount. Also reduces the total quantity of this DuplicateItem. + * Empty duplicates are automatically removed. + * + * If the amount is bigger than the quantity of the current topmost, + * only sell as much as possible. Returns the amount actually sold (do + * not ignore the return value!) + * + * @return the amount, that actually was sold. + */ + int sellCurrentDuplicate(int quantity); /** * Gets the price of the item. + * + * @return the price of the item */ int getPrice() const { return mPrice; } /** - * Gets the display name for in the shop list. + * Gets the display name for the item in the shop list. + * + * @return the display name for the item in the shop list */ const std::string& getDisplayName() const { return mDisplayName; } @@ -52,6 +125,15 @@ class ShopItem : public Item int mPrice; int mIndex; std::string mDisplayName; + + /** + * Struct to keep track of duplicates. + */ + typedef struct { + int inventoryIndex; + int quantity; + } DuplicateItem; + std::stack<DuplicateItem*> mDuplicates; /** <-- Stores duplicates */ }; #endif |