diff options
author | Majin Sniper <majinsniper@gmx.de> | 2009-02-23 19:19:55 +0100 |
---|---|---|
committer | Ira Rice <irarice@gmail.com> | 2009-02-23 18:32:06 -0700 |
commit | f65c1e48107fa2cc615c86d8f6829b50c05baa3f (patch) | |
tree | 81e95de6b7f9b53208d0c57072ef74a0941c22e8 /src/shopitem.cpp | |
parent | 48fb40dba78a5b748b53abfa79f8c0442a72a9c7 (diff) | |
download | mana-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.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 c8015e45..5573eb37 100644 --- a/src/shopitem.cpp +++ b/src/shopitem.cpp @@ -24,10 +24,62 @@ #include "utils/stringutils.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() + " (" + toString(mPrice) + " GP)"; + setInvIndex(inventoryIndex); + addDuplicate(inventoryIndex, quantity); +} + +ShopItem::ShopItem (int id, int price) : Item (id, 0), mPrice(price) +{ + mDisplayName = getInfo().getName() + " (" + toString(mPrice) + " GP)"; + 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; } |