diff options
-rw-r--r-- | src/jake2/sys/LWJGLKBD.java | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/jake2/sys/LWJGLKBD.java b/src/jake2/sys/LWJGLKBD.java index 2cb8e27..cdcfcca 100644 --- a/src/jake2/sys/LWJGLKBD.java +++ b/src/jake2/sys/LWJGLKBD.java @@ -1,6 +1,7 @@ package jake2.sys; import jake2.Defines; +import jake2.Globals; import jake2.client.Key; import jake2.qcommon.Cbuf; @@ -14,6 +15,7 @@ import org.lwjgl.opengl.Display; public class LWJGLKBD extends KBD { private char[] lwjglKeycodeMap = null; + private int pressed[] = null; private boolean mouseHasTwoButtons = false; @@ -29,9 +31,11 @@ public class LWJGLKBD extends KBD { if (!Mouse.isBuffered()) Mouse.enableBuffer(); if (lwjglKeycodeMap == null) lwjglKeycodeMap = new char[256]; + if (pressed == null) pressed = new int[256]; mouseHasTwoButtons = (Mouse.getButtonCount() == 2); + lastRepeat = Sys.Milliseconds(); } catch (Exception e) {;} } @@ -45,6 +49,7 @@ public class LWJGLKBD extends KBD { Mouse.destroy(); // free the memory for GC lwjglKeycodeMap = null; + pressed = null; } private void HandleEvents() @@ -65,11 +70,18 @@ public class LWJGLKBD extends KBD { // fill the character translation table // this is needed because the getEventCharacter() returns \0 if a key is released // keycode is correct but the charachter value is not - if (down) lwjglKeycodeMap[key] = ch; - + if (down) { + lwjglKeycodeMap[key] = ch; + pressed[key] = Globals.sys_frame_time; + } else { + pressed[key] = 0; + } + Do_Key_Event(XLateKey(key,ch), down); } + generateRepeats(); + if (IN.mouse_active) { mx = Mouse.getDX() << 1; @@ -98,6 +110,18 @@ public class LWJGLKBD extends KBD { } } + private static int lastRepeat; + private void generateRepeats() { + int time = Globals.sys_frame_time; + if (time - lastRepeat > 50) { + for (int i = 0; i < pressed.length; i++) { + if (pressed[i] > 0 && time - pressed[i] > 500) + Do_Key_Event(XLateKey(i, lwjglKeycodeMap[i]), true); + } + lastRepeat = time; + } + } + private int XLateKey(int code, int ch) { int key = 0; |