aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThierry Crozat2017-11-05 01:14:59 +0000
committerThierry Crozat2018-01-23 02:15:37 +0000
commitbd6cdf4ba22393d254de6b656edf7d33441fa704 (patch)
tree52ac331f746b33eaac0d61751306256e5d261479
parent7bf803f6e677b9b8bf29caf55f9c211cfe175c1b (diff)
downloadscummvm-rg350-bd6cdf4ba22393d254de6b656edf7d33441fa704.tar.gz
scummvm-rg350-bd6cdf4ba22393d254de6b656edf7d33441fa704.tar.bz2
scummvm-rg350-bd6cdf4ba22393d254de6b656edf7d33441fa704.zip
SUPERNOVA: Handle events during dialogs
-rw-r--r--engines/supernova/rooms.cpp16
-rw-r--r--engines/supernova/state.cpp53
-rw-r--r--engines/supernova/state.h2
3 files changed, 41 insertions, 30 deletions
diff --git a/engines/supernova/rooms.cpp b/engines/supernova/rooms.cpp
index eef4d16801..9c503a818f 100644
--- a/engines/supernova/rooms.cpp
+++ b/engines/supernova/rooms.cpp
@@ -742,10 +742,10 @@ void ShipSleepCabin::animation() {
void ShipSleepCabin::onEntrance() {
if (_gm->_state._dream && (_gm->_rooms[CAVE]->getObject(1)->_exitRoom == MEETUP3)) {
_vm->renderMessage(kStringShipSleepCabin14);
- _gm->mouseWait(_gm->_timer1);
+ _gm->waitOnInput(_gm->_timer1);
_vm->removeMessage();
_vm->renderMessage(kStringShipSleepCabin15);
- _gm->mouseWait(_gm->_timer1);
+ _gm->waitOnInput(_gm->_timer1);
_vm->removeMessage();
_vm->renderMessage(kStringShipSleepCabin16);
_gm->_state._dream = false;
@@ -1710,7 +1710,7 @@ bool ArsanoEntrance::interact(Action verb, Object &obj1, Object &obj2) {
_vm->renderMessage(kStringArsanoEntrance20);
else {
_vm->renderMessage(kStringArsanoEntrance21);
- _gm->mouseWait(_gm->_timer1);
+ _gm->waitOnInput(_gm->_timer1);
_vm->removeMessage();
_vm->renderMessage(kStringArsanoEntrance22);
_gm->takeObject(*getObject(16));
@@ -1757,7 +1757,7 @@ bool ArsanoEntrance::interact(Action verb, Object &obj1, Object &obj2) {
getObject(4)->setProperty(WORN);
getObject(5)->setProperty(WORN);
getObject(6)->setProperty(WORN);
- _gm->mouseWait(_gm->_timer1);
+ _gm->waitOnInput(_gm->_timer1);
_vm->removeMessage();
}
return false;
@@ -2029,7 +2029,7 @@ bool ArsanoRoger::interact(Action verb, Object &obj1, Object &obj2) {
_vm->_menuBrightness = 255;
_vm->paletteBrightness();
_vm->renderMessage(kStringArsanoRoger39);
- _gm->mouseWait(_gm->_timer1);
+ _gm->waitOnInput(_gm->_timer1);
_vm->removeMessage();
_vm->_menuBrightness = 0;
_vm->paletteBrightness();
@@ -2048,7 +2048,7 @@ bool ArsanoRoger::interact(Action verb, Object &obj1, Object &obj2) {
getObject(6)->_click = 7;
_vm->paletteFadeIn();
_vm->renderMessage(kStringArsanoRoger40);
- _gm->mouseWait(_gm->_timer1);
+ _gm->waitOnInput(_gm->_timer1);
_vm->removeMessage();
} else
return false;
@@ -2224,7 +2224,7 @@ bool ArsanoMeetup2::interact(Action verb, Object &obj1, Object &obj2) {
_gm->wait2(18);
_vm->renderMessage(kStringArsanoMeetup2_12);
_gm->great(0);
- _gm->mouseWait(_gm->_timer1);
+ _gm->waitOnInput(_gm->_timer1);
_vm->removeMessage();
_vm->paletteFadeOut();
g_system->fillScreen(kColorBlack);
@@ -3070,7 +3070,7 @@ bool AxacussElevator::interact(Action verb, Object &obj1, Object &obj2) {
_vm->_menuBrightness = 255;
_vm->paletteBrightness();
_vm->renderMessage(kStringAxacussElevator_3);
- _gm->mouseWait(_gm->_timer1);
+ _gm->waitOnInput(_gm->_timer1);
_vm->removeMessage();
_vm->_menuBrightness = 0;
_vm->paletteBrightness();
diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp
index d3ab297417..0b569e4fc3 100644
--- a/engines/supernova/state.cpp
+++ b/engines/supernova/state.cpp
@@ -821,7 +821,7 @@ void GameManager::say(const char *text) {
_vm->renderBox(0, 141, 320, numRows * 10 - 1, kColorWhite25);
for (int r = 0; r < numRows; ++r)
_vm->renderText(row[r], 1, 142 + r * 10, kColorDarkGreen);
- mouseWait((t.size() + 20) * _vm->_textSpeed / 10);
+ waitOnInput((t.size() + 20) * _vm->_textSpeed / 10);
_vm->renderBox(0, 138, 320, 62, kColorBlack);
}
@@ -837,12 +837,12 @@ void GameManager::reply(const char *text, int aus1, int aus2) {
for (int z = (strlen(text) + 20) * _vm->_textSpeed / 40; z > 0; --z) {
drawImage(aus1);
- mouseWait(2);
- if (_keyPressed) // ?? origin: key != -1, need to check what mouseWait does...
+ waitOnInput(2);
+ if (_keyPressed || _mouseClicked)
z = 1;
drawImage(aus2);
- mouseWait(2);
- if (_keyPressed)
+ waitOnInput(2);
+ if (_keyPressed || _mouseClicked)
z = 1;
}
if (*text != '|')
@@ -876,10 +876,12 @@ int GameManager::dialog(int num, byte rowLength[6], StringID text[6], int number
rq += rowLength[i];
}
+ _guiEnabled = false;
_currentSentence = -1;
do {
mouseInput3();
- } while (_currentSentence == -1);
+ } while (_currentSentence == -1 && !_vm->shouldQuit());
+ _guiEnabled = true;
_vm->renderBox(0, 138, 320, 62, kColorBlack);
@@ -1012,33 +1014,33 @@ uint16 GameManager::getKeyInput(bool blockForPrintChar) {
}
Common::EventType GameManager::getMouseInput() {
- while (true) {
+ while (!_vm->shouldQuit()) {
_vm->updateEvents();
- if (_mouseClicked) {
+ if (_mouseClicked)
return _mouseClickType;
- }
g_system->updateScreen();
g_system->delayMillis(_vm->_delay);
}
+ return Common::EVENT_INVALID;
}
void GameManager::getInput() {
while (true) {
_vm->updateEvents();
- if (_mouseClicked || _keyPressed) {
+ if (_mouseClicked || _keyPressed)
break;
- }
g_system->updateScreen();
g_system->delayMillis(_vm->_delay);
}
}
-// TODO: Unify mouseInput3 and mouseWait with getMouseInput
void GameManager::mouseInput3() {
- // STUB
-}
-void GameManager::mouseWait(int delay) {
- // STUB
+ do {
+ _vm->updateEvents();
+ mousePosDialog(_mouseX, _mouseY);
+ g_system->updateScreen();
+ g_system->delayMillis(_vm->_delay);
+ } while (!_mouseClicked && !_vm->shouldQuit());
}
void GameManager::roomBrightness() {
@@ -1086,7 +1088,16 @@ void GameManager::wait2(int ticks) {
g_system->delayMillis(_vm->_delay);
_vm->updateEvents();
g_system->updateScreen();
- } while (_state._time < end);
+ } while (_state._time < end && !_vm->shouldQuit());
+}
+
+void GameManager::waitOnInput(int ticks) {
+ int32 end = _state._time + ticksToMsec(ticks);
+ do {
+ g_system->delayMillis(_vm->_delay);
+ _vm->updateEvents();
+ g_system->updateScreen();
+ } while (_state._time < end && !_vm->shouldQuit() && !_keyPressed && !_mouseClicked);
}
bool GameManager::waitOnInput(int ticks, Common::KeyCode &keycode) {
@@ -1102,7 +1113,7 @@ bool GameManager::waitOnInput(int ticks, Common::KeyCode &keycode) {
return true;
} else if (_mouseClicked)
return true;
- } while (_state._time < end);
+ } while (_state._time < end && !_vm->shouldQuit());
return false;
}
@@ -1440,10 +1451,10 @@ bool GameManager::genericInteract(Action verb, Object &obj1, Object &obj2) {
}
} else if ((verb == ACTION_LOOK) && (obj1._id == NEWSPAPER)) {
_vm->renderMessage(kStringGenericInteract_10);
- mouseWait(_timer1);
+ waitOnInput(_timer1);
_vm->removeMessage();
_vm->renderMessage(kStringGenericInteract_11);
- mouseWait(_timer1);
+ waitOnInput(_timer1);
_vm->removeMessage();
_vm->renderImage(2, 0);
_vm->setColor63(40);
@@ -1648,7 +1659,7 @@ bool GameManager::genericInteract(Action verb, Object &obj1, Object &obj2) {
_vm->renderMessage(kStringGenericInteract_30);
else if ((verb == ACTION_LOOK) && (obj1._id == BOOK2)) {
_vm->renderMessage(kStringGenericInteract_31);
- mouseWait(_timer1);
+ waitOnInput(_timer1);
_vm->removeMessage();
_vm->renderMessage(kStringGenericInteract_32);
} else {
diff --git a/engines/supernova/state.h b/engines/supernova/state.h
index 8b904d18a3..b67622ecdc 100644
--- a/engines/supernova/state.h
+++ b/engines/supernova/state.h
@@ -154,8 +154,8 @@ public:
uint16 getKeyInput(bool blockForPrintChar = false);
void getInput();
void mouseInput3();
- void mouseWait(int delay);
void wait2(int ticks);
+ void waitOnInput(int ticks);
bool waitOnInput(int ticks, Common::KeyCode &keycode);
void turnOff();
void turnOn();