From a78f8735904f8a2d877e15f4df6680248aec7662 Mon Sep 17 00:00:00 2001 From: Sen Date: Tue, 18 Mar 2025 11:02:39 +0100 Subject: [PATCH] key codes --- java/src/game/window/Keysym.java | 240 ++++++++++++++++--------------- java/src/game/window/Window.java | 129 +---------------- 2 files changed, 131 insertions(+), 238 deletions(-) diff --git a/java/src/game/window/Keysym.java b/java/src/game/window/Keysym.java index 880dea5..0e9ffe8 100644 --- a/java/src/game/window/Keysym.java +++ b/java/src/game/window/Keysym.java @@ -1,130 +1,146 @@ package game.window; +import static org.lwjgl.glfw.GLFW.*; + public enum Keysym implements Input { - N0('0'), - N1('1'), - N2('2'), - N3('3'), - N4('4'), - N5('5'), - N6('6'), - N7('7'), - N8('8'), - N9('9'), + N0('0', GLFW_KEY_0), + N1('1', GLFW_KEY_1), + N2('2', GLFW_KEY_2), + N3('3', GLFW_KEY_3), + N4('4', GLFW_KEY_4), + N5('5', GLFW_KEY_5), + N6('6', GLFW_KEY_6), + N7('7', GLFW_KEY_7), + N8('8', GLFW_KEY_8), + N9('9', GLFW_KEY_9), - A('a'), - B('b'), - C('c'), - D('d'), - E('e'), - F('f'), - G('g'), - H('h'), - I('i'), - J('j'), - K('k'), - L('l'), - M('m'), - N('n'), - O('o'), - P('p'), - Q('q'), - R('r'), - S('s'), - T('t'), - U('u'), - V('v'), - W('w'), - X('x'), - Y('y'), - Z('z'), + A('a', GLFW_KEY_A), + B('b', GLFW_KEY_B), + C('c', GLFW_KEY_C), + D('d', GLFW_KEY_D), + E('e', GLFW_KEY_E), + F('f', GLFW_KEY_F), + G('g', GLFW_KEY_G), + H('h', GLFW_KEY_H), + I('i', GLFW_KEY_I), + J('j', GLFW_KEY_J), + K('k', GLFW_KEY_K), + L('l', GLFW_KEY_L), + M('m', GLFW_KEY_M), + N('n', GLFW_KEY_N), + O('o', GLFW_KEY_O), + P('p', GLFW_KEY_P), + Q('q', GLFW_KEY_Q), + R('r', GLFW_KEY_R), + S('s', GLFW_KEY_S), + T('t', GLFW_KEY_T), + U('u', GLFW_KEY_U), + V('v', GLFW_KEY_V), + W('w', GLFW_KEY_W), + X('x', GLFW_KEY_X), + Y('y', GLFW_KEY_Z), + Z('z', GLFW_KEY_Y), - F1("f1", "F1"), - F2("f2", "F2"), - F3("f3", "F3"), - F4("f4", "F4"), - F5("f5", "F5"), - F6("f6", "F6"), - F7("f7", "F7"), - F8("f8", "F8"), - F9("f9", "F9"), - F10("f10", "F10"), - F11("f11", "F11"), - F12("f12", "F12"), + F1("f1", "F1", GLFW_KEY_F1), + F2("f2", "F2", GLFW_KEY_F2), + F3("f3", "F3", GLFW_KEY_F3), + F4("f4", "F4", GLFW_KEY_F4), + F5("f5", "F5", GLFW_KEY_F5), + F6("f6", "F6", GLFW_KEY_F6), + F7("f7", "F7", GLFW_KEY_F7), + F8("f8", "F8", GLFW_KEY_F8), + F9("f9", "F9", GLFW_KEY_F9), + F10("f10", "F10", GLFW_KEY_F10), + F11("f11", "F11", GLFW_KEY_F11), + F12("f12", "F12", GLFW_KEY_F12), - KP_0("kp0", "Num 0"), - KP_1("kp1", "Num 1"), - KP_2("kp2", "Num 2"), - KP_3("kp3", "Num 3"), - KP_4("kp4", "Num 4"), - KP_5("kp5", "Num 5"), - KP_6("kp6", "Num 6"), - KP_7("kp7", "Num 7"), - KP_8("kp8", "Num 8"), - KP_9("kp9", "Num 9"), + KP_0("kp0", "Num 0", GLFW_KEY_KP_0), + KP_1("kp1", "Num 1", GLFW_KEY_KP_1), + KP_2("kp2", "Num 2", GLFW_KEY_KP_2), + KP_3("kp3", "Num 3", GLFW_KEY_KP_3), + KP_4("kp4", "Num 4", GLFW_KEY_KP_4), + KP_5("kp5", "Num 5", GLFW_KEY_KP_5), + KP_6("kp6", "Num 6", GLFW_KEY_KP_6), + KP_7("kp7", "Num 7", GLFW_KEY_KP_7), + KP_8("kp8", "Num 8", GLFW_KEY_KP_8), + KP_9("kp9", "Num 9", GLFW_KEY_KP_9), - SPACE("space", "Leertaste"), - CIRCUMFLEX('^'), - SHARP_S('ß'), - ACUTE('´'), - UE('ü'), - PLUS('+'), - OE('ö'), - AE('ä'), - NUMBER_SIGN('#'), - LESS_THAN('<'), - COMMA(','), - PERIOD('.'), - HYPHEN('-'), + SPACE("space", "Leertaste", GLFW_KEY_SPACE), + CIRCUMFLEX('^', GLFW_KEY_GRAVE_ACCENT), + SHARP_S('ß', GLFW_KEY_MINUS), + ACUTE('´', GLFW_KEY_EQUAL), + UE('ü', GLFW_KEY_LEFT_BRACKET), + PLUS('+', GLFW_KEY_RIGHT_BRACKET), + OE('ö', GLFW_KEY_SEMICOLON), + AE('ä', GLFW_KEY_APOSTROPHE), + NUMBER_SIGN('#', GLFW_KEY_BACKSLASH), + LESS_THAN('<', GLFW_KEY_WORLD_1), + COMMA(',', GLFW_KEY_COMMA), + PERIOD('.', GLFW_KEY_PERIOD), + HYPHEN('-', GLFW_KEY_SLASH), - KP_DECIMAL("kp.", "Num ."), - KP_DIVIDE("kp/", "Num /"), - KP_MULTIPLY("kp*", "Num *"), - KP_SUBTRACT("kp-", "Num -"), - KP_ADD("kp+", "Num +"), - KP_ENTER("enter", "Num Enter"), - KP_EQUAL("kp=", "Num ="), + KP_DECIMAL("kp.", "Num .", GLFW_KEY_KP_DECIMAL), + KP_DIVIDE("kp/", "Num /", GLFW_KEY_KP_DIVIDE), + KP_MULTIPLY("kp*", "Num *", GLFW_KEY_KP_MULTIPLY), + KP_SUBTRACT("kp-", "Num -", GLFW_KEY_KP_SUBTRACT), + KP_ADD("kp+", "Num +", GLFW_KEY_KP_ADD), + KP_ENTER("enter", "Num Enter", GLFW_KEY_KP_ENTER), + KP_EQUAL("kp=", "Num =", GLFW_KEY_KP_EQUAL), - CAPS_LOCK("caps", "Feststellen"), - SCROLL_LOCK("scroll", "Scroll Lock"), - NUM_LOCK("num", "Num Lock"), + CAPS_LOCK("caps", "Feststellen", GLFW_KEY_CAPS_LOCK), + SCROLL_LOCK("scroll", "Scroll Lock", GLFW_KEY_SCROLL_LOCK), + NUM_LOCK("num", "Num Lock", GLFW_KEY_NUM_LOCK), - ESCAPE("esc", "Esc"), - RETURN("return", "Enter"), - TAB("tab", "Tab"), - BACKSPACE("bksp", "Rücktaste"), - INSERT("ins", "Einfg"), - DELETE("del", "Entf"), - RIGHT("right", "Pfeil rechts"), - LEFT("left", "Pfeil links"), - DOWN("down", "Pfeil unten"), - UP("up", "Pfeil oben"), - PAGE_UP("pgup", "Bild auf"), - PAGE_DOWN("pgdn", "Bild ab"), - HOME("home", "Pos1"), - END("end", "Ende"), - PRINT_SCREEN("print", "Druck"), - PAUSE("pause", "Pause"), - LEFT_SHIFT("lshift", "Umschalt links"), - LEFT_CONTROL("lctrl", "Strg links"), - ALT("alt", "Alt"), - LEFT_SUPER("lsuper", "Super links"), - RIGHT_SHIFT("rshift", "Umschalt rechts"), - RIGHT_CONTROL("rctrl", "Strg rechts"), - ALT_GRAPH("altgr", "Alt Gr"), - RIGHT_SUPER("rsuper", "Super rechts"), - MENU("menu", "Menü"); + ESCAPE("esc", "Esc", GLFW_KEY_ESCAPE), + RETURN("return", "Enter", GLFW_KEY_ENTER), + TAB("tab", "Tab", GLFW_KEY_TAB), + BACKSPACE("bksp", "Rücktaste", GLFW_KEY_BACKSPACE), + INSERT("ins", "Einfg", GLFW_KEY_INSERT), + DELETE("del", "Entf", GLFW_KEY_DELETE), + RIGHT("right", "Pfeil rechts", GLFW_KEY_RIGHT), + LEFT("left", "Pfeil links", GLFW_KEY_LEFT), + DOWN("down", "Pfeil unten", GLFW_KEY_DOWN), + UP("up", "Pfeil oben", GLFW_KEY_UP), + PAGE_UP("pgup", "Bild auf", GLFW_KEY_PAGE_UP), + PAGE_DOWN("pgdn", "Bild ab", GLFW_KEY_PAGE_DOWN), + HOME("home", "Pos1", GLFW_KEY_HOME), + END("end", "Ende", GLFW_KEY_END), + PRINT_SCREEN("print", "Druck", GLFW_KEY_PRINT_SCREEN), + PAUSE("pause", "Pause", GLFW_KEY_PAUSE), + LEFT_SHIFT("lshift", "Umschalt links", GLFW_KEY_LEFT_SHIFT), + LEFT_CONTROL("lctrl", "Strg links", GLFW_KEY_LEFT_CONTROL), + ALT("alt", "Alt", GLFW_KEY_LEFT_ALT), + LEFT_SUPER("lsuper", "Super links", GLFW_KEY_LEFT_SUPER), + RIGHT_SHIFT("rshift", "Umschalt rechts", GLFW_KEY_RIGHT_SHIFT), + RIGHT_CONTROL("rctrl", "Strg rechts", GLFW_KEY_RIGHT_CONTROL), + ALT_GRAPH("altgr", "Alt Gr", GLFW_KEY_RIGHT_ALT), + RIGHT_SUPER("rsuper", "Super rechts", GLFW_KEY_RIGHT_SUPER), + MENU("menu", "Menü", GLFW_KEY_MENU); + + private static final Keysym[] KEYS = new Keysym[GLFW_KEY_LAST]; private final String id; private final String name; + private final int code; - private Keysym(String id, String name) { - this.id = id; - this.name = name; + static { + for(Keysym key : values()) { + KEYS[key.code - 1] = key; + } } - private Keysym(char character) { - this(Character.toString(character), "<" + Character.toUpperCase(character) + ">"); + public static Keysym getForCode(int code) { + return code > 0 && code <= KEYS.length ? KEYS[code - 1] : null; + } + + private Keysym(String id, String name, int code) { + this.id = id; + this.name = name; + this.code = code; + } + + private Keysym(char character, int code) { + this(Character.toString(character), "<" + Character.toUpperCase(character) + ">", code); } public String getName() { @@ -136,6 +152,6 @@ public enum Keysym implements Input { } public boolean read() { - return Window.getKey(this); // .ordinal() + 1 + return Window.getKey(this.code); } } diff --git a/java/src/game/window/Window.java b/java/src/game/window/Window.java index 69e63c8..c69c2a1 100644 --- a/java/src/game/window/Window.java +++ b/java/src/game/window/Window.java @@ -44,8 +44,8 @@ public abstract class Window { glfwSetWindowMonitor(window, monitor, 0, 0, width, height, refresh); } } - public static boolean getKey(Keysym code) { - return window != NULL && glfwGetKey(window, CODES[code.ordinal()]) == GLFW_PRESS; + public static boolean getKey(int code) { + return window != NULL && glfwGetKey(window, code) == GLFW_PRESS; } public static void setTitle(String title) { if(window != NULL) @@ -83,133 +83,10 @@ public abstract class Window { glfwSwapInterval(sync ? 1 : 0); } - private static final int[] CODES = new int[Keysym.values().length]; - private static final Keysym[] KEYS = new Keysym[GLFW_KEY_LAST]; private static final List EVENTS = new ArrayList(); private static long window; - private static void addKey(Keysym key, int code) { - CODES[key.ordinal()] = code; - KEYS[code - 1] = key; - } - - static { - addKey(Keysym.N0, GLFW_KEY_0); - addKey(Keysym.N1, GLFW_KEY_1); - addKey(Keysym.N2, GLFW_KEY_2); - addKey(Keysym.N3, GLFW_KEY_3); - addKey(Keysym.N4, GLFW_KEY_4); - addKey(Keysym.N5, GLFW_KEY_5); - addKey(Keysym.N6, GLFW_KEY_6); - addKey(Keysym.N7, GLFW_KEY_7); - addKey(Keysym.N8, GLFW_KEY_8); - addKey(Keysym.N9, GLFW_KEY_9); - - addKey(Keysym.A, GLFW_KEY_A); - addKey(Keysym.B, GLFW_KEY_B); - addKey(Keysym.C, GLFW_KEY_C); - addKey(Keysym.D, GLFW_KEY_D); - addKey(Keysym.E, GLFW_KEY_E); - addKey(Keysym.F, GLFW_KEY_F); - addKey(Keysym.G, GLFW_KEY_G); - addKey(Keysym.H, GLFW_KEY_H); - addKey(Keysym.I, GLFW_KEY_I); - addKey(Keysym.J, GLFW_KEY_J); - addKey(Keysym.K, GLFW_KEY_K); - addKey(Keysym.L, GLFW_KEY_L); - addKey(Keysym.M, GLFW_KEY_M); - addKey(Keysym.N, GLFW_KEY_N); - addKey(Keysym.O, GLFW_KEY_O); - addKey(Keysym.P, GLFW_KEY_P); - addKey(Keysym.Q, GLFW_KEY_Q); - addKey(Keysym.R, GLFW_KEY_R); - addKey(Keysym.S, GLFW_KEY_S); - addKey(Keysym.T, GLFW_KEY_T); - addKey(Keysym.U, GLFW_KEY_U); - addKey(Keysym.V, GLFW_KEY_V); - addKey(Keysym.W, GLFW_KEY_W); - addKey(Keysym.X, GLFW_KEY_X); - addKey(Keysym.Y, GLFW_KEY_Z); - addKey(Keysym.Z, GLFW_KEY_Y); - - addKey(Keysym.F1, GLFW_KEY_F1); - addKey(Keysym.F2, GLFW_KEY_F2); - addKey(Keysym.F3, GLFW_KEY_F3); - addKey(Keysym.F4, GLFW_KEY_F4); - addKey(Keysym.F5, GLFW_KEY_F5); - addKey(Keysym.F6, GLFW_KEY_F6); - addKey(Keysym.F7, GLFW_KEY_F7); - addKey(Keysym.F8, GLFW_KEY_F8); - addKey(Keysym.F9, GLFW_KEY_F9); - addKey(Keysym.F10, GLFW_KEY_F10); - addKey(Keysym.F11, GLFW_KEY_F11); - addKey(Keysym.F12, GLFW_KEY_F12); - - addKey(Keysym.KP_0, GLFW_KEY_KP_0); - addKey(Keysym.KP_1, GLFW_KEY_KP_1); - addKey(Keysym.KP_2, GLFW_KEY_KP_2); - addKey(Keysym.KP_3, GLFW_KEY_KP_3); - addKey(Keysym.KP_4, GLFW_KEY_KP_4); - addKey(Keysym.KP_5, GLFW_KEY_KP_5); - addKey(Keysym.KP_6, GLFW_KEY_KP_6); - addKey(Keysym.KP_7, GLFW_KEY_KP_7); - addKey(Keysym.KP_8, GLFW_KEY_KP_8); - addKey(Keysym.KP_9, GLFW_KEY_KP_9); - - addKey(Keysym.SPACE, GLFW_KEY_SPACE); - addKey(Keysym.CIRCUMFLEX, GLFW_KEY_GRAVE_ACCENT); - addKey(Keysym.SHARP_S, GLFW_KEY_MINUS); - addKey(Keysym.ACUTE, GLFW_KEY_EQUAL); - addKey(Keysym.UE, GLFW_KEY_LEFT_BRACKET); - addKey(Keysym.PLUS, GLFW_KEY_RIGHT_BRACKET); - addKey(Keysym.OE, GLFW_KEY_SEMICOLON); - addKey(Keysym.AE, GLFW_KEY_APOSTROPHE); - addKey(Keysym.NUMBER_SIGN, GLFW_KEY_BACKSLASH); - addKey(Keysym.LESS_THAN, GLFW_KEY_WORLD_1); - addKey(Keysym.COMMA, GLFW_KEY_COMMA); - addKey(Keysym.PERIOD, GLFW_KEY_PERIOD); - addKey(Keysym.HYPHEN, GLFW_KEY_SLASH); - - addKey(Keysym.KP_DECIMAL, GLFW_KEY_KP_DECIMAL); - addKey(Keysym.KP_DIVIDE, GLFW_KEY_KP_DIVIDE); - addKey(Keysym.KP_MULTIPLY, GLFW_KEY_KP_MULTIPLY); - addKey(Keysym.KP_SUBTRACT, GLFW_KEY_KP_SUBTRACT); - addKey(Keysym.KP_ADD, GLFW_KEY_KP_ADD); - addKey(Keysym.KP_ENTER, GLFW_KEY_KP_ENTER); - addKey(Keysym.KP_EQUAL, GLFW_KEY_KP_EQUAL); - - addKey(Keysym.CAPS_LOCK, GLFW_KEY_CAPS_LOCK); - addKey(Keysym.SCROLL_LOCK, GLFW_KEY_SCROLL_LOCK); - addKey(Keysym.NUM_LOCK, GLFW_KEY_NUM_LOCK); - - addKey(Keysym.ESCAPE, GLFW_KEY_ESCAPE); - addKey(Keysym.RETURN, GLFW_KEY_ENTER); - addKey(Keysym.TAB, GLFW_KEY_TAB); - addKey(Keysym.BACKSPACE, GLFW_KEY_BACKSPACE); - addKey(Keysym.INSERT, GLFW_KEY_INSERT); - addKey(Keysym.DELETE, GLFW_KEY_DELETE); - addKey(Keysym.RIGHT, GLFW_KEY_RIGHT); - addKey(Keysym.LEFT, GLFW_KEY_LEFT); - addKey(Keysym.DOWN, GLFW_KEY_DOWN); - addKey(Keysym.UP, GLFW_KEY_UP); - addKey(Keysym.PAGE_UP, GLFW_KEY_PAGE_UP); - addKey(Keysym.PAGE_DOWN, GLFW_KEY_PAGE_DOWN); - addKey(Keysym.HOME, GLFW_KEY_HOME); - addKey(Keysym.END, GLFW_KEY_END); - addKey(Keysym.PRINT_SCREEN, GLFW_KEY_PRINT_SCREEN); - addKey(Keysym.PAUSE, GLFW_KEY_PAUSE); - addKey(Keysym.LEFT_SHIFT, GLFW_KEY_LEFT_SHIFT); - addKey(Keysym.LEFT_CONTROL, GLFW_KEY_LEFT_CONTROL); - addKey(Keysym.ALT, GLFW_KEY_LEFT_ALT); - addKey(Keysym.LEFT_SUPER, GLFW_KEY_LEFT_SUPER); - addKey(Keysym.RIGHT_SHIFT, GLFW_KEY_RIGHT_SHIFT); - addKey(Keysym.RIGHT_CONTROL, GLFW_KEY_RIGHT_CONTROL); - addKey(Keysym.ALT_GRAPH, GLFW_KEY_RIGHT_ALT); - addKey(Keysym.RIGHT_SUPER, GLFW_KEY_RIGHT_SUPER); - addKey(Keysym.MENU, GLFW_KEY_MENU); - } - public static boolean createWindow(String id, boolean gldebug) { glfwDefaultWindowHints(); glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); @@ -243,7 +120,7 @@ public abstract class Window { }); glfwSetKeyCallback(window, new GLFWKeyCallback() { public void invoke(long window, int key, int scancode, int action, int mods) { - Keysym code = key > 0 && key <= KEYS.length ? KEYS[key - 1] : null; + Keysym code = Keysym.getForCode(key); if(code != null) EVENTS.add(new WindowEvent(WindowAction.KEY, code.ordinal(), (action == GLFW_PRESS ? KeyEvent.PRESS : (action == GLFW_RELEASE ? KeyEvent.RELEASE : KeyEvent.REPEAT)).ordinal()));