summaryrefslogtreecommitdiff
path: root/src/shopitem.h
diff options
context:
space:
mode:
authorMajin Sniper <majinsniper@gmx.de>2009-02-23 19:19:55 +0100
committerJared Adams <jaxad0127@gmail.com>2009-02-23 17:19:56 -0700
commite15b8c360ac5171fe73b8b73fbe00eedba8970ff (patch)
treeec7d2129c8dc35c3cdf7669a08beb71c30a7760c /src/shopitem.h
parentc54b987a4e4d28d35e8bafb03e1dba33b5fda4ab (diff)
downloadmana-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.h90
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