aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/text.cpp
diff options
context:
space:
mode:
authorTorbjörn Andersson2006-05-27 13:33:27 +0000
committerTorbjörn Andersson2006-05-27 13:33:27 +0000
commit813e3d1aac7c9384780db6927a6bf100b56d5dd9 (patch)
treecb868d53e806cf766c5e9b6d318c615bd7bdda33 /engines/kyra/text.cpp
parent0993c6a712fa76cd2cd43a066489781dece7161a (diff)
downloadscummvm-rg350-813e3d1aac7c9384780db6927a6bf100b56d5dd9.tar.gz
scummvm-rg350-813e3d1aac7c9384780db6927a6bf100b56d5dd9.tar.bz2
scummvm-rg350-813e3d1aac7c9384780db6927a6bf100b56d5dd9.zip
Maintain the same screen update frequency while waiting for speech to finish.
This should take care of half of bug #1494934. The other half was fixed in the SDL backend earlier. svn-id: r22683
Diffstat (limited to 'engines/kyra/text.cpp')
-rw-r--r--engines/kyra/text.cpp46
1 files changed, 25 insertions, 21 deletions
diff --git a/engines/kyra/text.cpp b/engines/kyra/text.cpp
index 8a84bbe909..8bb946cf37 100644
--- a/engines/kyra/text.cpp
+++ b/engines/kyra/text.cpp
@@ -38,7 +38,6 @@ void KyraEngine::waitForChatToFinish(int16 chatDuration, const char *chatStr, ui
bool runLoop = true;
uint8 currPage;
OSystem::Event event;
- int16 delayTime;
//while( towns_isEscKeyPressed() )
//towns_getKey();
@@ -106,30 +105,35 @@ void KyraEngine::waitForChatToFinish(int16 chatDuration, const char *chatStr, ui
if ((chatDuration < (int16)(_system->getMillis() - timeAtStart)) && chatDuration != -1)
break;
- while (_system->pollEvent(event)) {
- switch (event.type) {
- case OSystem::EVENT_KEYDOWN:
- if (event.kbd.keycode == '.')
- _skipFlag = true;
- break;
- case OSystem::EVENT_QUIT:
- quitGame();
- runLoop = false;
- break;
- case OSystem::EVENT_LBUTTONDOWN:
- runLoop = false;
- break;
- default:
- break;
+ uint32 nextTime = loopStart + _gameSpeed;
+
+ while (_system->getMillis() < nextTime) {
+ while (_system->pollEvent(event)) {
+ switch (event.type) {
+ case OSystem::EVENT_KEYDOWN:
+ if (event.kbd.keycode == '.')
+ _skipFlag = true;
+ break;
+ case OSystem::EVENT_QUIT:
+ quitGame();
+ runLoop = false;
+ break;
+ case OSystem::EVENT_LBUTTONDOWN:
+ runLoop = false;
+ break;
+ default:
+ break;
+ }
}
- }
+ if (nextTime - _system->getMillis() >= 10) {
+ _system->delayMillis(10);
+ _system->updateScreen();
+ }
+ }
+
if (_skipFlag)
runLoop = false;
-
- delayTime = (loopStart + _gameSpeed) - _system->getMillis();
- if (delayTime > 0)
- _system->delayMillis(delayTime);
}
enableTimer(14);