From 813e3d1aac7c9384780db6927a6bf100b56d5dd9 Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Sat, 27 May 2006 13:33:27 +0000 Subject: 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 --- engines/kyra/text.cpp | 46 +++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 21 deletions(-) (limited to 'engines/kyra/text.cpp') 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); -- cgit v1.2.3