From 92ac962718b07e9b82199d39bb5ce970717da57d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 25 Jun 2015 20:42:02 -0400 Subject: SHERLOCK: RT: Further split-off of Scalpel-specific code --- engines/sherlock/inventory.cpp | 240 ++--------------------------------------- 1 file changed, 8 insertions(+), 232 deletions(-) (limited to 'engines/sherlock/inventory.cpp') diff --git a/engines/sherlock/inventory.cpp b/engines/sherlock/inventory.cpp index 692b05773b..492ac736b1 100644 --- a/engines/sherlock/inventory.cpp +++ b/engines/sherlock/inventory.cpp @@ -22,6 +22,7 @@ #include "sherlock/inventory.h" #include "sherlock/sherlock.h" +#include "sherlock/scalpel/scalpel_inventory.h" #include "sherlock/scalpel/scalpel_user_interface.h" namespace Sherlock { @@ -42,6 +43,13 @@ void InventoryItem::synchronize(Serializer &s) { /*----------------------------------------------------------------*/ +Inventory *Inventory::init(SherlockEngine *vm) { + if (vm->getGameID() == GType_SerratedScalpel) + return new Scalpel::ScalpelInventory(vm); + else + return new Inventory(vm); +} + Inventory::Inventory(SherlockEngine *vm) : Common::Array(), _vm(vm) { Common::fill(&_invShapes[0], &_invShapes[MAX_VISIBLE_INVENTORY], (ImageFile *)nullptr); _invGraphicsLoaded = false; @@ -128,238 +136,6 @@ int Inventory::findInv(const Common::String &name) { error("Couldn't find inventory item - %s", name.c_str()); } -void Inventory::putInv(InvSlamMode slamIt) { - Screen &screen = *_vm->_screen; - UserInterface &ui = *_vm->_ui; - - // If an inventory item has disappeared (due to using it or giving it), - // a blank space slot may have appeared. If so, adjust the inventory - if (_invIndex > 0 && _invIndex > (_holdings - 6)) { - --_invIndex; - freeGraphics(); - loadGraphics(); - } - - if (slamIt != SLAM_SECONDARY_BUFFER) { - screen.makePanel(Common::Rect(6, 163, 54, 197)); - screen.makePanel(Common::Rect(58, 163, 106, 197)); - screen.makePanel(Common::Rect(110, 163, 158, 197)); - screen.makePanel(Common::Rect(162, 163, 210, 197)); - screen.makePanel(Common::Rect(214, 163, 262, 197)); - screen.makePanel(Common::Rect(266, 163, 314, 197)); - } - - // Iterate through displaying up to 6 objects at a time - for (int idx = _invIndex; idx < _holdings && (idx - _invIndex) < MAX_VISIBLE_INVENTORY; ++idx) { - int itemNum = idx - _invIndex; - Surface &bb = slamIt == SLAM_SECONDARY_BUFFER ? screen._backBuffer2 : screen._backBuffer1; - Common::Rect r(8 + itemNum * 52, 165, 51 + itemNum * 52, 194); - - // Draw the background - if (idx == ui._selector) { - bb.fillRect(r, BUTTON_BACKGROUND); - } else if (slamIt == SLAM_SECONDARY_BUFFER) { - bb.fillRect(r, BUTTON_MIDDLE); - } - - // Draw the item image - ImageFrame &frame = (*_invShapes[itemNum])[0]; - bb.transBlitFrom(frame, Common::Point(6 + itemNum * 52 + ((47 - frame._width) / 2), - 163 + ((33 - frame._height) / 2))); - } - - if (slamIt == SLAM_DISPLAY) - screen.slamArea(6, 163, 308, 34); - - if (slamIt != SLAM_SECONDARY_BUFFER) - ui.clearInfo(); - - if (slamIt == 0) { - invCommands(0); - } else if (slamIt == SLAM_SECONDARY_BUFFER) { - screen._backBuffer = &screen._backBuffer2; - invCommands(0); - screen._backBuffer = &screen._backBuffer1; - } -} - -void Inventory::drawInventory(InvNewMode mode) { - FixedText &fixedText = *_vm->_fixedText; - Screen &screen = *_vm->_screen; - UserInterface &ui = *_vm->_ui; - InvNewMode tempMode = mode; - - loadInv(); - - if (mode == INVENTORY_DONT_DISPLAY) { - screen._backBuffer = &screen._backBuffer2; - } - - // Draw the window background - Surface &bb = *screen._backBuffer; - bb.fillRect(Common::Rect(0, CONTROLS_Y1, SHERLOCK_SCREEN_WIDTH, CONTROLS_Y1 + 10), BORDER_COLOR); - bb.fillRect(Common::Rect(0, CONTROLS_Y1 + 10, 2, SHERLOCK_SCREEN_HEIGHT), BORDER_COLOR); - bb.fillRect(Common::Rect(SHERLOCK_SCREEN_WIDTH - 2, CONTROLS_Y1 + 10, - SHERLOCK_SCREEN_WIDTH, SHERLOCK_SCREEN_HEIGHT), BORDER_COLOR); - bb.fillRect(Common::Rect(0, SHERLOCK_SCREEN_HEIGHT - 2, SHERLOCK_SCREEN_WIDTH, - SHERLOCK_SCREEN_HEIGHT), BORDER_COLOR); - bb.fillRect(Common::Rect(2, CONTROLS_Y1 + 10, SHERLOCK_SCREEN_WIDTH - 2, SHERLOCK_SCREEN_HEIGHT - 2), - INV_BACKGROUND); - - // Draw the buttons - Common::String fixedText_Exit = fixedText.getText(kFixedText_Inventory_Exit); - Common::String fixedText_Look = fixedText.getText(kFixedText_Inventory_Look); - Common::String fixedText_Use = fixedText.getText(kFixedText_Inventory_Use); - Common::String fixedText_Give = fixedText.getText(kFixedText_Inventory_Give); - - screen.makeButton(Common::Rect(Scalpel::INVENTORY_POINTS[0][0], CONTROLS_Y1, Scalpel::INVENTORY_POINTS[0][1], - CONTROLS_Y1 + 10), Scalpel::INVENTORY_POINTS[0][2] - screen.stringWidth(fixedText_Exit) / 2, fixedText_Exit); - screen.makeButton(Common::Rect(Scalpel::INVENTORY_POINTS[1][0], CONTROLS_Y1, Scalpel::INVENTORY_POINTS[1][1], - CONTROLS_Y1 + 10), Scalpel::INVENTORY_POINTS[1][2] - screen.stringWidth(fixedText_Look) / 2, fixedText_Look); - screen.makeButton(Common::Rect(Scalpel::INVENTORY_POINTS[2][0], CONTROLS_Y1, Scalpel::INVENTORY_POINTS[2][1], - CONTROLS_Y1 + 10), Scalpel::INVENTORY_POINTS[2][2] - screen.stringWidth(fixedText_Use) / 2, fixedText_Use); - screen.makeButton(Common::Rect(Scalpel::INVENTORY_POINTS[3][0], CONTROLS_Y1, Scalpel::INVENTORY_POINTS[3][1], - CONTROLS_Y1 + 10), Scalpel::INVENTORY_POINTS[3][2] - screen.stringWidth(fixedText_Give) / 2, fixedText_Give); - screen.makeButton(Common::Rect(Scalpel::INVENTORY_POINTS[4][0], CONTROLS_Y1, Scalpel::INVENTORY_POINTS[4][1], - CONTROLS_Y1 + 10), Scalpel::INVENTORY_POINTS[4][2], "^^"); // 2 arrows pointing to the left - screen.makeButton(Common::Rect(Scalpel::INVENTORY_POINTS[5][0], CONTROLS_Y1, Scalpel::INVENTORY_POINTS[5][1], - CONTROLS_Y1 + 10), Scalpel::INVENTORY_POINTS[5][2], "^"); // 1 arrow pointing to the left - screen.makeButton(Common::Rect(Scalpel::INVENTORY_POINTS[6][0], CONTROLS_Y1, Scalpel::INVENTORY_POINTS[6][1], - CONTROLS_Y1 + 10), Scalpel::INVENTORY_POINTS[6][2], "_"); // 1 arrow pointing to the right - screen.makeButton(Common::Rect(Scalpel::INVENTORY_POINTS[7][0], CONTROLS_Y1, Scalpel::INVENTORY_POINTS[7][1], - CONTROLS_Y1 + 10), Scalpel::INVENTORY_POINTS[7][2], "__"); // 2 arrows pointing to the right - - if (tempMode == INVENTORY_DONT_DISPLAY) - mode = LOOK_INVENTORY_MODE; - _invMode = (InvMode)mode; - - if (mode != PLAIN_INVENTORY) { - ui._oldKey = Scalpel::INVENTORY_COMMANDS[(int)mode]; - } else { - ui._oldKey = -1; - } - - invCommands(0); - putInv(SLAM_DONT_DISPLAY); - - if (tempMode != INVENTORY_DONT_DISPLAY) { - if (!ui._slideWindows) { - screen.slamRect(Common::Rect(0, CONTROLS_Y1, SHERLOCK_SCREEN_WIDTH, SHERLOCK_SCREEN_HEIGHT)); - } else { - ui.summonWindow(false, CONTROLS_Y1); - } - - ui._windowOpen = true; - } else { - // Reset the screen back buffer to the first buffer now that drawing is done - screen._backBuffer = &screen._backBuffer1; - } - - assert(IS_SERRATED_SCALPEL); - ((Scalpel::ScalpelUserInterface *)_vm->_ui)->_oldUse = -1; -} - -void Inventory::invCommands(bool slamIt) { - FixedText &fixedText = *_vm->_fixedText; - Screen &screen = *_vm->_screen; - UserInterface &ui = *_vm->_ui; - - Common::String fixedText_Exit = fixedText.getText(kFixedText_Inventory_Exit); - Common::String fixedText_Look = fixedText.getText(kFixedText_Inventory_Look); - Common::String fixedText_Use = fixedText.getText(kFixedText_Inventory_Use); - Common::String fixedText_Give = fixedText.getText(kFixedText_Inventory_Give); - - if (slamIt) { - screen.buttonPrint(Common::Point(Scalpel::INVENTORY_POINTS[0][2], CONTROLS_Y1), - _invMode == INVMODE_EXIT ? COMMAND_HIGHLIGHTED :COMMAND_FOREGROUND, - true, fixedText_Exit); - screen.buttonPrint(Common::Point(Scalpel::INVENTORY_POINTS[1][2], CONTROLS_Y1), - _invMode == INVMODE_LOOK ? COMMAND_HIGHLIGHTED :COMMAND_FOREGROUND, - true, fixedText_Look); - screen.buttonPrint(Common::Point(Scalpel::INVENTORY_POINTS[2][2], CONTROLS_Y1), - _invMode == INVMODE_USE ? COMMAND_HIGHLIGHTED : COMMAND_FOREGROUND, - true, fixedText_Use); - screen.buttonPrint(Common::Point(Scalpel::INVENTORY_POINTS[3][2], CONTROLS_Y1), - _invMode == INVMODE_GIVE ? COMMAND_HIGHLIGHTED : COMMAND_FOREGROUND, - true, fixedText_Give); - screen.print(Common::Point(Scalpel::INVENTORY_POINTS[4][2], CONTROLS_Y1 + 1), - _invIndex == 0 ? COMMAND_NULL : COMMAND_FOREGROUND, - "^^"); // 2 arrows pointing to the left - screen.print(Common::Point(Scalpel::INVENTORY_POINTS[5][2], CONTROLS_Y1 + 1), - _invIndex == 0 ? COMMAND_NULL : COMMAND_FOREGROUND, - "^"); // 2 arrows pointing to the left - screen.print(Common::Point(Scalpel::INVENTORY_POINTS[6][2], CONTROLS_Y1 + 1), - (_holdings - _invIndex <= 6) ? COMMAND_NULL : COMMAND_FOREGROUND, - "_"); // 1 arrow pointing to the right - screen.print(Common::Point(Scalpel::INVENTORY_POINTS[7][2], CONTROLS_Y1 + 1), - (_holdings - _invIndex <= 6) ? COMMAND_NULL : COMMAND_FOREGROUND, - "__"); // 2 arrows pointing to the right - if (_invMode != INVMODE_LOOK) - ui.clearInfo(); - } else { - screen.buttonPrint(Common::Point(Scalpel::INVENTORY_POINTS[0][2], CONTROLS_Y1), - _invMode == INVMODE_EXIT ? COMMAND_HIGHLIGHTED : COMMAND_FOREGROUND, - false, fixedText_Exit); - screen.buttonPrint(Common::Point(Scalpel::INVENTORY_POINTS[1][2], CONTROLS_Y1), - _invMode == INVMODE_LOOK ? COMMAND_HIGHLIGHTED : COMMAND_FOREGROUND, - false, fixedText_Look); - screen.buttonPrint(Common::Point(Scalpel::INVENTORY_POINTS[2][2], CONTROLS_Y1), - _invMode == INVMODE_USE ? COMMAND_HIGHLIGHTED : COMMAND_FOREGROUND, - false, fixedText_Use); - screen.buttonPrint(Common::Point(Scalpel::INVENTORY_POINTS[3][2], CONTROLS_Y1), - _invMode == INVMODE_GIVE ? COMMAND_HIGHLIGHTED : COMMAND_FOREGROUND, - false, fixedText_Give); - screen.gPrint(Common::Point(Scalpel::INVENTORY_POINTS[4][2], CONTROLS_Y1), - _invIndex == 0 ? COMMAND_NULL : COMMAND_FOREGROUND, - "^^"); // 2 arrows pointing to the left - screen.gPrint(Common::Point(Scalpel::INVENTORY_POINTS[5][2], CONTROLS_Y1), - _invIndex == 0 ? COMMAND_NULL : COMMAND_FOREGROUND, - "^"); // 1 arrow pointing to the left - screen.gPrint(Common::Point(Scalpel::INVENTORY_POINTS[6][2], CONTROLS_Y1), - (_holdings - _invIndex < 7) ? COMMAND_NULL : COMMAND_FOREGROUND, - "_"); // 1 arrow pointing to the right - screen.gPrint(Common::Point(Scalpel::INVENTORY_POINTS[7][2], CONTROLS_Y1), - (_holdings - _invIndex < 7) ? COMMAND_NULL : COMMAND_FOREGROUND, - "__"); // 2 arrows pointing to the right - } -} - -void Inventory::highlight(int index, byte color) { - Screen &screen = *_vm->_screen; - Surface &bb = *screen._backBuffer; - int slot = index - _invIndex; - ImageFrame &frame = (*_invShapes[slot])[0]; - - bb.fillRect(Common::Rect(8 + slot * 52, 165, (slot + 1) * 52, 194), color); - bb.transBlitFrom(frame, Common::Point(6 + slot * 52 + ((47 - frame._width) / 2), - 163 + ((33 - frame._height) / 2))); - screen.slamArea(8 + slot * 52, 165, 44, 30); -} - -void Inventory::refreshInv() { - if (IS_ROSE_TATTOO) - return; - - Screen &screen = *_vm->_screen; - Talk &talk = *_vm->_talk; - Scalpel::ScalpelUserInterface &ui = *(Scalpel::ScalpelUserInterface *)_vm->_ui; - - ui._invLookFlag = true; - freeInv(); - - ui._infoFlag = true; - ui.clearInfo(); - - screen._backBuffer2.blitFrom(screen._backBuffer1, Common::Point(0, CONTROLS_Y), - Common::Rect(0, CONTROLS_Y, SHERLOCK_SCREEN_WIDTH, SHERLOCK_SCREEN_HEIGHT)); - ui.examine(); - - if (!talk._talkToAbort) { - screen._backBuffer2.blitFrom((*ui._controlPanel)[0], Common::Point(0, CONTROLS_Y)); - loadInv(); - } -} - int Inventory::putNameInInventory(const Common::String &name) { Scene &scene = *_vm->_scene; int matches = 0; -- cgit v1.2.3