diff options
| -rw-r--r-- | sword2/sword2.cpp | 13 | ||||
| -rw-r--r-- | sword2/sword2.h | 1 |
2 files changed, 14 insertions, 0 deletions
diff --git a/sword2/sword2.cpp b/sword2/sword2.cpp index 9daced6548..06363f51f5 100644 --- a/sword2/sword2.cpp +++ b/sword2/sword2.cpp @@ -132,6 +132,7 @@ Sword2Engine::Sword2Engine(GameDetector *detector, OSystem *syst) : Engine(syst) _debugger = NULL; _keyboardEvent.pending = false; + _keyboardEvent.repeat = 0; _mouseEvent.pending = false; _wantSfxDebug = false; @@ -475,17 +476,23 @@ uint32 Sword2Engine::setEventFilter(uint32 filter) { void Sword2Engine::parseEvents() { OSystem::Event event; + + uint32 now = _system->getMillis(); while (_system->pollEvent(event)) { switch (event.type) { case OSystem::EVENT_KEYDOWN: if (!(_eventFilter & RD_KEYDOWN)) { _keyboardEvent.pending = true; + _keyboardEvent.repeat = now + 400; _keyboardEvent.ascii = event.kbd.ascii; _keyboardEvent.keycode = event.kbd.keycode; _keyboardEvent.modifiers = event.kbd.flags; } break; + case OSystem::EVENT_KEYUP: + _keyboardEvent.repeat = 0; + break; case OSystem::EVENT_MOUSEMOVE: if (!(_eventFilter & RD_KEYDOWN)) { _mouse->setPos(event.mouse.x, event.mouse.y - MENUDEEP); @@ -534,6 +541,12 @@ void Sword2Engine::parseEvents() { break; } } + + // Handle keyboard auto-repeat + if (!_keyboardEvent.pending && _keyboardEvent.repeat && now >= _keyboardEvent.repeat) { + _keyboardEvent.pending = true; + _keyboardEvent.repeat = now + 100; + } } void Sword2Engine::gameCycle() { diff --git a/sword2/sword2.h b/sword2/sword2.h index afa0a2a5b2..ffbe086b24 100644 --- a/sword2/sword2.h +++ b/sword2/sword2.h @@ -78,6 +78,7 @@ struct MouseEvent { struct KeyboardEvent { bool pending; + uint32 repeat; uint16 ascii; int keycode; int modifiers; |
