summaryrefslogtreecommitdiff
path: root/src/shopitem.h
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2009-03-25 22:50:59 +0100
committerBjørn Lindeijer <bjorn@lindeijer.nl>2009-03-25 22:50:59 +0100
commitcc79f0fe21e1a2ef73cbe987d54e848b9a47142d (patch)
treeedd316eb6094f0c02d6d014385865dcd88a2bc56 /src/shopitem.h
parentb0df784f1be44a657ca8092069488602270629b7 (diff)
parent99e8a3fd77b63a029fe02dcf771b6af1aad252ed (diff)
downloadmana-client-cc79f0fe21e1a2ef73cbe987d54e848b9a47142d.tar.gz
mana-client-cc79f0fe21e1a2ef73cbe987d54e848b9a47142d.tar.bz2
mana-client-cc79f0fe21e1a2ef73cbe987d54e848b9a47142d.tar.xz
mana-client-cc79f0fe21e1a2ef73cbe987d54e848b9a47142d.zip
Merge branch 'eathena/master'
Conflicts: A lot of files.
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 50af4991..08a5c8d2 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; }
@@ -50,6 +123,15 @@ class ShopItem : public Item
protected:
int mPrice;
std::string mDisplayName;
+
+ /**
+ * Struct to keep track of duplicates.
+ */
+ typedef struct {
+ int inventoryIndex;
+ int quantity;
+ } DuplicateItem;
+ std::stack<DuplicateItem*> mDuplicates; /** <-- Stores duplicates */
};
#endif