From 239784b13dd12c3f731312c5277dbc9fb0ab47ed Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 22 Jun 2015 21:38:52 -0400 Subject: SHERLOCK: RT: Beginnings of look window display --- engines/sherlock/tattoo/tattoo_journal.cpp | 2 +- engines/sherlock/tattoo/tattoo_talk.cpp | 11 ++++++++--- engines/sherlock/tattoo/tattoo_talk.h | 2 +- engines/sherlock/tattoo/tattoo_user_interface.cpp | 12 +++++++++++- engines/sherlock/tattoo/tattoo_user_interface.h | 7 ++++++- engines/sherlock/tattoo/widget_base.cpp | 12 +++++++++--- 6 files changed, 36 insertions(+), 10 deletions(-) diff --git a/engines/sherlock/tattoo/tattoo_journal.cpp b/engines/sherlock/tattoo/tattoo_journal.cpp index c419b9e50f..e3f681bc3c 100644 --- a/engines/sherlock/tattoo/tattoo_journal.cpp +++ b/engines/sherlock/tattoo/tattoo_journal.cpp @@ -854,7 +854,7 @@ int TattooJournal::getFindName(bool printError) { if (keyState.ascii && keyState.ascii != '@' && name.size() < 50) { if ((cursorX + screen.charWidth(keyState.ascii)) < (r.right - screen.widestChar() * 3)) { cursorX += screen.charWidth(keyState.ascii); - name += keyState.ascii; + name += toupper(keyState.ascii); } } diff --git a/engines/sherlock/tattoo/tattoo_talk.cpp b/engines/sherlock/tattoo/tattoo_talk.cpp index 2da30057c7..52b6b51213 100644 --- a/engines/sherlock/tattoo/tattoo_talk.cpp +++ b/engines/sherlock/tattoo/tattoo_talk.cpp @@ -22,6 +22,7 @@ #include "sherlock/tattoo/tattoo_talk.h" #include "sherlock/tattoo/tattoo_people.h" +#include "sherlock/tattoo/tattoo_user_interface.h" #include "sherlock/sherlock.h" #include "sherlock/screen.h" @@ -182,7 +183,7 @@ TattooTalk::TattooTalk(SherlockEngine *vm) : Talk(vm) { } void TattooTalk::talkInterface(const byte *&str) { - drawTalk(str); + drawTalk((const char *)str); _charCount = 0; while ((*str < TATTOO_OPCODES[0] || *str == TATTOO_OPCODES[OP_NULL]) && *str) { @@ -193,8 +194,12 @@ void TattooTalk::talkInterface(const byte *&str) { _wait = true; } -void TattooTalk::drawTalk(const byte *str) { - // TODO +void TattooTalk::drawTalk(const char *str) { + TattooUserInterface &ui = *(TattooUserInterface *)_vm->_ui; + + ui.banishWindow(); + ui._textWidget.load(str); + ui._textWidget.summonWindow(); } OpcodeReturn TattooTalk::cmdSwitchSpeaker(const byte *&str) { diff --git a/engines/sherlock/tattoo/tattoo_talk.h b/engines/sherlock/tattoo/tattoo_talk.h index d7464c3979..9fd6f05242 100644 --- a/engines/sherlock/tattoo/tattoo_talk.h +++ b/engines/sherlock/tattoo/tattoo_talk.h @@ -74,7 +74,7 @@ private: OpcodeReturn cmdWalkNPCToCoords(const byte *&str); OpcodeReturn cmdWalkHomesAndNPCToCoords(const byte *&str); private: - void drawTalk(const byte *str); + void drawTalk(const char *str); protected: /** * Display the talk interface window diff --git a/engines/sherlock/tattoo/tattoo_user_interface.cpp b/engines/sherlock/tattoo/tattoo_user_interface.cpp index f1b75f45d4..01b0b6386d 100644 --- a/engines/sherlock/tattoo/tattoo_user_interface.cpp +++ b/engines/sherlock/tattoo/tattoo_user_interface.cpp @@ -247,7 +247,11 @@ void TattooUserInterface::handleInput() { if (_keyState.keycode == Common::KEYCODE_s && vm._allowFastMode) vm._fastMode = !vm._fastMode; - else if (_keyState.keycode == Common::KEYCODE_ESCAPE && vm._runningProlog && !_lockoutTimer) { + else if (_keyState.keycode == Common::KEYCODE_l && _bgFound != -1) { + // Beging used for testing that Look dialogs work + lookAtObject(); + + } else if (_keyState.keycode == Common::KEYCODE_ESCAPE && vm._runningProlog && !_lockoutTimer) { vm.setFlags(-76); vm.setFlags(396); scene._goToScene = STARTING_GAME_SCENE; @@ -928,6 +932,12 @@ void TattooUserInterface::drawDialogRect(Surface &s, const Common::Rect &r, bool } } +void TattooUserInterface::banishWindow() { + if (_widget != nullptr) + _widget->banishWindow(); + _widget = nullptr; +} + } // End of namespace Tattoo } // End of namespace Sherlock diff --git a/engines/sherlock/tattoo/tattoo_user_interface.h b/engines/sherlock/tattoo/tattoo_user_interface.h index 2ff046bef7..bb9e1d91a2 100644 --- a/engines/sherlock/tattoo/tattoo_user_interface.h +++ b/engines/sherlock/tattoo/tattoo_user_interface.h @@ -59,7 +59,6 @@ private: int _scriptZone; int _cAnimFramePause; WidgetInventory _inventoryWidget; - WidgetText _textWidget; WidgetSceneTooltip _tooltipWidget; WidgetVerbs _verbsWidget; WidgetBase *_widget; @@ -147,6 +146,7 @@ public: Common::Point _maskOffset; int _maskCounter; ImageFile *_interfaceImages; + WidgetText _textWidget; public: TattooUserInterface(SherlockEngine *vm); virtual ~TattooUserInterface(); @@ -221,6 +221,11 @@ public: * Draws all the dialog rectangles for any items that need them */ void drawDialogRect(Surface &s, const Common::Rect &r, bool raised); + + /** + * Banish any active window + */ + void banishWindow(); public: /** * Resets the user interface diff --git a/engines/sherlock/tattoo/widget_base.cpp b/engines/sherlock/tattoo/widget_base.cpp index 1df14ffe7d..cd4f8e08a2 100644 --- a/engines/sherlock/tattoo/widget_base.cpp +++ b/engines/sherlock/tattoo/widget_base.cpp @@ -36,11 +36,16 @@ void WidgetBase::summonWindow() { TattooUserInterface &ui = *(TattooUserInterface *)_vm->_ui; ui._widget = this; _outsideMenu = false; + + draw(); } void WidgetBase::banishWindow() { - // TODO + TattooUserInterface &ui = *(TattooUserInterface *)_vm->_ui; + + erase(); _surface.free(); + ui._widget = nullptr; } void WidgetBase::erase() { @@ -90,7 +95,7 @@ Common::String WidgetBase::splitLines(const Common::String &str, Common::StringA // Loop counting up lines lines.clear(); - while (lines.size() < maxLines) { + do { int width = 0; const char *spaceP = nullptr; const char *lineStartP = strP; @@ -117,7 +122,8 @@ Common::String WidgetBase::splitLines(const Common::String &str, Common::StringA // Move the string ahead to the next line if (*strP == ' ' || *strP == 13) ++strP; - } while (*strP && ((byte)*strP < talk._opcodes[OP_SWITCH_SPEAKER] || (byte)*strP == talk._opcodes[OP_NULL])); + } while (*strP && ((int)lines.size() < maxLines) && ((byte)*strP < talk._opcodes[OP_SWITCH_SPEAKER] + || (byte)*strP == talk._opcodes[OP_NULL])); // Return any remaining text left over return *strP ? Common::String(strP) : Common::String(); -- cgit v1.2.3