aboutsummaryrefslogtreecommitdiff
path: root/engines/agi/text.cpp
diff options
context:
space:
mode:
authorMartin Kiewitz2016-02-03 01:32:57 +0100
committerMartin Kiewitz2016-02-03 01:32:57 +0100
commit8271058a4598e25096fe305f2c0beb7d2613e178 (patch)
tree15d09329fae16381d7d360e7a3981998771f34a7 /engines/agi/text.cpp
parent9fecbe58a1f99edc0dc067564e4fd53730faa933 (diff)
downloadscummvm-rg350-8271058a4598e25096fe305f2c0beb7d2613e178.tar.gz
scummvm-rg350-8271058a4598e25096fe305f2c0beb7d2613e178.tar.bz2
scummvm-rg350-8271058a4598e25096fe305f2c0beb7d2613e178.zip
AGI: Implement messageBox() as inner loop
Also remove _game.keypress, _game.msgBoxTicks
Diffstat (limited to 'engines/agi/text.cpp')
-rw-r--r--engines/agi/text.cpp59
1 files changed, 37 insertions, 22 deletions
diff --git a/engines/agi/text.cpp b/engines/agi/text.cpp
index cb172ea718..45c5fb05c4 100644
--- a/engines/agi/text.cpp
+++ b/engines/agi/text.cpp
@@ -71,6 +71,8 @@ TextMgr::TextMgr(AgiEngine *vm, Words *words, GfxMgr *gfx) {
_inputString[0] = 0;
configureScreen(2);
+
+ _messageBoxCancelled = false;
}
TextMgr::~TextMgr() {
@@ -348,40 +350,53 @@ bool TextMgr::messageBox(const char *textPtr) {
_vm->_noSaveLoadAllowed = true;
_vm->nonBlockingText_Forget();
- if (_vm->getVar(VM_VAR_WINDOW_RESET) == 0) {
- int userKey;
- userKey = _vm->waitKey();
- closeWindow();
-
- _vm->_noSaveLoadAllowed = false;
- if (userKey == AGI_KEY_ENTER)
- return true;
- return false;
- }
-
// timed window
- debugC(3, kDebugLevelText, "f15==0, v21==%d => timed", _vm->getVar(VM_VAR_WINDOW_RESET));
- _vm->_game.msgBoxTicks = _vm->getVar(VM_VAR_WINDOW_RESET) * 10;
+ uint32 windowTimer = _vm->getVar(VM_VAR_WINDOW_RESET);
+ debugC(3, kDebugLevelText, "blocking window v21=%d", windowTimer);
- do {
- if (_vm->getFlag(VM_FLAG_RESTORE_JUST_RAN))
- break;
+ windowTimer = windowTimer * 10; // 1 = 0.5 seconds
+ _messageBoxCancelled = false;
+ _vm->inGameTimerResetPassedCycles();
+ _vm->cycleInnerLoopActive(CYCLE_INNERLOOP_MESSAGEBOX);
+ do {
_vm->mainCycle();
- if (_vm->_game.keypress == AGI_KEY_ENTER) {
- debugC(4, kDebugLevelText, "KEY_ENTER");
- _vm->setVar(VM_VAR_WINDOW_RESET, 0);
- _vm->_game.keypress = 0;
- break;
+ _vm->inGameTimerUpdate();
+
+ if (windowTimer > 0) {
+ if (_vm->inGameTimerGetPassedCycles() >= windowTimer) {
+ // Timer reached, close automatically
+ _vm->cycleInnerLoopInactive();
+ }
}
- } while (_vm->_game.msgBoxTicks > 0 && !(_vm->shouldQuit() || _vm->_restartGame));
+ } while (_vm->cycleInnerLoopIsActive() && !(_vm->shouldQuit() || _vm->_restartGame));
+
+ _vm->inGameTimerResetPassedCycles();
_vm->setVar(VM_VAR_WINDOW_RESET, 0);
+
closeWindow();
_vm->_noSaveLoadAllowed = false;
+
+ if (_messageBoxCancelled)
+ return false;
return true;
}
+void TextMgr::messageBox_CharPress(uint16 newKey) {
+ switch (newKey) {
+ case AGI_KEY_ENTER:
+ _vm->cycleInnerLoopInactive(); // exit messagebox-loop
+ break;
+ case AGI_KEY_ESCAPE:
+ _messageBoxCancelled = true;
+ _vm->cycleInnerLoopInactive(); // exit messagebox-loop
+ break;
+ default:
+ break;
+ }
+}
+
void TextMgr::drawMessageBox(const char *textPtr, int16 wantedHeight, int16 wantedWidth, bool wantedForced) {
int16 maxWidth = wantedWidth;
int16 startingRow = 0;