aboutsummaryrefslogtreecommitdiff
path: root/common/EventMapper.cpp
diff options
context:
space:
mode:
authorTarek Soliman2012-03-01 06:29:44 -0600
committerTarek Soliman2012-03-02 20:48:50 -0600
commitc0a215282d12872cf32fb24f9067216c0f869b96 (patch)
treef55b1c3591ebc7c094b78c32f3d714d45e942da7 /common/EventMapper.cpp
parentd12f21b31db2985faeb2e2a6b9b09cd210f82c34 (diff)
downloadscummvm-rg350-c0a215282d12872cf32fb24f9067216c0f869b96.tar.gz
scummvm-rg350-c0a215282d12872cf32fb24f9067216c0f869b96.tar.bz2
scummvm-rg350-c0a215282d12872cf32fb24f9067216c0f869b96.zip
KEYMAPPER: Add delays for *UP events coming from non-keys
Delayed entries are in a queue where each entry stores how many milliseconds should pass based on the last entry.
Diffstat (limited to 'common/EventMapper.cpp')
-rw-r--r--common/EventMapper.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/common/EventMapper.cpp b/common/EventMapper.cpp
index 0771ecdd89..47db61e472 100644
--- a/common/EventMapper.cpp
+++ b/common/EventMapper.cpp
@@ -21,6 +21,8 @@
*/
#include "common/events.h"
+
+#include "common/system.h"
#include "common/textconsole.h"
namespace Common {
@@ -61,4 +63,30 @@ List<Event> DefaultEventMapper::mapEvent(const Event &ev, EventSource *source) {
}
+void DefaultEventMapper::addDelayedEvent(uint32 millis, Event ev) {
+ if (_delayedEvents.empty()) {
+ _delayedEffectiveTime = g_system->getMillis() + millis;
+ millis = 0;
+ }
+ DelayedEventsEntry entry = DelayedEventsEntry(millis, ev);
+ _delayedEvents.push(entry);
+}
+
+List<Event> DefaultEventMapper::getDelayedEvents() {
+ List<Event> events;
+
+ if (_delayedEvents.empty())
+ return events;
+
+ uint32 now = g_system->getMillis();
+
+ while (!_delayedEvents.empty() && now >= _delayedEffectiveTime) {
+ DelayedEventsEntry entry = _delayedEvents.pop();
+ if (!_delayedEvents.empty())
+ _delayedEffectiveTime += _delayedEvents.front().timerOffset;
+ events.push_back(entry.event);
+ }
+ return events;
+}
+
} // namespace Common