aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/agos/agos.cpp2
-rw-r--r--engines/agos/agos.h2
-rw-r--r--engines/agos/event.cpp12
3 files changed, 16 insertions, 0 deletions
diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp
index e7147ef269..8003c2843c 100644
--- a/engines/agos/agos.cpp
+++ b/engines/agos/agos.cpp
@@ -81,6 +81,8 @@ AGOSEngine::AGOSEngine(OSystem *syst)
_debugger = 0;
_keyPressed = 0;
+ _keyRepeatKey = 0;
+ _keyRepeatTime = 0;
_gameFile = 0;
diff --git a/engines/agos/agos.h b/engines/agos/agos.h
index ecc12c2ad4..043ab9709b 100644
--- a/engines/agos/agos.h
+++ b/engines/agos/agos.h
@@ -213,6 +213,8 @@ protected:
const GameSpecificSettings *gss;
byte _keyPressed;
+ byte _keyRepeatKey;
+ uint32 _keyRepeatTime;
typedef enum {
FORMAT_NONE,
diff --git a/engines/agos/event.cpp b/engines/agos/event.cpp
index 1f083d23dd..37a72db995 100644
--- a/engines/agos/event.cpp
+++ b/engines/agos/event.cpp
@@ -369,6 +369,13 @@ void AGOSEngine::delay(uint amount) {
_keyPressed = 8;
else
_keyPressed = (byte)event.kbd.ascii;
+
+ _keyRepeatTime = _system->getMillis() + 400;
+ _keyRepeatKey = _keyPressed;
+ break;
+ case OSystem::EVENT_KEYUP:
+ _keyRepeatKey = 0;
+ _keyRepeatTime = 0;
break;
case OSystem::EVENT_MOUSEMOVE:
_sdlMouseX = event.mouse.x;
@@ -420,6 +427,11 @@ void AGOSEngine::delay(uint amount) {
cur = _system->getMillis();
} while (cur < start + amount);
+
+ if (_keyPressed == 0 && _keyRepeatKey != 0 && _keyRepeatTime != 0 && cur >= _keyRepeatTime) {
+ _keyPressed = _keyRepeatKey;
+ _keyRepeatTime = cur + 100;
+ }
}
void AGOSEngine::timer_callback() {