diff options
Diffstat (limited to 'engines/fullpipe/inventory.cpp')
-rw-r--r-- | engines/fullpipe/inventory.cpp | 50 |
1 files changed, 38 insertions, 12 deletions
diff --git a/engines/fullpipe/inventory.cpp b/engines/fullpipe/inventory.cpp index 18ef3c4d97..483631ed33 100644 --- a/engines/fullpipe/inventory.cpp +++ b/engines/fullpipe/inventory.cpp @@ -30,6 +30,10 @@ namespace Fullpipe { +Inventory::~Inventory() { + _itemsPool.clear(); +} + bool Inventory::load(MfcArchive &file) { debug(5, "Inventory::load()"); @@ -85,6 +89,10 @@ Inventory2::Inventory2() { _topOffset = -65; } +Inventory2::~Inventory2() { + removeMessageHandler(125, -1); +} + bool Inventory2::loadPartial(MfcArchive &file) { // Inventory2_SerializePartially int numInvs = file.readUint32LE(); @@ -115,7 +123,25 @@ void Inventory2::removeItem(int itemId, int count) { } void Inventory2::removeItem2(Scene *sceneObj, int itemId, int x, int y, int priority) { - warning("STUB: void removeItem2(sc, %d, %d, %d, %d)", itemId, x, y, priority); + int idx = getInventoryItemIndexById(itemId); + + if (idx >= 0) { + if (_inventoryItems[idx]->itemId >> 16) { + removeItem(itemId, 1); + + Scene *sc = g_fp->accessScene(_sceneId); + + if (sc) { + StaticANIObject *ani = new StaticANIObject(sc->getStaticANIObject1ById(itemId, -1)); + + sceneObj->addStaticANIObject(ani, 1); + + ani->_statics = (Statics *)ani->_staticsList[0]; + ani->setOXY(x, y); + ani->_priority = priority; + } + } + } } int Inventory2::getCountItemsWithId(int itemId) { @@ -161,7 +187,7 @@ int Inventory2::getItemFlags(int itemId) { } void Inventory2::rebuildItemRects() { - _scene = g_fullpipe->accessScene(_sceneId); + _scene = g_fp->accessScene(_sceneId); if (!_scene) return; @@ -193,7 +219,7 @@ void Inventory2::rebuildItemRects() { InventoryIcon *icn = new InventoryIcon(); icn->inventoryItemId = _itemsPool[idx]->id; - + icn->pictureObjectNormal = _scene->getPictureObjectById(_itemsPool[idx]->pictureObjectNormal, 0); icn->pictureObjectHover = _scene->getPictureObjectById(_itemsPool[idx]->pictureObjectHover, 0); icn->pictureObjectSelected = _scene->getPictureObjectById(_itemsPool[idx]->pictureObjectSelected, 0); @@ -226,11 +252,11 @@ void Inventory2::draw() { if (!_scene) return; - int oldScLeft = g_fullpipe->_sceneRect.left; - int oldScTop = g_fullpipe->_sceneRect.top; + int oldScLeft = g_fp->_sceneRect.left; + int oldScTop = g_fp->_sceneRect.top; - g_fullpipe->_sceneRect.top = -_topOffset; - g_fullpipe->_sceneRect.left = 0; + g_fp->_sceneRect.top = -_topOffset; + g_fp->_sceneRect.left = 0; _picture->draw(-1, -1, 0, 0); @@ -290,8 +316,8 @@ LABEL_25: reset: - g_fullpipe->_sceneRect.top = oldScTop; - g_fullpipe->_sceneRect.left = oldScLeft; + g_fp->_sceneRect.top = oldScTop; + g_fp->_sceneRect.left = oldScLeft; } @@ -326,7 +352,7 @@ bool Inventory2::handleLeftClick(ExCommand *cmd) { bool res = false; for (uint i = 0; i < _inventoryIcons.size(); i++) { - if (cmd->_x >= _inventoryIcons[i]->x1 && cmd->_x <= _inventoryIcons[i]->x2 && + if (cmd->_x >= _inventoryIcons[i]->x1 && cmd->_x <= _inventoryIcons[i]->x2 && cmd->_y >= _inventoryIcons[i]->y1 && cmd->_y <= _inventoryIcons[i]->y2) { if (getSelectedItemId()) { if (getSelectedItemId() != _inventoryIcons[i]->inventoryItemId) @@ -365,7 +391,7 @@ int Inventory2::selectItem(int itemId) { int idx = getInventoryPoolItemIndexById(itemId); Picture *pic = _scene->getPictureObjectById(_itemsPool[idx]->pictureObjectId1, 0)->_picture; - g_fullpipe->getGameLoaderInputController()->setCursorItemPicture(pic); + g_fp->getGameLoaderInputController()->setCursorItemPicture(pic); } return _selectedId; @@ -382,7 +408,7 @@ bool Inventory2::unselectItem(bool flag) { _inventoryIcons[i]->isSelected = false; } - g_fullpipe->getGameLoaderInputController()->setCursorItemPicture(0); + g_fp->getGameLoaderInputController()->setCursorItemPicture(0); return true; } |