summaryrefslogtreecommitdiff
path: root/src/shopitem.h
diff options
context:
space:
mode:
authorMajin Sniper <majinsniper@gmx.de>2009-02-23 19:19:55 +0100
committerIra Rice <irarice@gmail.com>2009-02-23 18:32:06 -0700
commitf65c1e48107fa2cc615c86d8f6829b50c05baa3f (patch)
tree81e95de6b7f9b53208d0c57072ef74a0941c22e8 /src/shopitem.h
parent48fb40dba78a5b748b53abfa79f8c0442a72a9c7 (diff)
downloadmana-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.h90
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