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.cpp | |
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.cpp')
-rw-r--r-- | src/shopitem.cpp | 58 |
1 files changed, 55 insertions, 3 deletions
diff --git a/src/shopitem.cpp b/src/shopitem.cpp index 6547aaf1..d6bb1d49 100644 --- a/src/shopitem.cpp +++ b/src/shopitem.cpp @@ -23,10 +23,62 @@ #include "units.h" -ShopItem::ShopItem(int id, int quantity, int price): - Item(id, quantity), - mPrice(price) +ShopItem::ShopItem (int inventoryIndex, int id, + int quantity, int price) : + Item (id, 0), mPrice(price) { mDisplayName = getInfo().getName() + " (" + Units::formatCurrency(mPrice).c_str() + ")"; + setInvIndex(inventoryIndex); + addDuplicate(inventoryIndex, quantity); +} + +ShopItem::ShopItem (int id, int price) : Item (id, 0), mPrice(price) +{ + mDisplayName = getInfo().getName() + + " (" + Units::formatCurrency(mPrice).c_str() + ")"; + setInvIndex(-1); + addDuplicate(-1, 0); +} + +ShopItem::~ShopItem() +{ + /** Clear all remaining duplicates on Object destruction. */ + while (!mDuplicates.empty()) + { + delete mDuplicates.top(); + mDuplicates.pop(); + } +} + +void ShopItem::addDuplicate(int inventoryIndex, + int quantity) +{ + DuplicateItem* di = new DuplicateItem; + di->inventoryIndex = inventoryIndex; + di->quantity = quantity; + mDuplicates.push(di); + mQuantity += quantity; +} + + +void ShopItem::addDuplicate() +{ + DuplicateItem* di = new DuplicateItem; + di->inventoryIndex = -1; + di->quantity = 0; + mDuplicates.push(di); +} + +int ShopItem::sellCurrentDuplicate(int quantity) +{ + DuplicateItem* dupl = mDuplicates.top(); + int sellCount = quantity <= dupl->quantity ? quantity : dupl->quantity; + dupl->quantity -= sellCount; + mQuantity -= sellCount; + if (dupl->quantity == 0) { + delete dupl; + mDuplicates.pop(); + } + return sellCount; } |