key codes

This commit is contained in:
Sen 2025-03-18 11:02:39 +01:00
parent a2ffb2991d
commit a78f873590
2 changed files with 131 additions and 238 deletions

View file

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

View file

@ -44,8 +44,8 @@ public abstract class Window {
glfwSetWindowMonitor(window, monitor, 0, 0, width, height, refresh); glfwSetWindowMonitor(window, monitor, 0, 0, width, height, refresh);
} }
} }
public static boolean getKey(Keysym code) { public static boolean getKey(int code) {
return window != NULL && glfwGetKey(window, CODES[code.ordinal()]) == GLFW_PRESS; return window != NULL && glfwGetKey(window, code) == GLFW_PRESS;
} }
public static void setTitle(String title) { public static void setTitle(String title) {
if(window != NULL) if(window != NULL)
@ -83,133 +83,10 @@ public abstract class Window {
glfwSwapInterval(sync ? 1 : 0); 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<WindowEvent> EVENTS = new ArrayList<WindowEvent>(); private static final List<WindowEvent> EVENTS = new ArrayList<WindowEvent>();
private static long window; 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) { public static boolean createWindow(String id, boolean gldebug) {
glfwDefaultWindowHints(); glfwDefaultWindowHints();
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
@ -243,7 +120,7 @@ public abstract class Window {
}); });
glfwSetKeyCallback(window, new GLFWKeyCallback() { glfwSetKeyCallback(window, new GLFWKeyCallback() {
public void invoke(long window, int key, int scancode, int action, int mods) { 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) if(code != null)
EVENTS.add(new WindowEvent(WindowAction.KEY, code.ordinal(), EVENTS.add(new WindowEvent(WindowAction.KEY, code.ordinal(),
(action == GLFW_PRESS ? KeyEvent.PRESS : (action == GLFW_RELEASE ? KeyEvent.RELEASE : KeyEvent.REPEAT)).ordinal())); (action == GLFW_PRESS ? KeyEvent.PRESS : (action == GLFW_RELEASE ? KeyEvent.RELEASE : KeyEvent.REPEAT)).ordinal()));