aboutsummaryrefslogtreecommitdiff
path: root/engines/startrek/events.cpp
diff options
context:
space:
mode:
authorMatthew Stewart2018-05-16 19:31:45 -0400
committerEugene Sandulenko2018-08-09 08:37:30 +0200
commitedcc80393ab6be8dc946b99d7fdc5132cdbfaaa9 (patch)
tree70b5f252b856561d21eb2c1302bc6989459cd6d1 /engines/startrek/events.cpp
parent01970f43dfa90159be82cbcf4828c4bc88e8901f (diff)
downloadscummvm-rg350-edcc80393ab6be8dc946b99d7fdc5132cdbfaaa9.tar.gz
scummvm-rg350-edcc80393ab6be8dc946b99d7fdc5132cdbfaaa9.tar.bz2
scummvm-rg350-edcc80393ab6be8dc946b99d7fdc5132cdbfaaa9.zip
STARTREK: Tweak events to update mouse more often
Diffstat (limited to 'engines/startrek/events.cpp')
-rw-r--r--engines/startrek/events.cpp108
1 files changed, 59 insertions, 49 deletions
diff --git a/engines/startrek/events.cpp b/engines/startrek/events.cpp
index 58c2666c7b..b80659c315 100644
--- a/engines/startrek/events.cpp
+++ b/engines/startrek/events.cpp
@@ -23,67 +23,77 @@
namespace StarTrek {
+/**
+ * Doesn't return until an event occurs.
+ */
void StarTrekEngine::pollSystemEvents() {
Common::Event event;
TrekEvent trekEvent;
- while (_eventMan->pollEvent(event)) {
- trekEvent.mouse = event.mouse;
- trekEvent.kbd = event.kbd;
-
- switch (event.type) {
- case Common::EVENT_QUIT:
- _system->quit();
- break;
-
- case Common::EVENT_MOUSEMOVE:
- trekEvent.type = TREKEVENT_MOUSEMOVE;
- addEventToQueue(trekEvent);
- break;
-
- case Common::EVENT_LBUTTONDOWN:
- // TODO: what happens when mouse click is outside normal screen bounds?
- // (apparently this can happen)
- trekEvent.type = TREKEVENT_LBUTTONDOWN;
- addEventToQueue(trekEvent);
- break;
-
- case Common::EVENT_RBUTTONDOWN:
- trekEvent.type = TREKEVENT_RBUTTONDOWN;
- addEventToQueue(trekEvent);
- break;
-
- case Common::EVENT_KEYDOWN:
- trekEvent.type = TREKEVENT_KEYDOWN;
- addEventToQueue(trekEvent);
- break;
-
- default:
- break;
+ while (_eventQueue.empty()) {
+ while (_eventMan->pollEvent(event)) {
+ trekEvent.mouse = event.mouse;
+ trekEvent.kbd = event.kbd;
+
+ switch (event.type) {
+ case Common::EVENT_QUIT:
+ _system->quit();
+ break;
+
+ case Common::EVENT_MOUSEMOVE:
+ trekEvent.type = TREKEVENT_MOUSEMOVE;
+ addEventToQueue(trekEvent);
+
+ // WORKAROUND: this improves the responsiveness of the mouse.
+ _system->updateScreen();
+ break;
+
+ case Common::EVENT_LBUTTONDOWN:
+ // TODO: what happens when mouse click is outside normal screen bounds?
+ // (apparently this can happen)
+ trekEvent.type = TREKEVENT_LBUTTONDOWN;
+ addEventToQueue(trekEvent);
+ break;
+
+ case Common::EVENT_RBUTTONDOWN:
+ trekEvent.type = TREKEVENT_RBUTTONDOWN;
+ addEventToQueue(trekEvent);
+ break;
+
+ case Common::EVENT_KEYDOWN:
+ trekEvent.type = TREKEVENT_KEYDOWN;
+ addEventToQueue(trekEvent);
+ break;
+
+ default:
+ break;
+ }
}
- }
- // TODO: check for events other than "tick" more often.
- if (_eventQueue.empty()) {
- int delay = 1000/18.206 - (_system->getMillis() - _frameStartMillis);
+ // Check for tick event
+ uint nextFrame = _frameStartMillis + 1000 / 18.206;
- _clockTicks++;
- if (delay < 0)
- debug(5, "Late frame");
- while (delay < 0) { // Check if we're behind...
- delay += 1000/18.206;
+ if (_system->getMillis() >= nextFrame) {
_clockTicks++;
+
+ _frameStartMillis = _system->getMillis();
+
+ TrekEvent tickEvent;
+ tickEvent.type = TREKEVENT_TICK;
+ tickEvent.tick = _clockTicks;
+ addEventToQueue(tickEvent);
}
- _system->delayMillis(delay);
- _frameStartMillis = _system->getMillis();
+ if (!_eventQueue.empty())
+ break;
- TrekEvent tickEvent;
- tickEvent.type = TREKEVENT_TICK;
- tickEvent.tick = _clockTicks;
- addEventToQueue(tickEvent);
+ // Wait a 60th of a second before checking for events again
+ uint delay = 1000 / 60;
+ if (_system->getMillis() + delay > nextFrame)
+ delay = nextFrame - _system->getMillis();
+ if (delay > 0)
+ _system->delayMillis(delay);
}
-
}
void StarTrekEngine::initializeEventsAndMouse() {