aboutsummaryrefslogtreecommitdiff
path: root/engines/sherlock/events.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2015-03-18 19:02:17 -0400
committerPaul Gilbert2015-03-18 19:02:17 -0400
commitb8ad1ce140c91257ba79fe50f41da34a5a6e74c2 (patch)
tree72d3aeddfa430c575bfa313b52a8040ffa0e82d9 /engines/sherlock/events.cpp
parent62f3f5d14e391cdac0bbfe200cdde2e4773afba4 (diff)
downloadscummvm-rg350-b8ad1ce140c91257ba79fe50f41da34a5a6e74c2.tar.gz
scummvm-rg350-b8ad1ce140c91257ba79fe50f41da34a5a6e74c2.tar.bz2
scummvm-rg350-b8ad1ce140c91257ba79fe50f41da34a5a6e74c2.zip
SHERLOCK: Make random pixel transitions more like the original
Diffstat (limited to 'engines/sherlock/events.cpp')
-rw-r--r--engines/sherlock/events.cpp34
1 files changed, 24 insertions, 10 deletions
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;
+ }
}
/**