diff options
author | Eugene Sandulenko | 2016-08-28 11:11:27 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2016-08-28 11:43:25 +0200 |
commit | 0f0fee3add3dcff4740bb3c68765c109331573bc (patch) | |
tree | 84adb4e47bc03598c01b4d7e437a697822a2cc0e /engines/fullpipe | |
parent | bcd5df5c6e94a1d6c9cfb97f27a0306b8ff54e60 (diff) | |
download | scummvm-rg350-0f0fee3add3dcff4740bb3c68765c109331573bc.tar.gz scummvm-rg350-0f0fee3add3dcff4740bb3c68765c109331573bc.tar.bz2 scummvm-rg350-0f0fee3add3dcff4740bb3c68765c109331573bc.zip |
FULLPIPE: Implement Inventory2::removeItem()
Diffstat (limited to 'engines/fullpipe')
-rw-r--r-- | engines/fullpipe/fullpipe.cpp | 1 | ||||
-rw-r--r-- | engines/fullpipe/fullpipe.h | 3 | ||||
-rw-r--r-- | engines/fullpipe/inventory.cpp | 28 |
3 files changed, 29 insertions, 3 deletions
diff --git a/engines/fullpipe/fullpipe.cpp b/engines/fullpipe/fullpipe.cpp index 22f2050d16..b41d0ed894 100644 --- a/engines/fullpipe/fullpipe.cpp +++ b/engines/fullpipe/fullpipe.cpp @@ -55,6 +55,7 @@ FullpipeEngine::FullpipeEngine(OSystem *syst, const ADGameDescription *gameDesc) DebugMan.addDebugChannel(kDebugBehavior, "behavior", "Behavior"); DebugMan.addDebugChannel(kDebugMemory, "memory", "Memory management"); DebugMan.addDebugChannel(kDebugEvents, "events", "Event handling"); + DebugMan.addDebugChannel(kDebugInventory, "inventory", "Inventory"); // Setup mixer if (!_mixer->isReady()) { diff --git a/engines/fullpipe/fullpipe.h b/engines/fullpipe/fullpipe.h index 2012d7a344..e4e2e477d5 100644 --- a/engines/fullpipe/fullpipe.h +++ b/engines/fullpipe/fullpipe.h @@ -55,7 +55,8 @@ enum { kDebugAnimation = 1 << 3, kDebugMemory = 1 << 4, kDebugEvents = 1 << 5, - kDebugBehavior = 1 << 6 + kDebugBehavior = 1 << 6, + kDebugInventory = 1 << 7 }; class BehaviorManager; diff --git a/engines/fullpipe/inventory.cpp b/engines/fullpipe/inventory.cpp index aa229d55d7..70ad19c8ea 100644 --- a/engines/fullpipe/inventory.cpp +++ b/engines/fullpipe/inventory.cpp @@ -35,7 +35,7 @@ Inventory::~Inventory() { } bool Inventory::load(MfcArchive &file) { - debugC(5, kDebugLoading, "Inventory::load()"); + debugC(5, kDebugLoading | kDebugInventory, "Inventory::load()"); _sceneId = file.readUint16LE(); int numInvs = file.readUint32LE(); @@ -119,12 +119,36 @@ void Inventory2::addItem2(StaticANIObject *obj) { } void Inventory2::removeItem(int itemId, int count) { - warning("STUB: Inventory2::removeItem(%d, %d)", itemId, count); + debugC(2, kDebugInventory, "Inventory2::removeItem(%d, %d)", itemId, count); + + while (count) { + int i; + for (i = _inventoryItems.size() - 1; i >= 0; i--) { + if (_inventoryItems[i]->itemId == itemId) { + if (_selectedId == itemId) + unselectItem(false); + + if (_inventoryItems[i]->count > count) { + _inventoryItems[i]->count -= count; + } else { + count -= _inventoryItems[i]->count; + _inventoryItems.remove_at(i); + } + + if (getCountItemsWithId(itemId) < 0) + getInventoryPoolItemFieldCById(itemId); + + break; + } + } + } } void Inventory2::removeItem2(Scene *sceneObj, int itemId, int x, int y, int priority) { int idx = getInventoryItemIndexById(itemId); + debugC(2, kDebugInventory, "removeItem2(*, %d, %d, %d, %d)", itemId, x, y, priority); + if (idx >= 0) { if (_inventoryItems[idx]->count) { removeItem(itemId, 1); |