From 2b112a9c587c82af3b5df3b63e6eaa51401e6c37 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 11 May 2011 20:28:30 +1000 Subject: TSAGE: Rework parts of the cursor code to better match the original This also fixes the problem with the cursor appearing in cutscenes when you press any key --- engines/tsage/dialogs.cpp | 5 ++--- engines/tsage/events.cpp | 30 ++++++++++++------------------ engines/tsage/events.h | 1 + engines/tsage/ringworld_logic.cpp | 3 +-- engines/tsage/ringworld_scenes2.cpp | 2 ++ 5 files changed, 18 insertions(+), 23 deletions(-) diff --git a/engines/tsage/dialogs.cpp b/engines/tsage/dialogs.cpp index f8e35f74f9..4eb35d9d44 100644 --- a/engines/tsage/dialogs.cpp +++ b/engines/tsage/dialogs.cpp @@ -73,12 +73,11 @@ MessageDialog::MessageDialog(const Common::String &message, const Common::String int MessageDialog::show(const Common::String &message, const Common::String &btn1Message, const Common::String &btn2Message) { // Ensure that the cursor is the arrow - _globals->_events.pushCursor(CURSOR_ARROW); - _globals->_events.showCursor(); + _globals->_events.setCursor(CURSOR_ARROW); int result = show2(message, btn1Message, btn2Message); - _globals->_events.popCursor(); + _globals->_events.setCursorFromFlag(); return result; } diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index e51c5da479..cc2e3f0933 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -38,7 +38,7 @@ namespace tSage { EventsClass::EventsClass() { _currentCursor = CURSOR_NONE; - hideCursor(); + _lastCursor = CURSOR_NONE; _frameNumber = 0; _priorFrameTime = 0; _prevDelayFrame = 0; @@ -140,17 +140,11 @@ bool EventsClass::getEvent(Event &evt, int eventMask) { * @cursorType Specified cursor number */ void EventsClass::setCursor(CursorType cursorType) { - _globals->clearFlag(122); - - if ((_currentCursor == cursorType) && CursorMan.isVisible()) + if (cursorType == _lastCursor) return; - if (cursorType == CURSOR_NONE) { - if (CursorMan.isVisible()) - CursorMan.showMouse(false); - return; - } - + _lastCursor = cursorType; + _globals->clearFlag(122); CursorMan.showMouse(true); const byte *cursor; @@ -158,8 +152,8 @@ void EventsClass::setCursor(CursorType cursorType) { uint size; switch (cursorType) { - case OBJECT_STUNNER: - // Stunner cursor + case CURSOR_NONE: + // No cursor cursor = _resourceManager->getSubResource(4, 1, 6, &size); _globals->setFlag(122); break; @@ -215,8 +209,8 @@ void EventsClass::pushCursor(CursorType cursorType) { uint size; switch (cursorType) { - case CURSOR_CROSSHAIRS: - // Crosshairs cursor + case CURSOR_NONE: + // No cursor cursor = _resourceManager->getSubResource(4, 1, 6, &size); break; @@ -273,19 +267,19 @@ void EventsClass::setCursor(Graphics::Surface &cursor, int transColor, const Com } void EventsClass::setCursorFromFlag() { - setCursor(_globals->getFlag(122) ? CURSOR_CROSSHAIRS : _currentCursor); + setCursor(isCursorVisible() ? _currentCursor : CURSOR_NONE); } void EventsClass::showCursor() { - CursorMan.showMouse(true); + setCursor(_currentCursor); } void EventsClass::hideCursor() { - CursorMan.showMouse(false); + setCursor(CURSOR_NONE); } bool EventsClass::isCursorVisible() const { - return CursorMan.isVisible(); + return !_globals->getFlag(122); } /** diff --git a/engines/tsage/events.h b/engines/tsage/events.h index d2dbd9e058..2e6f19a151 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -80,6 +80,7 @@ public: Common::Point _mousePos; CursorType _currentCursor; + CursorType _lastCursor; void setCursor(CursorType cursorType); void pushCursor(CursorType cursorType); diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index d334e0ce1f..b4f2ed4909 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -1328,10 +1328,9 @@ void RingworldGame::handleSaveLoad(bool saveFlag, int &saveSlot, Common::String } void RingworldGame::start() { - // Set some default flags and cursor + // Set some default flags _globals->setFlag(12); _globals->setFlag(34); - _globals->_events.setCursor(CURSOR_WALK); // Set the screen to scroll in response to the player moving off-screen _globals->_scrollFollower = &_globals->_player; diff --git a/engines/tsage/ringworld_scenes2.cpp b/engines/tsage/ringworld_scenes2.cpp index 6a8db81adf..c3edbf9fa7 100644 --- a/engines/tsage/ringworld_scenes2.cpp +++ b/engines/tsage/ringworld_scenes2.cpp @@ -113,6 +113,8 @@ void Scene1000::Action3::signal() { setDelay(240); break; case 5: { + _globals->_player.enableControl(); + const char *SEEN_INTRO = "seen_intro"; if (!ConfMan.hasKey(SEEN_INTRO) || !ConfMan.getBool(SEEN_INTRO)) { // First time being played, so show the introduction -- cgit v1.2.3