From b8ad1ce140c91257ba79fe50f41da34a5a6e74c2 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 18 Mar 2015 19:02:17 -0400 Subject: SHERLOCK: Make random pixel transitions more like the original --- engines/sherlock/events.cpp | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) (limited to 'engines/sherlock/events.cpp') diff --git a/engines/sherlock/events.cpp b/engines/sherlock/events.cpp index c6c013193c..b2d9fc65e8 100644 --- a/engines/sherlock/events.cpp +++ b/engines/sherlock/events.cpp @@ -166,18 +166,32 @@ void EventsManager::wait(int numFrames) { } bool EventsManager::delay(uint32 time, bool interruptable) { - uint32 delayEnd = g_system->getMillis() + time; - - while (!_vm->shouldQuit() && g_system->getMillis() < delayEnd) { - pollEventsAndWait(); - - if (interruptable && (isKeyPressed() || _mouseClicked)) { - clearEvents(); - return false; + // Different handling for really short versus extended times + if (time < 10) { + // For really short periods, simply delay by the desired amount + pollEvents(); + g_system->delayMillis(time); + bool result = !(interruptable && (isKeyPressed() || _mouseClicked)); + + clearEvents(); + return result; + } else { + // For long periods go into a loop where we delay by 10ms at a time and then + // check for events. This ensures for longer delays that responsiveness is + // maintained + uint32 delayEnd = g_system->getMillis() + time; + + while (!_vm->shouldQuit() && g_system->getMillis() < delayEnd) { + pollEventsAndWait(); + + if (interruptable && (isKeyPressed() || _mouseClicked)) { + clearEvents(); + return false; + } } - } - return true; + return true; + } } /** -- cgit v1.2.3