diff options
author | Majin Sniper <majinsniper@gmx.de> | 2009-02-23 19:19:55 +0100 |
---|---|---|
committer | Jared Adams <jaxad0127@gmail.com> | 2009-02-23 17:19:56 -0700 |
commit | e15b8c360ac5171fe73b8b73fbe00eedba8970ff (patch) | |
tree | ec7d2129c8dc35c3cdf7669a08beb71c30a7760c /src/shopitem.h | |
parent | c54b987a4e4d28d35e8bafb03e1dba33b5fda4ab (diff) | |
download | mana-e15b8c360ac5171fe73b8b73fbe00eedba8970ff.tar.gz mana-e15b8c360ac5171fe73b8b73fbe00eedba8970ff.tar.bz2 mana-e15b8c360ac5171fe73b8b73fbe00eedba8970ff.tar.xz mana-e15b8c360ac5171fe73b8b73fbe00eedba8970ff.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 3353ebe7..69bed334 100644 --- a/src/shopitem.h +++ b/src/shopitem.h @@ -22,27 +22,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; } @@ -51,6 +124,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 |