diff options
author | Paul Gilbert | 2011-05-16 21:09:05 +1000 |
---|---|---|
committer | Paul Gilbert | 2011-05-16 21:09:05 +1000 |
commit | 2f79090e46582bb41e036c19f06456a966436927 (patch) | |
tree | 605b1ec07bba0b0cf996f4596824b6aa8bc64239 | |
parent | f1e3bb92b904fc79484c198354b750749577426b (diff) | |
download | scummvm-rg350-2f79090e46582bb41e036c19f06456a966436927.tar.gz scummvm-rg350-2f79090e46582bb41e036c19f06456a966436927.tar.bz2 scummvm-rg350-2f79090e46582bb41e036c19f06456a966436927.zip |
TSAGE: Added support for handling keypresses in the Game classes. Separated logic for full game versus demo into the respective Game classes.
-rw-r--r-- | engines/tsage/core.cpp | 47 | ||||
-rw-r--r-- | engines/tsage/ringworld_demo.cpp | 47 | ||||
-rw-r--r-- | engines/tsage/ringworld_demo.h | 3 | ||||
-rw-r--r-- | engines/tsage/ringworld_logic.cpp | 48 | ||||
-rw-r--r-- | engines/tsage/ringworld_logic.h | 1 | ||||
-rw-r--r-- | engines/tsage/scenes.h | 1 | ||||
-rw-r--r-- | engines/tsage/staticres.cpp | 3 | ||||
-rw-r--r-- | engines/tsage/staticres.h | 1 |
8 files changed, 106 insertions, 45 deletions
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 2f0536599a..7534abdec7 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -3481,52 +3481,11 @@ void SceneHandler::postInit(SceneObjectList *OwnerList) { void SceneHandler::process(Event &event) { // Main keypress handler - if ((event.eventType == EVENT_KEYPRESS) && !event.handled) { - switch (event.kbd.keycode) { - case Common::KEYCODE_F1: - // F1 - Help - MessageDialog::show((_vm->getFeatures() & GF_DEMO) ? DEMO_HELP_MSG : HELP_MSG, OK_BTN_STRING); - break; - - case Common::KEYCODE_F2: { - // F2 - Sound Options - ConfigDialog *dlg = new ConfigDialog(); - dlg->runModal(); - delete dlg; - _globals->_events.setCursorFromFlag(); - break; - } - - case Common::KEYCODE_F3: - // F3 - Quit - _globals->_game->quitGame(); - event.handled = false; - break; - - case Common::KEYCODE_F4: - // F4 - Restart - _globals->_game->restartGame(); - _globals->_events.setCursorFromFlag(); - break; - - case Common::KEYCODE_F7: - // F7 - Restore - _globals->_game->restoreGame(); - _globals->_events.setCursorFromFlag(); - break; + if (!event.handled) { + _globals->_game->processEvent(event); - case Common::KEYCODE_F10: - // F10 - Pause - GfxDialog::setPalette(); - MessageDialog::show(GAME_PAUSED_MSG, OK_BTN_STRING); + if (event.eventType == EVENT_KEYPRESS) _globals->_events.setCursorFromFlag(); - break; - - default: - break; - } - - _globals->_events.setCursorFromFlag(); } // Check for displaying right-click dialog diff --git a/engines/tsage/ringworld_demo.cpp b/engines/tsage/ringworld_demo.cpp index 6213ec42ce..3ad414fa20 100644 --- a/engines/tsage/ringworld_demo.cpp +++ b/engines/tsage/ringworld_demo.cpp @@ -54,6 +54,53 @@ void RingworldDemoGame::quitGame() { _vm->quitGame(); } +void RingworldDemoGame::pauseGame() { + _globals->_events.setCursor(CURSOR_ARROW); + MessageDialog *dlg = new MessageDialog(DEMO_PAUSED_MSG, EXIT_BTN_STRING, DEMO_RESUME_BTN_STRING); + dlg->draw(); + + GfxButton *selectedButton = dlg->execute(&dlg->_btn2); + bool exitFlag = selectedButton != &dlg->_btn2; + + delete dlg; + _globals->_events.hideCursor(); + + if (exitFlag) + _vm->quitGame(); +} + +void RingworldDemoGame::processEvent(Event &event) { + if (event.eventType == EVENT_KEYPRESS) { + switch (event.kbd.keycode) { + case Common::KEYCODE_F1: + // F1 - Help + MessageDialog::show(DEMO_HELP_MSG, OK_BTN_STRING); + break; + + case Common::KEYCODE_F2: { + // F2 - Sound Options + ConfigDialog *dlg = new ConfigDialog(); + dlg->runModal(); + delete dlg; + _globals->_events.setCursorFromFlag(); + break; + } + + case Common::KEYCODE_F3: + // F3 - Quit + quitGame(); + event.handled = false; + break; + + default: + break; + } + } else if (event.eventType == EVENT_BUTTON_DOWN) { + pauseGame(); + event.handled = true; + } +} + /*-------------------------------------------------------------------------- * Ringworld Demo scene * diff --git a/engines/tsage/ringworld_demo.h b/engines/tsage/ringworld_demo.h index 34bfb4f3b1..7492c1e871 100644 --- a/engines/tsage/ringworld_demo.h +++ b/engines/tsage/ringworld_demo.h @@ -32,10 +32,13 @@ namespace tSage { class RingworldDemoGame: public Game { +private: + void pauseGame(); public: virtual void start(); virtual Scene *createScene(int sceneNumber); virtual void quitGame(); + virtual void processEvent(Event &event); }; class RingworldDemoScene: public Scene { diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index a03c4081da..2141fcce5a 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -1421,4 +1421,52 @@ void RingworldGame::endGame(int resNum, int lineNum) { _globals->_events.setCursorFromFlag(); } +void RingworldGame::processEvent(Event &event) { + if (event.eventType == EVENT_KEYPRESS) { + switch (event.kbd.keycode) { + case Common::KEYCODE_F1: + // F1 - Help + MessageDialog::show(HELP_MSG, OK_BTN_STRING); + break; + + case Common::KEYCODE_F2: { + // F2 - Sound Options + ConfigDialog *dlg = new ConfigDialog(); + dlg->runModal(); + delete dlg; + _globals->_events.setCursorFromFlag(); + break; + } + + case Common::KEYCODE_F3: + // F3 - Quit + quitGame(); + event.handled = false; + break; + + case Common::KEYCODE_F4: + // F4 - Restart + restartGame(); + _globals->_events.setCursorFromFlag(); + break; + + case Common::KEYCODE_F7: + // F7 - Restore + restoreGame(); + _globals->_events.setCursorFromFlag(); + break; + + case Common::KEYCODE_F10: + // F10 - Pause + GfxDialog::setPalette(); + MessageDialog::show(GAME_PAUSED_MSG, OK_BTN_STRING); + _globals->_events.setCursorFromFlag(); + break; + + default: + break; + } + } +} + } // End of namespace tSage diff --git a/engines/tsage/ringworld_logic.h b/engines/tsage/ringworld_logic.h index 6fa92fa043..19b0f10b42 100644 --- a/engines/tsage/ringworld_logic.h +++ b/engines/tsage/ringworld_logic.h @@ -453,6 +453,7 @@ public: virtual void endGame(int resNum, int lineNum); virtual Scene *createScene(int sceneNumber); + virtual void processEvent(Event &event); }; } // End of namespace tSage diff --git a/engines/tsage/scenes.h b/engines/tsage/scenes.h index a5aacbacfa..b3c009c4fe 100644 --- a/engines/tsage/scenes.h +++ b/engines/tsage/scenes.h @@ -129,6 +129,7 @@ public: virtual void quitGame() {} virtual void endGame(int resNum, int lineNum) {} virtual Scene *createScene(int sceneNumber) = 0; + virtual void processEvent(Event &event) {} }; } // End of namespace tSage diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 851d1687b1..9f36268ce3 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -112,9 +112,10 @@ const char *SCENE6100_VERY_WELL = "Very well. I will retrieve the stasis box and Wait for it's return in the lander bay."; const char *DEMO_HELP_MSG = " Help...\rF2 - Sound Options\rF3 - Exit demo\r\rPress ENTER\rto continue"; -const char *DEMO_PAUSED_MSG = " demo is paused"; +const char *DEMO_PAUSED_MSG = "Ringworld\x14 demo is paused"; const char *DEMO_EXIT_MSG = "Press ENTER to resume the Ringworld\x14 demo. Press ESC to exit"; const char *EXIT_BTN_STRING = "Exit"; const char *DEMO_BTN_STRING = "Demo"; +const char *DEMO_RESUME_BTN_STRING = "Resume"; } // End of namespace tSage diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index d60e11add8..fa93511779 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -84,6 +84,7 @@ extern const char *DEMO_PAUSED_MSG; extern const char *DEMO_EXIT_MSG; extern const char *EXIT_BTN_STRING; extern const char *DEMO_BTN_STRING; +extern const char *DEMO_RESUME_BTN_STRING; } // End of namespace tSage |