diff --git a/src/mightypork/gamecore/backends/lwjgl/LwjglInputModule.java b/src/mightypork/gamecore/backends/lwjgl/LwjglInputModule.java index 71b3b1d..fd8af3f 100644 --- a/src/mightypork/gamecore/backends/lwjgl/LwjglInputModule.java +++ b/src/mightypork/gamecore/backends/lwjgl/LwjglInputModule.java @@ -4,6 +4,7 @@ package mightypork.gamecore.backends.lwjgl; import mightypork.gamecore.core.App; import mightypork.gamecore.core.events.UserQuitRequest; import mightypork.gamecore.input.InputModule; +import mightypork.gamecore.input.Key; import mightypork.gamecore.input.Keys; import mightypork.gamecore.input.events.KeyEvent; import mightypork.gamecore.input.events.MouseButtonEvent; @@ -24,6 +25,7 @@ import org.lwjgl.opengl.Display; * @author Ondřej Hruška (MightyPork) */ public class LwjglInputModule extends InputModule implements Updateable { + /** Current mouse position */ private static final Vect mousePos = new Vect() { @@ -47,14 +49,6 @@ public class LwjglInputModule extends InputModule implements Updateable { }; - @Override - public void destroy() - { - Mouse.destroy(); - Keyboard.destroy(); - } - - @Override protected void initDevices() { @@ -67,6 +61,143 @@ public class LwjglInputModule extends InputModule implements Updateable { } } + @Override + protected void initKeyCodes() + { + Keys.NONE.setCode(Keyboard.KEY_NONE); + + Keys.NUM_1.setCode(Keyboard.KEY_1); + Keys.NUM_2.setCode(Keyboard.KEY_2); + Keys.NUM_3.setCode(Keyboard.KEY_3); + Keys.NUM_4.setCode(Keyboard.KEY_4); + Keys.NUM_5.setCode(Keyboard.KEY_5); + Keys.NUM_6.setCode(Keyboard.KEY_6); + Keys.NUM_7.setCode(Keyboard.KEY_7); + Keys.NUM_8.setCode(Keyboard.KEY_8); + Keys.NUM_9.setCode(Keyboard.KEY_9); + Keys.NUM_0.setCode(Keyboard.KEY_0); + + Keys.Q.setCode(Keyboard.KEY_Q); + Keys.W.setCode(Keyboard.KEY_W); + Keys.E.setCode(Keyboard.KEY_E); + Keys.R.setCode(Keyboard.KEY_R); + Keys.T.setCode(Keyboard.KEY_T); + Keys.Y.setCode(Keyboard.KEY_Y); + Keys.U.setCode(Keyboard.KEY_U); + Keys.I.setCode(Keyboard.KEY_I); + Keys.O.setCode(Keyboard.KEY_O); + Keys.P.setCode(Keyboard.KEY_P); + Keys.A.setCode(Keyboard.KEY_A); + Keys.S.setCode(Keyboard.KEY_S); + Keys.D.setCode(Keyboard.KEY_D); + Keys.F.setCode(Keyboard.KEY_F); + Keys.G.setCode(Keyboard.KEY_G); + Keys.H.setCode(Keyboard.KEY_H); + Keys.J.setCode(Keyboard.KEY_J); + Keys.K.setCode(Keyboard.KEY_K); + Keys.L.setCode(Keyboard.KEY_L); + Keys.Z.setCode(Keyboard.KEY_Z); + Keys.X.setCode(Keyboard.KEY_X); + Keys.C.setCode(Keyboard.KEY_C); + Keys.V.setCode(Keyboard.KEY_V); + Keys.B.setCode(Keyboard.KEY_B); + Keys.N.setCode(Keyboard.KEY_N); + Keys.M.setCode(Keyboard.KEY_M); + + Keys.MINUS.setCode(Keyboard.KEY_MINUS); + Keys.EQUALS.setCode(Keyboard.KEY_EQUALS); + Keys.SLASH.setCode(Keyboard.KEY_SLASH); + Keys.BACKSLASH.setCode(Keyboard.KEY_BACKSLASH); + Keys.BRACKET_LEFT.setCode(Keyboard.KEY_LBRACKET); + Keys.BRACKET_RIGHT.setCode(Keyboard.KEY_RBRACKET); + Keys.SEMICOLON.setCode(Keyboard.KEY_SEMICOLON); + Keys.APOSTROPHE.setCode(Keyboard.KEY_APOSTROPHE); + Keys.GRAVE.setCode(Keyboard.KEY_GRAVE); + Keys.COMMA.setCode(Keyboard.KEY_COMMA); + Keys.PERIOD.setCode(Keyboard.KEY_PERIOD); + + Keys.SPACE.setCode(Keyboard.KEY_SPACE); + Keys.BACKSPACE.setCode(Keyboard.KEY_BACK); + Keys.TAB.setCode(Keyboard.KEY_TAB); + Keys.ESCAPE.setCode(Keyboard.KEY_ESCAPE); + + Keys.APPS.setCode(Keyboard.KEY_APPS); + Keys.POWER.setCode(Keyboard.KEY_POWER); + Keys.SLEEP.setCode(Keyboard.KEY_SLEEP); + //Keys.MENU.setCode(Keyboard.KEY_MENU); // not defined + + Keys.F1.setCode(Keyboard.KEY_F1); + Keys.F2.setCode(Keyboard.KEY_F2); + Keys.F3.setCode(Keyboard.KEY_F3); + Keys.F4.setCode(Keyboard.KEY_F4); + Keys.F5.setCode(Keyboard.KEY_F5); + Keys.F6.setCode(Keyboard.KEY_F6); + Keys.F7.setCode(Keyboard.KEY_F7); + Keys.F8.setCode(Keyboard.KEY_F8); + Keys.F9.setCode(Keyboard.KEY_F9); + Keys.F10.setCode(Keyboard.KEY_F10); + Keys.F11.setCode(Keyboard.KEY_F11); + Keys.F12.setCode(Keyboard.KEY_F12); + Keys.F13.setCode(Keyboard.KEY_F13); + Keys.F14.setCode(Keyboard.KEY_F14); + Keys.F15.setCode(Keyboard.KEY_F15); + + Keys.CAPS_LOCK.setCode(Keyboard.KEY_CAPITAL); + Keys.SCROLL_LOCK.setCode(Keyboard.KEY_SCROLL); + Keys.NUM_LOCK.setCode(Keyboard.KEY_NUMLOCK); + + Keys.NUMPAD_MINUS.setCode(Keyboard.KEY_SUBTRACT); + Keys.NUMPAD_PLUSS.setCode(Keyboard.KEY_ADD); + Keys.NUMPAD_0.setCode(Keyboard.KEY_NUMPAD0); + Keys.NUMPAD_1.setCode(Keyboard.KEY_NUMPAD1); + Keys.NUMPAD_2.setCode(Keyboard.KEY_NUMPAD2); + Keys.NUMPAD_3.setCode(Keyboard.KEY_NUMPAD3); + Keys.NUMPAD_4.setCode(Keyboard.KEY_NUMPAD4); + Keys.NUMPAD_5.setCode(Keyboard.KEY_NUMPAD5); + Keys.NUMPAD_6.setCode(Keyboard.KEY_NUMPAD6); + Keys.NUMPAD_7.setCode(Keyboard.KEY_NUMPAD7); + Keys.NUMPAD_8.setCode(Keyboard.KEY_NUMPAD8); + Keys.NUMPAD_9.setCode(Keyboard.KEY_NUMPAD9); + Keys.NUMPAD_DECIMAL.setCode(Keyboard.KEY_DECIMAL); + Keys.NUMPAD_ENTER.setCode(Keyboard.KEY_NUMPADENTER); + Keys.NUMPAD_DIVIDE.setCode(Keyboard.KEY_DIVIDE); + Keys.NUMPAD_MULTIPLY.setCode(Keyboard.KEY_MULTIPLY); + + Keys.CONTROL_LEFT.setCode(Keyboard.KEY_LCONTROL); + Keys.CONTROL_RIGHT.setCode(Keyboard.KEY_RCONTROL); + Keys.ALT_LEFT.setCode(Keyboard.KEY_LMENU); + Keys.ALT_RIGHT.setCode(Keyboard.KEY_RMENU); + Keys.SHIFT_LEFT.setCode(Keyboard.KEY_LSHIFT); + Keys.SHIFT_RIGHT.setCode(Keyboard.KEY_RSHIFT); + Keys.META_LEFT.setCode(Keyboard.KEY_LMETA); + Keys.META_RIGHT.setCode(Keyboard.KEY_RMETA); + + Keys.UP.setCode(Keyboard.KEY_UP); + Keys.DOWN.setCode(Keyboard.KEY_DOWN); + Keys.LEFT.setCode(Keyboard.KEY_LEFT); + Keys.RIGHT.setCode(Keyboard.KEY_RIGHT); + + Keys.HOME.setCode(Keyboard.KEY_HOME); + Keys.END.setCode(Keyboard.KEY_END); + + Keys.PAGE_UP.setCode(Keyboard.KEY_PRIOR); + Keys.PAGE_DOWN.setCode(Keyboard.KEY_NEXT); + + Keys.RETURN.setCode(Keyboard.KEY_RETURN); + Keys.PAUSE.setCode(Keyboard.KEY_PAUSE); + Keys.INSERT.setCode(Keyboard.KEY_INSERT); + Keys.DELETE.setCode(Keyboard.KEY_DELETE); + Keys.SYSRQ.setCode(Keyboard.KEY_SYSRQ); + } + + + @Override + public void destroy() + { + Mouse.destroy(); + Keyboard.destroy(); + } + private final VectVar mouseMove = Vect.makeVar(); private final VectVar mouseLastPos = Vect.makeVar(); @@ -158,9 +289,9 @@ public class LwjglInputModule extends InputModule implements Updateable { @Override - public boolean isKeyDown(int key) + public boolean isKeyDown(Key key) { - return Keyboard.isKeyDown(key); + return key.isDefined() && Keyboard.isKeyDown(key.getCode()); } @@ -169,29 +300,4 @@ public class LwjglInputModule extends InputModule implements Updateable { { return Mouse.isButtonDown(button); } - - - @Override - public int getActiveModKeys() - { - int mods = 0; - - if (isKeyDown(Keys.L_ALT) || isKeyDown(Keys.R_ALT)) { - mods |= Keys.MOD_ALT; - } - - if (isKeyDown(Keys.L_SHIFT) || isKeyDown(Keys.R_SHIFT)) { - mods |= Keys.MOD_SHIFT; - } - - if (isKeyDown(Keys.L_CONTROL) || isKeyDown(Keys.R_CONTROL)) { - mods |= Keys.MOD_CONTROL; - } - - if (isKeyDown(Keys.L_META) || isKeyDown(Keys.R_META)) { - mods |= Keys.MOD_META; - } - - return mods; - } } diff --git a/src/mightypork/gamecore/core/config/Config.java b/src/mightypork/gamecore/core/config/Config.java index 05a1d91..09dd6c4 100644 --- a/src/mightypork/gamecore/core/config/Config.java +++ b/src/mightypork/gamecore/core/config/Config.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.Map; import mightypork.gamecore.core.WorkDir; +import mightypork.gamecore.input.Key; import mightypork.gamecore.input.KeyStroke; import mightypork.utils.config.propmgr.Property; import mightypork.utils.config.propmgr.PropertyManager; @@ -256,7 +257,7 @@ public class Config { * @param key stroke key * @param mod stroke modifiers */ - public void setKeyStroke(String cfgKey, int key, int mod) + public void setKeyStroke(String cfgKey, Key key, int mod) { final KeyStrokeProperty kp = strokes.get(prefixKeyStroke(cfgKey)); if (kp == null) { diff --git a/src/mightypork/gamecore/core/config/KeyStrokeProperty.java b/src/mightypork/gamecore/core/config/KeyStrokeProperty.java index f4bc3d5..e9a49fc 100644 --- a/src/mightypork/gamecore/core/config/KeyStrokeProperty.java +++ b/src/mightypork/gamecore/core/config/KeyStrokeProperty.java @@ -1,6 +1,7 @@ package mightypork.gamecore.core.config; +import mightypork.gamecore.input.Key; import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.input.Keys; import mightypork.utils.config.propmgr.Property; @@ -27,7 +28,7 @@ public class KeyStrokeProperty extends Property { if (string != null) { // keep the same instance - final int backup_key = value.getKey(); + final Key backup_key = value.getKey(); final int backup_mod = value.getMod(); value.fromDataString(string); diff --git a/src/mightypork/gamecore/gui/screens/Overlay.java b/src/mightypork/gamecore/gui/screens/Overlay.java index f326614..a9f18d5 100644 --- a/src/mightypork/gamecore/gui/screens/Overlay.java +++ b/src/mightypork/gamecore/gui/screens/Overlay.java @@ -9,7 +9,7 @@ import mightypork.gamecore.core.App; import mightypork.gamecore.graphics.Renderable; import mightypork.gamecore.gui.components.layout.ConstraintLayout; import mightypork.gamecore.gui.events.LayoutChangeListener; -import mightypork.gamecore.input.Edge; +import mightypork.gamecore.input.Trigger; import mightypork.gamecore.input.KeyBinder; import mightypork.gamecore.input.KeyBindingPool; import mightypork.gamecore.input.KeyStroke; @@ -63,7 +63,7 @@ public abstract class Overlay extends BusNode implements Comparable, Up @Override - public final void bindKey(KeyStroke stroke, Edge edge, Runnable task) + public final void bindKey(KeyStroke stroke, Trigger edge, Runnable task) { keybindings.bindKey(stroke, edge, task); } diff --git a/src/mightypork/gamecore/gui/screens/Screen.java b/src/mightypork/gamecore/gui/screens/Screen.java index bc16f5c..a75a4ef 100644 --- a/src/mightypork/gamecore/gui/screens/Screen.java +++ b/src/mightypork/gamecore/gui/screens/Screen.java @@ -5,7 +5,7 @@ import mightypork.gamecore.core.App; import mightypork.gamecore.graphics.Renderable; import mightypork.gamecore.gui.events.LayoutChangeEvent; import mightypork.gamecore.gui.events.LayoutChangeListener; -import mightypork.gamecore.input.Edge; +import mightypork.gamecore.input.Trigger; import mightypork.gamecore.input.KeyBinder; import mightypork.gamecore.input.KeyBindingPool; import mightypork.gamecore.input.KeyStroke; @@ -44,7 +44,7 @@ public abstract class Screen extends BusNode implements Renderable, RectBound, K @Override - public final void bindKey(KeyStroke stroke, Edge edge, Runnable task) + public final void bindKey(KeyStroke stroke, Trigger edge, Runnable task) { keybindings.bindKey(stroke, edge, task); } diff --git a/src/mightypork/gamecore/input/InputModule.java b/src/mightypork/gamecore/input/InputModule.java index 505e355..43c7520 100644 --- a/src/mightypork/gamecore/input/InputModule.java +++ b/src/mightypork/gamecore/input/InputModule.java @@ -18,17 +18,28 @@ public abstract class InputModule extends BackendModule implements KeyBinder { @Override public final void init() { + initKeyCodes(); + initDevices(); + keybindings = new KeyBindingPool(); addChildClient(keybindings); - initDevices(); } + /** + * Initialize key codes for keys in {@link Keys} + */ + protected abstract void initKeyCodes(); + + + /** + * Initialize input devices (set up infrastructure for getting the input) + */ protected abstract void initDevices(); @Override - public void bindKey(KeyStroke stroke, Edge edge, Runnable task) + public void bindKey(KeyStroke stroke, Trigger edge, Runnable task) { keybindings.bindKey(stroke, edge, task); } @@ -67,25 +78,20 @@ public abstract class InputModule extends BackendModule implements KeyBinder { /** - * Check if key is down (constant from the {@link Keys} class) + * Check if key is down. The key comes from the Keys class, so the code is + * the one assigned in initKeyCodes() * * @param key key to check * @return is down */ - public abstract boolean isKeyDown(int key); + public abstract boolean isKeyDown(Key key); /** * Check mouse button state * - * @param button button to test (0 left, 1 right, 2 middle) - * @return button is down + * @param button button to test (0 left, 1 right, 2 middle, 3,4,5... extra) + * @return true if the button exists and is down */ public abstract boolean isMouseButtonDown(int button); - - - /** - * @return bit mask of active mod keys - */ - public abstract int getActiveModKeys(); } diff --git a/src/mightypork/gamecore/input/Key.java b/src/mightypork/gamecore/input/Key.java new file mode 100644 index 0000000..66b6695 --- /dev/null +++ b/src/mightypork/gamecore/input/Key.java @@ -0,0 +1,114 @@ +package mightypork.gamecore.input; + + +import java.util.HashSet; +import java.util.Set; + +import mightypork.gamecore.core.App; + + +/** + * Abstraction above a physical keyboard key.
+ * Provides name, aliases, and the {@link InputModule} may assign it a numeric + * code that corresponds to the underlying keyboard system. + * + * @author Ondřej Hruška (MightyPork) + */ +public class Key { + + private int code = -1; + private final String name; + private final Set aliases = new HashSet<>(1); + + + /** + * Create a key. Note that both name and aliases are converted to uppercase, + * and all underscores are ignored when the aliases are matched. + * + * @param name key name (primary alias) + * @param aliases extra aliases (used for matching) + */ + public Key(String name, String... aliases) { + + // assign name and aliases, converting both to uppercase + + this.name = name; + this.aliases.add(prepareForMatch(name)); + + for (String al : aliases) { + this.aliases.add(prepareForMatch(al)); + } + } + + + public boolean isDown() + { + return App.input().isKeyDown(this); + } + + + /** + * Set a key code. This can be used by the {@link InputModule} to store a + * numeric code in the key. + * + * @param code a code to assign + */ + public void setCode(int code) + { + this.code = code; + } + + + /** + * Check if the provided alias matches this key.
+ * Both the primary alias and the extra aliases are considered. + * + * @param alias + * @return true if matches (this is the key) + */ + public boolean matches(String alias) + { + if (alias == null) return false; + return aliases.contains(prepareForMatch(alias)); + } + + + private String prepareForMatch(String matched) + { + return matched.toUpperCase().replace("_", ""); + } + + + /** + * Get key name (primary alias). + * + * @return name (uppercase) + */ + public String getName() + { + return name; + } + + + /** + * Get the numeric code assigned to this key. If none is assigned, the value + * is -1. + * + * @return numeric key code. + */ + public int getCode() + { + return code; + } + + + /** + * Get if this key is not a NONE or undefined key. + * + * @return true if the key is defined. + */ + public boolean isDefined() + { + return code > 0; + } +} diff --git a/src/mightypork/gamecore/input/KeyBinder.java b/src/mightypork/gamecore/input/KeyBinder.java index 51932ba..9730e0e 100644 --- a/src/mightypork/gamecore/input/KeyBinder.java +++ b/src/mightypork/gamecore/input/KeyBinder.java @@ -18,7 +18,7 @@ public interface KeyBinder { * @param stroke trigger keystroke * @param task handler; can be {@link Runnable} or {@link Action} */ - void bindKey(KeyStroke stroke, Edge edge, Runnable task); + void bindKey(KeyStroke stroke, Trigger edge, Runnable task); /** diff --git a/src/mightypork/gamecore/input/KeyBinding.java b/src/mightypork/gamecore/input/KeyBinding.java index cbf6618..0e5baec 100644 --- a/src/mightypork/gamecore/input/KeyBinding.java +++ b/src/mightypork/gamecore/input/KeyBinding.java @@ -14,7 +14,7 @@ public class KeyBinding implements KeyEventHandler { private final KeyStroke keystroke; private Runnable handler; - private final Edge edge; + private final Trigger edge; private boolean wasDown = false; @@ -23,7 +23,7 @@ public class KeyBinding implements KeyEventHandler { * @param stroke trigger keystroke * @param handler action */ - public KeyBinding(KeyStroke stroke, Edge edge, Runnable handler) { + public KeyBinding(KeyStroke stroke, Trigger edge, Runnable handler) { this.keystroke = stroke; this.handler = handler; this.edge = edge; @@ -58,8 +58,8 @@ public class KeyBinding implements KeyEventHandler { final boolean nowDown = keystroke.isDown(); boolean trigger = false; - trigger |= (edge == Edge.FALLING && (!wasDown && nowDown)); - trigger |= (edge == Edge.RISING && (wasDown && !nowDown)); + trigger |= (edge == Trigger.FALLING && (!wasDown && nowDown)); + trigger |= (edge == Trigger.RISING && (wasDown && !nowDown)); wasDown = nowDown; // run handler when event was met diff --git a/src/mightypork/gamecore/input/KeyBindingPool.java b/src/mightypork/gamecore/input/KeyBindingPool.java index b515ff3..2abcc23 100644 --- a/src/mightypork/gamecore/input/KeyBindingPool.java +++ b/src/mightypork/gamecore/input/KeyBindingPool.java @@ -27,7 +27,7 @@ public class KeyBindingPool implements KeyBinder, KeyEventHandler { * @param task handler */ @Override - public void bindKey(KeyStroke stroke, Edge edge, Runnable task) + public void bindKey(KeyStroke stroke, Trigger edge, Runnable task) { for (final KeyBinding kb : bindings) { if (kb.matches(stroke)) { diff --git a/src/mightypork/gamecore/input/KeyStroke.java b/src/mightypork/gamecore/input/KeyStroke.java index b815b23..a53b944 100644 --- a/src/mightypork/gamecore/input/KeyStroke.java +++ b/src/mightypork/gamecore/input/KeyStroke.java @@ -1,11 +1,8 @@ package mightypork.gamecore.input; -import mightypork.gamecore.core.App; import mightypork.utils.string.StringUtil; -import org.lwjgl.input.Keyboard; - /** * Key stroke description @@ -14,8 +11,8 @@ import org.lwjgl.input.Keyboard; */ public class KeyStroke { - private int mod; - private int key; + private byte mod; + private Key key; /** @@ -24,7 +21,7 @@ public class KeyStroke { * @param key key code * @param modmask modifiers */ - public KeyStroke(int key, int modmask) { + public KeyStroke(Key key, int modmask) { setTo(key, modmask); } @@ -37,44 +34,37 @@ public class KeyStroke { * @param key key code * @param modmask modifiers */ - public void setTo(int key, int modmask) + public void setTo(Key key, int modmask) { this.key = key; - this.mod = modmask | Keys.keyToMod(key); // for mods alone + this.mod = (byte) (modmask | Keys.keyToMod(key)); // for mods alone } /** * Create a new keystroke without modifiers * - * @param key key code + * @param key key */ - public KeyStroke(int key) { + public KeyStroke(Key key) { this(key, Keys.MOD_NONE); } /** - * @return true if the keystroke is currently down & modifiers match. + * Get if the key is down and modifiers match + * + * @return true if the key is currently down & modifiers match */ public boolean isDown() { - boolean st = Keyboard.isKeyDown(key); - st &= (App.input().getActiveModKeys() == mod); - - return st; + return key.isDown() && (Keys.getActiveMod() == mod); } public String toDataString() { - String s = ""; - - if (mod != Keys.MOD_NONE) s = Keys.modToString(mod); - - s += Keys.keyToString(key); - - return s; + return Keys.modToString(mod) + "+" + key.getName(); } @@ -95,21 +85,21 @@ public class KeyStroke { final String keyStr = StringUtil.fromLastChar(dataString1, '+'); final String modStr = StringUtil.toLastChar(dataString1, '+'); - setTo(Keys.keyFromString(keyStr), Keys.modFromString(modStr)); + setTo(Keys.stringToKey(keyStr), Keys.stringToMod(modStr)); } else { - setTo(Keys.keyFromString(dataString1), Keys.MOD_NONE); + setTo(Keys.stringToKey(dataString1), Keys.MOD_NONE); } } - public int getKey() + public Key getKey() { return key; } - public int getMod() + public byte getMod() { return mod; } @@ -127,7 +117,7 @@ public class KeyStroke { { final int prime = 31; int result = 1; - result = prime * result + key; + result = prime * result + key.getCode(); result = prime * result + mod; return result; } @@ -140,7 +130,7 @@ public class KeyStroke { if (obj == null) return false; if (getClass() != obj.getClass()) return false; final KeyStroke other = (KeyStroke) obj; - if (key != other.key) return false; + if (key.getCode() != other.key.getCode()) return false; if (mod != other.mod) return false; return true; } diff --git a/src/mightypork/gamecore/input/Keys.java b/src/mightypork/gamecore/input/Keys.java index 58ea129..957c22f 100644 --- a/src/mightypork/gamecore/input/Keys.java +++ b/src/mightypork/gamecore/input/Keys.java @@ -1,142 +1,153 @@ package mightypork.gamecore.input; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; +import mightypork.gamecore.core.App; import mightypork.utils.logging.Log; -import org.lwjgl.input.Keyboard; - /** - * Key constants, from LWJGL {@link Keyboard} + * Key constants & translation table. * * @author Ondřej Hruška (MightyPork) */ public class Keys { //@formatter:off + public static final Key NONE = new Key("NONE", "NULL"); - public static final int NONE = Keyboard.KEY_NONE; - - public static final int ESCAPE = Keyboard.KEY_ESCAPE; - - public static final int NUM_1 = Keyboard.KEY_1; - public static final int NUM_2 = Keyboard.KEY_2; - public static final int NUM_3 = Keyboard.KEY_3; - public static final int NUM_4 = Keyboard.KEY_4; - public static final int NUM_5 = Keyboard.KEY_5; - public static final int NUM_6 = Keyboard.KEY_6; - public static final int NUM_7 = Keyboard.KEY_7; - public static final int NUM_8 = Keyboard.KEY_8; - public static final int NUM_9 = Keyboard.KEY_9; - public static final int NUM_0 = Keyboard.KEY_0; + public static final Key NUM_0 = new Key("0", "ZERO"); + public static final Key NUM_1 = new Key("1", "ONE"); + public static final Key NUM_2 = new Key("2", "TWO"); + public static final Key NUM_3 = new Key("3", "THREE"); + public static final Key NUM_4 = new Key("4", "FOUR"); + public static final Key NUM_5 = new Key("5", "FIVE"); + public static final Key NUM_6 = new Key("6", "SIX"); + public static final Key NUM_7 = new Key("7", "SEVEN"); + public static final Key NUM_8 = new Key("8", "EIGHT"); + public static final Key NUM_9 = new Key("9", "NINE"); - public static final int Q = Keyboard.KEY_Q; - public static final int W = Keyboard.KEY_W; - public static final int E = Keyboard.KEY_E; - public static final int R = Keyboard.KEY_R; - public static final int T = Keyboard.KEY_T; - public static final int Y = Keyboard.KEY_Y; - public static final int U = Keyboard.KEY_U; - public static final int I = Keyboard.KEY_I; - public static final int O = Keyboard.KEY_O; - public static final int P = Keyboard.KEY_P; - public static final int A = Keyboard.KEY_A; - public static final int S = Keyboard.KEY_S; - public static final int D = Keyboard.KEY_D; - public static final int F = Keyboard.KEY_F; - public static final int G = Keyboard.KEY_G; - public static final int H = Keyboard.KEY_H; - public static final int J = Keyboard.KEY_J; - public static final int K = Keyboard.KEY_K; - public static final int L = Keyboard.KEY_L; - public static final int Z = Keyboard.KEY_Z; - public static final int X = Keyboard.KEY_X; - public static final int C = Keyboard.KEY_C; - public static final int V = Keyboard.KEY_V; - public static final int B = Keyboard.KEY_B; - public static final int N = Keyboard.KEY_N; - public static final int M = Keyboard.KEY_M; + public static final Key Q = new Key("Q"); + public static final Key W = new Key("W"); + public static final Key E = new Key("E"); + public static final Key R = new Key("R"); + public static final Key T = new Key("T"); + public static final Key Y = new Key("Y"); + public static final Key U = new Key("U"); + public static final Key I = new Key("I"); + public static final Key O = new Key("O"); + public static final Key P = new Key("P"); + public static final Key A = new Key("A"); + public static final Key S = new Key("S"); + public static final Key D = new Key("D"); + public static final Key F = new Key("F"); + public static final Key G = new Key("G"); + public static final Key H = new Key("H"); + public static final Key J = new Key("J"); + public static final Key K = new Key("K"); + public static final Key L = new Key("L"); + public static final Key Z = new Key("Z"); + public static final Key X = new Key("X"); + public static final Key C = new Key("C"); + public static final Key V = new Key("V"); + public static final Key B = new Key("B"); + public static final Key N = new Key("N"); + public static final Key M = new Key("M"); - public static final int MINUS = Keyboard.KEY_MINUS; - public static final int EQUALS = Keyboard.KEY_EQUALS; - public static final int SLASH = Keyboard.KEY_SLASH; - public static final int BACKSLASH = Keyboard.KEY_BACKSLASH; - public static final int L_BRACKET = Keyboard.KEY_LBRACKET; - public static final int R_BRACKET = Keyboard.KEY_RBRACKET; - public static final int SEMICOLON = Keyboard.KEY_SEMICOLON; - public static final int APOSTROPHE = Keyboard.KEY_APOSTROPHE; - public static final int GRAVE = Keyboard.KEY_GRAVE; - public static final int COMMA = Keyboard.KEY_COMMA; - public static final int PERIOD = Keyboard.KEY_PERIOD; + public static final Key MINUS = new Key("MINUS", "DASH"); + public static final Key EQUALS = new Key("EQUALS"); + public static final Key SLASH = new Key("SLASH"); + public static final Key BACKSLASH = new Key("BACKSLASH"); + public static final Key BRACKET_LEFT = new Key("LBRACKET", "LEFT_BRACKET"); + public static final Key BRACKET_RIGHT = new Key("RBRACKET", "RIGHT_BRACKET"); + public static final Key SEMICOLON = new Key("SEMICOLON"); + public static final Key APOSTROPHE = new Key("APOSTROPHE", "APOS"); + public static final Key GRAVE = new Key("GRAVE", "ACCENT"); + public static final Key COMMA = new Key("COMMA"); + public static final Key PERIOD = new Key("PERIOD", "DOT", "POINT"); - public static final int SPACE = Keyboard.KEY_SPACE; - public static final int BACKSPACE = Keyboard.KEY_BACK; - public static final int TAB = Keyboard.KEY_TAB; + public static final Key SPACE = new Key("SPACE", "SPACEBAR"); + public static final Key BACKSPACE = new Key("BACKSPACE", "BACK"); + public static final Key TAB = new Key("TAB", "TABULATOR", "INDENT"); + public static final Key ESCAPE = new Key("ESC", "ESCAPE"); - public static final int F1 = Keyboard.KEY_F1; - public static final int F2 = Keyboard.KEY_F2; - public static final int F3 = Keyboard.KEY_F3; - public static final int F4 = Keyboard.KEY_F4; - public static final int F5 = Keyboard.KEY_F5; - public static final int F6 = Keyboard.KEY_F6; - public static final int F7 = Keyboard.KEY_F7; - public static final int F8 = Keyboard.KEY_F8; - public static final int F9 = Keyboard.KEY_F9; - public static final int F10 = Keyboard.KEY_F10; - public static final int F11 = Keyboard.KEY_F11; - public static final int F12 = Keyboard.KEY_F12; - public static final int F13 = Keyboard.KEY_F13; - public static final int F14 = Keyboard.KEY_F14; - public static final int F15 = Keyboard.KEY_F15; + // those probably can't be used + public static final Key APPS = new Key("APPS"); + public static final Key POWER = new Key("POWER"); + public static final Key SLEEP = new Key("SLEEP"); + public static final Key MENU = new Key("MENU"); + + public static final Key F1 = new Key("F1"); + public static final Key F2 = new Key("F2"); + public static final Key F3 = new Key("F3"); + public static final Key F4 = new Key("F4"); + public static final Key F5 = new Key("F5"); + public static final Key F6 = new Key("F6"); + public static final Key F7 = new Key("F7"); + public static final Key F8 = new Key("F8"); + public static final Key F9 = new Key("F9"); + public static final Key F10 = new Key("F10"); + public static final Key F11 = new Key("F11"); + public static final Key F12 = new Key("F12"); + public static final Key F13 = new Key("F13"); + public static final Key F14 = new Key("F14"); + public static final Key F15 = new Key("F15"); - public static final int CAPS_LOCK = Keyboard.KEY_CAPITAL; - public static final int SCROLL_LOCK = Keyboard.KEY_SCROLL; - public static final int NUM_LOCK = Keyboard.KEY_NUMLOCK; + // probably not possible to bind to those. + public static final Key CAPS_LOCK = new Key("CAPSLOCK", "CAPS", "CAPITAL"); + public static final Key SCROLL_LOCK = new Key("SCROLL", "SCROLL_LOCK"); + public static final Key NUM_LOCK = new Key("NUMLOCK"); - public static final int NUMPAD_MINUS = Keyboard.KEY_SUBTRACT; - public static final int NUMPAD_PLUSS = Keyboard.KEY_ADD; - public static final int NUMPAD_0 = Keyboard.KEY_NUMPAD0; - public static final int NUMPAD_1 = Keyboard.KEY_NUMPAD1; - public static final int NUMPAD_2 = Keyboard.KEY_NUMPAD2; - public static final int NUMPAD_3 = Keyboard.KEY_NUMPAD3; - public static final int NUMPAD_4 = Keyboard.KEY_NUMPAD4; - public static final int NUMPAD_5 = Keyboard.KEY_NUMPAD5; - public static final int NUMPAD_6 = Keyboard.KEY_NUMPAD6; - public static final int NUMPAD_7 = Keyboard.KEY_NUMPAD7; - public static final int NUMPAD_8 = Keyboard.KEY_NUMPAD8; - public static final int NUMPAD_9 = Keyboard.KEY_NUMPAD9; - public static final int NUMPAD_DECIMAL = Keyboard.KEY_DECIMAL; - public static final int NUMPAD_ENTER = Keyboard.KEY_NUMPADENTER; - public static final int NUMPAD_DIVIDE = Keyboard.KEY_DIVIDE; - public static final int NUMPAD_MULTIPLY = Keyboard.KEY_MULTIPLY; + public static final Key NUMPAD_MINUS = new Key("SUBTRACT", "NUMPAD_MINUS", "NUMPAD_SUBTRACT"); + public static final Key NUMPAD_PLUSS = new Key("ADD", "NUMPAD_PLUS", "NUMPAD_ADD"); + public static final Key NUMPAD_0 = new Key("NUMPAD_0"); + public static final Key NUMPAD_1 = new Key("NUMPAD_1"); + public static final Key NUMPAD_2 = new Key("NUMPAD_2"); + public static final Key NUMPAD_3 = new Key("NUMPAD_3"); + public static final Key NUMPAD_4 = new Key("NUMPAD_4"); + public static final Key NUMPAD_5 = new Key("NUMPAD_5"); + public static final Key NUMPAD_6 = new Key("NUMPAD_6"); + public static final Key NUMPAD_7 = new Key("NUMPAD_7"); + public static final Key NUMPAD_8 = new Key("NUMPAD_8"); + public static final Key NUMPAD_9 = new Key("NUMPAD_9"); + public static final Key NUMPAD_DECIMAL = new Key("DECIMAL", "NUMPAD_DECIMAL", "NUMPAD_PERIOD", "NUMPAD_POINT"); + public static final Key NUMPAD_ENTER = new Key("NUMPAD_ENTER", "NUMPADRETURN", "NUMPAD_RETURN"); + public static final Key NUMPAD_DIVIDE = new Key("DIVIDE", "NUMPAD_DIVIDE", "NUMPAD_SLASH"); + public static final Key NUMPAD_MULTIPLY = new Key("MULTIPLY", "NUMPAD_MULTIPLY", "NUMPAD_ASTERISK"); - public static final int L_CONTROL = Keyboard.KEY_LCONTROL; - public static final int R_CONTROL = Keyboard.KEY_RCONTROL; - public static final int L_ALT = Keyboard.KEY_LMENU; - public static final int R_ALT = Keyboard.KEY_RMENU; - public static final int L_SHIFT = Keyboard.KEY_LSHIFT; - public static final int R_SHIFT = Keyboard.KEY_RSHIFT; - public static final int L_META = Keyboard.KEY_LMETA; - public static final int R_META = Keyboard.KEY_RMETA; + public static final Key CONTROL_LEFT = new Key("LCONTROL", "LEFT_CONTROL", "LCTRL", "LEFT_CTRL"); + public static final Key CONTROL_RIGHT = new Key("RCONTROL", "RIGHT_CONTROL", "RCTRL", "RIGHT_CTRL"); + public static final Key ALT_LEFT = new Key("LALT", "LMENU", "LEFT_MENU"); + public static final Key ALT_RIGHT = new Key("RALT", "RMENU", "RIGHT_MENU"); + public static final Key SHIFT_LEFT = new Key("LSHIFT", "LEFT_SHIFT"); + public static final Key SHIFT_RIGHT = new Key("RSHIFT", "RIGHT_SHIFT"); + public static final Key META_LEFT = new Key("LMETA", "LEFT_META", "LWIN", "LEFT_WIN"); + public static final Key META_RIGHT = new Key("RMETA", "RIGHT_META", "RWIN", "RIGHT_WIN"); - public static final int UP = Keyboard.KEY_UP; - public static final int DOWN = Keyboard.KEY_DOWN; - public static final int LEFT = Keyboard.KEY_LEFT; - public static final int RIGHT = Keyboard.KEY_RIGHT; + public static final Key UP = new Key("UP", "ARROW_UP"); + public static final Key DOWN = new Key("DOWN", "ARROW_DOWN"); + public static final Key LEFT = new Key("LEFT", "ARROW_LEFT"); + public static final Key RIGHT = new Key("RIGHT", "ARROW_RIGHT"); - public static final int HOME = Keyboard.KEY_HOME; - public static final int END = Keyboard.KEY_END; + public static final Key HOME = new Key("HOME"); + public static final Key END = new Key("END"); - public static final int PAGE_UP = Keyboard.KEY_PRIOR; - public static final int PAGE_DOWN = Keyboard.KEY_NEXT; + public static final Key PAGE_UP = new Key("PAGE_UP", "PGUP", "PRIOR"); + public static final Key PAGE_DOWN = new Key("PAGE_DOWN", "PGDN", "NEXT"); - public static final int RETURN = Keyboard.KEY_RETURN; - public static final int PAUSE = Keyboard.KEY_PAUSE; - public static final int INSERT = Keyboard.KEY_INSERT; - public static final int DELETE = Keyboard.KEY_DELETE; + public static final Key RETURN = new Key("ENTER", "RETURN", "CR"); + public static final Key PAUSE = new Key("PAUSE", "BREAK"); + public static final Key INSERT = new Key("INSERT"); + public static final Key DELETE = new Key("DELETE"); + public static final Key SYSRQ = new Key("SYSRQ"); // wtf is this anyway? + // here go modifier bits public static final byte MOD_NONE = 0; public static final byte MOD_ALT = 1; public static final byte MOD_CONTROL = 2; @@ -144,122 +155,220 @@ public class Keys { public static final byte MOD_META = 8; //@formatter:on - private static HashMap loadAliasMap = new HashMap<>(); - private static HashMap saveAliasMap = new HashMap<>(); + private static Map lookupByCode = new HashMap<>(100); + private static List keyList = new ArrayList<>(100); static { - // init maps - loadAliasMap.put("ENTER", "RETURN"); - loadAliasMap.put("PGDN", "NEXT"); - loadAliasMap.put("PGUP", "PRIOR"); - loadAliasMap.put("PAGE_DOWN", "NEXT"); - loadAliasMap.put("PAGE_UP", "PRIOR"); - loadAliasMap.put("SPACEBAR", "SPACE"); - loadAliasMap.put("ESC", "ESCAPE"); - loadAliasMap.put("NUMPAD_DIVIDE", "DIVIDE"); - loadAliasMap.put("NUMPAD_MULTIPLY", "MULTIPLY"); - loadAliasMap.put("NUMPAD_ADD", "ADD"); - loadAliasMap.put("NUMPAD_SUBTRACT", "SUBTRACT"); - loadAliasMap.put("CAPS_LOCK", "CAPITAL"); - loadAliasMap.put("SCROLL_LOCK", "SROLL"); - loadAliasMap.put("NUM_LOCK", "NUMLOCK"); - loadAliasMap.put("BACKSPACE", "BACK"); + // define none key + NONE.setCode(0); - saveAliasMap.put("RETURN", "ENTER"); - saveAliasMap.put("ESCAPE", "ESC"); - saveAliasMap.put("NEXT", "PGDN"); - saveAliasMap.put("PRIOR", "PGUP"); - saveAliasMap.put("DIVIDE", "NUMPAD_DIVIDE"); - saveAliasMap.put("MULTIPLY", "NUMPAD_MULTIPLY"); - saveAliasMap.put("ADD", "NUMPAD_ADD"); - saveAliasMap.put("SUBTRACT", "NUMPAD_SUBTRACT"); - saveAliasMap.put("CAPITAL", "CAPS_LOCK"); - saveAliasMap.put("SROLL", "SCROLL_LOCK"); - saveAliasMap.put("NUMLOCK", "NUM_LOCK"); - saveAliasMap.put("BACK", "BACKSPACE"); + // Use reflection to find keys + Field[] fields = Keys.class.getFields(); + try { + for (Field field : fields) { + int modifiers = field.getModifiers(); + if (Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers) && Modifier.isFinal(modifiers) && field.getType().equals(Key.class)) { + + keyList.add((Key) field.get(null)); + } + } + } catch (Exception e) {} } - public static int keyFromString(String key) + /** + * Build lookup table by key codes + */ + private static void buildCodeLookupTable() { - String key1 = key; - if (loadAliasMap.containsKey(key1)) key1 = loadAliasMap.get(key1); + lookupByCode.clear(); + + lookupByCode.put(NONE.getCode(), NONE); - final int index = Keyboard.getKeyIndex(key1); - if (index == Keys.NONE && !key1.equals("NONE")) { - Log.w("Could not parse key: " + key + " (" + key1 + ")"); + for (Key k : keyList) { + if (!k.isDefined()) continue; + if (!lookupByCode.containsKey(k.getCode())) { + lookupByCode.put(k.getCode(), k); + } + } + + if (lookupByCode.size() == 1) { + // NONE alone + Log.w("Key codes are not ininitialized."); + } + } + + + /** + * Convert a key name to a key code. + * + * @param keyStr key name + * @return the key, or NONE if none matches + */ + public static Key stringToKey(String keyStr) + { + for (Key k : keyList) { + if (k.matches(keyStr)) return k; } - return index; + + Log.w("No such key: " + keyStr); + + return NONE; } - public static int modFromString(String mod) + /** + * Convert a mod description to a mod mask. A mod description is a string + * containing CTRL,ALT,SHIFT,META, as in CTRL+ALT.
+ * If none of the mod identifiers are found in the description, a MOD_NONE + * is returned.
+ * This method is used for parsing keystroke, together with nameToKey(). + * + * @param modStr mod description (eg. CTRL+ALT) + * @return mod mask + */ + public static int stringToMod(String modStr) { - int mod_mask = Keys.MOD_NONE; + int mod_mask = MOD_NONE; + + modStr = modStr.toUpperCase(); - if (mod.contains("CTRL")) { - mod_mask |= Keys.MOD_CONTROL; + if (modStr.contains("CTRL")) { + mod_mask |= MOD_CONTROL; } - if (mod.contains("ALT")) { - mod_mask |= Keys.MOD_ALT; + if (modStr.contains("ALT")) { + mod_mask |= MOD_ALT; } - if (mod.contains("SHIFT")) { - mod_mask |= Keys.MOD_SHIFT; + if (modStr.contains("SHIFT")) { + mod_mask |= MOD_SHIFT; } - if (mod.contains("META") || mod.contains("WIN")) { - mod_mask |= Keys.MOD_META; + if (modStr.contains("META") || modStr.contains("WIN")) { + mod_mask |= MOD_META; } return mod_mask; } - public static String modToString(int mod) + /** + * Convert a mod mask to a mod description, in a format recognized by + * stringToMod() - joining mods by +. + * + * @param modMask mod mask + * @return mods as string (CTRL+ALT) + */ + public static String modToString(int modMask) { String s = ""; - if ((mod & Keys.MOD_CONTROL) != 0) { - s += "CTRL+"; + if ((modMask & MOD_CONTROL) != 0) { + s += "CTRL"; } - if ((mod & Keys.MOD_ALT) != 0) { - s += "ALT+"; + if ((modMask & MOD_ALT) != 0) { + if (!s.isEmpty()) s += "+"; + s += "ALT"; } - if ((mod & Keys.MOD_SHIFT) != 0) { - s += "SHIFT+"; + if ((modMask & MOD_SHIFT) != 0) { + if (!s.isEmpty()) s += "+"; + s += "SHIFT"; } - if ((mod & Keys.MOD_META) != 0) { - s += "META+"; + if ((modMask & MOD_META) != 0) { + if (!s.isEmpty()) s += "+"; + s += "META"; } return s; } - public static String keyToString(int key) + /** + * Get a {@link Key} for key code. + * + * @param keyCode code + * @return key instance, or NONE if no key matches. + */ + public static Key codeToKey(int keyCode) { - String s = Keyboard.getKeyName(key); - if (saveAliasMap.containsKey(s)) s = saveAliasMap.get(s); - if (s == null) { - Log.w("Could not stringify key: " + key); - s = "NONE"; + if (lookupByCode.isEmpty()) buildCodeLookupTable(); + + Key k = lookupByCode.get(keyCode); + + if (k == null) { + Log.w("No key for code: " + keyCode); + k = NONE; } - return s.toUpperCase(); + + return k; } - public static int keyToMod(int key) + /** + * Convert a key to mod mask, in case the key is one of the mod keys. + * + * @param key the key + * @return mod mask corresponding to the key + */ + public static int keyToMod(Key key) { - if (key == L_SHIFT || key == R_SHIFT) return MOD_SHIFT; - if (key == L_CONTROL || key == R_CONTROL) return MOD_CONTROL; - if (key == L_ALT || key == R_ALT) return MOD_ALT; - if (key == L_META || key == R_META) return MOD_META; + + if (key == SHIFT_LEFT || key == SHIFT_RIGHT) return MOD_SHIFT; + + if (key == CONTROL_LEFT || key == CONTROL_RIGHT) return MOD_CONTROL; + if (key == ALT_LEFT || key == ALT_RIGHT) return MOD_ALT; + if (key == META_LEFT || key == META_RIGHT) return MOD_META; + return MOD_NONE; } + + /** + * Get if the given key is down (call it's "isDown()" method).
+ * This method is here just for completeness, since the getActiveMod() is + * also here. + * + * @param key the key to check + * @return true if the key is down + */ + public static boolean isKeyDown(Key key) + { + return key.isDown(); + } + + + /** + * Get currently active key modifiers + * + * @return active mod mask (mod bits ored) + */ + public static int getActiveMod() + { + int mods = 0; + + InputModule inp = App.input(); + + if (inp.isKeyDown(Keys.ALT_LEFT) || inp.isKeyDown(Keys.ALT_RIGHT)) { + mods |= Keys.MOD_ALT; + } + + if (inp.isKeyDown(Keys.SHIFT_LEFT) || inp.isKeyDown(Keys.SHIFT_RIGHT)) { + mods |= Keys.MOD_SHIFT; + } + + if (inp.isKeyDown(Keys.CONTROL_LEFT) || inp.isKeyDown(Keys.CONTROL_RIGHT)) { + mods |= Keys.MOD_CONTROL; + } + + if (inp.isKeyDown(Keys.META_LEFT) || inp.isKeyDown(Keys.META_RIGHT)) { + mods |= Keys.MOD_META; + } + + return mods; + } + } diff --git a/src/mightypork/gamecore/input/Edge.java b/src/mightypork/gamecore/input/Trigger.java similarity index 90% rename from src/mightypork/gamecore/input/Edge.java rename to src/mightypork/gamecore/input/Trigger.java index ae96ebb..5ac5216 100644 --- a/src/mightypork/gamecore/input/Edge.java +++ b/src/mightypork/gamecore/input/Trigger.java @@ -4,7 +4,7 @@ package mightypork.gamecore.input; /** * Type of keystroke (falling / rising edge) */ -public enum Edge +public enum Trigger { /** Activated by falling edge (press) */ FALLING, diff --git a/src/mightypork/rogue/RogueApp.java b/src/mightypork/rogue/RogueApp.java index 4a65621..ab06199 100644 --- a/src/mightypork/rogue/RogueApp.java +++ b/src/mightypork/rogue/RogueApp.java @@ -15,7 +15,7 @@ import mightypork.gamecore.graphics.GraphicsModule; import mightypork.gamecore.gui.events.ViewportChangeEvent; import mightypork.gamecore.gui.events.ViewportChangeListener; import mightypork.gamecore.gui.screens.ScreenRegistry; -import mightypork.gamecore.input.Edge; +import mightypork.gamecore.input.Trigger; import mightypork.gamecore.resources.Res; import mightypork.rogue.RogueStateManager.RogueState; import mightypork.rogue.events.RogueStateRequest; @@ -117,7 +117,7 @@ public final class RogueApp extends BaseApp implements ViewportChangeListener, S private void bindEventToKey(final BusEvent event, String strokeName) { - getInput().bindKey(Config.getKeyStroke(strokeName), Edge.RISING, new Runnable() { + getInput().bindKey(Config.getKeyStroke(strokeName), Trigger.RISING, new Runnable() { @Override public void run() diff --git a/src/mightypork/rogue/screens/FpsOverlay.java b/src/mightypork/rogue/screens/FpsOverlay.java index 7fcb007..63eebc2 100644 --- a/src/mightypork/rogue/screens/FpsOverlay.java +++ b/src/mightypork/rogue/screens/FpsOverlay.java @@ -7,7 +7,7 @@ import mightypork.gamecore.graphics.fonts.IFont; import mightypork.gamecore.gui.Action; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.Overlay; -import mightypork.gamecore.input.Edge; +import mightypork.gamecore.input.Trigger; import mightypork.gamecore.resources.Res; import mightypork.utils.math.AlignX; import mightypork.utils.math.color.pal.RGB; @@ -33,7 +33,7 @@ public class FpsOverlay extends Overlay { /* * Toggle key: F3 */ - bindKey(Config.getKeyStroke("global.fps_meter"), Edge.RISING, new Action() { + bindKey(Config.getKeyStroke("global.fps_meter"), Trigger.RISING, new Action() { @Override public void execute() diff --git a/src/mightypork/rogue/screens/game/LayerAskSave.java b/src/mightypork/rogue/screens/game/LayerAskSave.java index bc9d3e0..8181762 100644 --- a/src/mightypork/rogue/screens/game/LayerAskSave.java +++ b/src/mightypork/rogue/screens/game/LayerAskSave.java @@ -12,7 +12,7 @@ import mightypork.gamecore.gui.components.layout.linear.LinearLayout; import mightypork.gamecore.gui.components.painters.QuadPainter; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.impl.FadingLayer; -import mightypork.gamecore.input.Edge; +import mightypork.gamecore.input.Trigger; import mightypork.gamecore.resources.Res; import mightypork.rogue.screens.game.ScreenGame.GScrState; import mightypork.rogue.world.WorldProvider; @@ -121,13 +121,13 @@ public class LayerAskSave extends FadingLayer { btn2.setAction(discard); btn3.setAction(cancel); - bindKey(Config.getKeyStroke("general.close"), Edge.RISING, cancel); - bindKey(Config.getKeyStroke("general.cancel"), Edge.RISING, cancel); + bindKey(Config.getKeyStroke("general.close"), Trigger.RISING, cancel); + bindKey(Config.getKeyStroke("general.cancel"), Trigger.RISING, cancel); - bindKey(Config.getKeyStroke("general.yes"), Edge.RISING, save); - bindKey(Config.getKeyStroke("general.confirm"), Edge.RISING, save); + bindKey(Config.getKeyStroke("general.yes"), Trigger.RISING, save); + bindKey(Config.getKeyStroke("general.confirm"), Trigger.RISING, save); - bindKey(Config.getKeyStroke("general.no"), Edge.RISING, discard); + bindKey(Config.getKeyStroke("general.no"), Trigger.RISING, discard); } diff --git a/src/mightypork/rogue/screens/game/LayerDeath.java b/src/mightypork/rogue/screens/game/LayerDeath.java index deaef42..792d6ca 100644 --- a/src/mightypork/rogue/screens/game/LayerDeath.java +++ b/src/mightypork/rogue/screens/game/LayerDeath.java @@ -14,7 +14,7 @@ import mightypork.gamecore.gui.components.painters.ImagePainter; import mightypork.gamecore.gui.components.painters.QuadPainter; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.impl.FadingLayer; -import mightypork.gamecore.input.Edge; +import mightypork.gamecore.input.Trigger; import mightypork.gamecore.resources.Res; import mightypork.rogue.RogueStateManager.RogueState; import mightypork.rogue.events.RogueStateRequest; @@ -89,9 +89,9 @@ public class LayerDeath extends FadingLayer { btn1.setAction(load); btn2.setAction(quit); - bindKey(Config.getKeyStroke("game.load"), Edge.RISING, load); - bindKey(Config.getKeyStroke("general.confirm"), Edge.RISING, load); - bindKey(Config.getKeyStroke("general.close"), Edge.RISING, quit); + bindKey(Config.getKeyStroke("game.load"), Trigger.RISING, load); + bindKey(Config.getKeyStroke("general.confirm"), Trigger.RISING, load); + bindKey(Config.getKeyStroke("general.close"), Trigger.RISING, quit); } diff --git a/src/mightypork/rogue/screens/game/LayerInv.java b/src/mightypork/rogue/screens/game/LayerInv.java index 47f73aa..831685f 100644 --- a/src/mightypork/rogue/screens/game/LayerInv.java +++ b/src/mightypork/rogue/screens/game/LayerInv.java @@ -8,7 +8,7 @@ import mightypork.gamecore.gui.components.layout.GridLayout; import mightypork.gamecore.gui.components.painters.QuadPainter; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.impl.FadingLayer; -import mightypork.gamecore.input.Edge; +import mightypork.gamecore.input.Trigger; import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.resources.Res; import mightypork.rogue.screens.game.ScreenGame.GScrState; @@ -155,7 +155,7 @@ public class LayerInv extends FadingLayer { gl.put(txp2, pos, 0, 1, 1); txp2.setVPaddingPercent(25); - bindKey(keyClose, Edge.RISING, new Runnable() { + bindKey(keyClose, Trigger.RISING, new Runnable() { @Override public void run() @@ -165,7 +165,7 @@ public class LayerInv extends FadingLayer { } }); - bindKey(keyUse, Edge.RISING, new Runnable() { + bindKey(keyUse, Trigger.RISING, new Runnable() { @Override public void run() @@ -178,7 +178,7 @@ public class LayerInv extends FadingLayer { } }); - bindKey(keyDrop, Edge.RISING, new Runnable() { + bindKey(keyDrop, Trigger.RISING, new Runnable() { @Override public void run() @@ -233,7 +233,7 @@ public class LayerInv extends FadingLayer { private void setupGridWalkKeys() { - bindKey(Config.getKeyStroke("game.inv.move.left"), Edge.RISING, new Runnable() { + bindKey(Config.getKeyStroke("game.inv.move.left"), Trigger.RISING, new Runnable() { @Override public void run() @@ -250,7 +250,7 @@ public class LayerInv extends FadingLayer { } }); - bindKey(Config.getKeyStroke("game.inv.move.right"), Edge.RISING, new Runnable() { + bindKey(Config.getKeyStroke("game.inv.move.right"), Trigger.RISING, new Runnable() { @Override public void run() @@ -267,7 +267,7 @@ public class LayerInv extends FadingLayer { } }); - bindKey(Config.getKeyStroke("game.inv.move.up"), Edge.RISING, new Runnable() { + bindKey(Config.getKeyStroke("game.inv.move.up"), Trigger.RISING, new Runnable() { @Override public void run() @@ -284,7 +284,7 @@ public class LayerInv extends FadingLayer { } }); - bindKey(Config.getKeyStroke("game.inv.move.down"), Edge.RISING, new Runnable() { + bindKey(Config.getKeyStroke("game.inv.move.down"), Trigger.RISING, new Runnable() { @Override public void run() diff --git a/src/mightypork/rogue/screens/game/LayerWin.java b/src/mightypork/rogue/screens/game/LayerWin.java index 331d2c5..d5145fd 100644 --- a/src/mightypork/rogue/screens/game/LayerWin.java +++ b/src/mightypork/rogue/screens/game/LayerWin.java @@ -13,7 +13,7 @@ import mightypork.gamecore.gui.components.painters.ImagePainter; import mightypork.gamecore.gui.components.painters.QuadPainter; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.impl.FadingLayer; -import mightypork.gamecore.input.Edge; +import mightypork.gamecore.input.Trigger; import mightypork.gamecore.resources.Res; import mightypork.rogue.RogueStateManager.RogueState; import mightypork.rogue.events.RogueStateRequest; @@ -69,8 +69,8 @@ public class LayerWin extends FadingLayer { btn1.setAction(quit); - bindKey(Config.getKeyStroke("general.confirm"), Edge.RISING, quit); - bindKey(Config.getKeyStroke("general.close"), Edge.RISING, quit); + bindKey(Config.getKeyStroke("general.confirm"), Trigger.RISING, quit); + bindKey(Config.getKeyStroke("general.close"), Trigger.RISING, quit); } diff --git a/src/mightypork/rogue/screens/game/ScreenGame.java b/src/mightypork/rogue/screens/game/ScreenGame.java index 74c2b66..b75578a 100644 --- a/src/mightypork/rogue/screens/game/ScreenGame.java +++ b/src/mightypork/rogue/screens/game/ScreenGame.java @@ -7,7 +7,7 @@ import mightypork.gamecore.core.config.Config; import mightypork.gamecore.core.events.UserQuitRequest; import mightypork.gamecore.gui.Action; import mightypork.gamecore.gui.ActionGroup; -import mightypork.gamecore.input.Edge; +import mightypork.gamecore.input.Trigger; import mightypork.gamecore.resources.Res; import mightypork.rogue.Const; import mightypork.rogue.RogueStateManager.RogueState; @@ -246,17 +246,17 @@ public class ScreenGame extends RogueScreen implements PlayerDeathHandler, GameW addLayer(worldLayer = new LayerMapView(this)); addLayer(askSaveLayer = new LayerAskSave(this)); - bindKey(Config.getKeyStroke("game.pause"), Edge.RISING, actionTogglePause); + bindKey(Config.getKeyStroke("game.pause"), Trigger.RISING, actionTogglePause); - bindKey(Config.getKeyStroke("game.inventory"), Edge.RISING, actionToggleInv); - bindKey(Config.getKeyStroke("game.drop"), Edge.RISING, actionDropLastPickedItem); - bindKey(Config.getKeyStroke("game.eat"), Edge.RISING, actionEat); - bindKey(Config.getKeyStroke("game.minimap"), Edge.RISING, actionToggleMinimap); - bindKey(Config.getKeyStroke("game.zoom"), Edge.RISING, actionToggleZoom); + bindKey(Config.getKeyStroke("game.inventory"), Trigger.RISING, actionToggleInv); + bindKey(Config.getKeyStroke("game.drop"), Trigger.RISING, actionDropLastPickedItem); + bindKey(Config.getKeyStroke("game.eat"), Trigger.RISING, actionEat); + bindKey(Config.getKeyStroke("game.minimap"), Trigger.RISING, actionToggleMinimap); + bindKey(Config.getKeyStroke("game.zoom"), Trigger.RISING, actionToggleZoom); - bindKey(Config.getKeyStroke("game.load"), Edge.RISING, actionLoad); - bindKey(Config.getKeyStroke("game.save"), Edge.RISING, actionSave); - bindKey(Config.getKeyStroke("game.quit"), Edge.RISING, actionMenu); + bindKey(Config.getKeyStroke("game.load"), Trigger.RISING, actionLoad); + bindKey(Config.getKeyStroke("game.save"), Trigger.RISING, actionSave); + bindKey(Config.getKeyStroke("game.quit"), Trigger.RISING, actionMenu); // bindKey(new KeyStroke(Keys.W), Edge.RISING, new Runnable() { // @@ -284,7 +284,7 @@ public class ScreenGame extends RogueScreen implements PlayerDeathHandler, GameW worldActions.setEnabled(true); // CHEAT - X-ray - bindKey(Config.getKeyStroke("game.cheat.xray"), Edge.RISING, new Runnable() { + bindKey(Config.getKeyStroke("game.cheat.xray"), Trigger.RISING, new Runnable() { @Override public void run() diff --git a/src/mightypork/rogue/screens/menu/ScreenMainMenu.java b/src/mightypork/rogue/screens/menu/ScreenMainMenu.java index 1717067..6288ffc 100644 --- a/src/mightypork/rogue/screens/menu/ScreenMainMenu.java +++ b/src/mightypork/rogue/screens/menu/ScreenMainMenu.java @@ -12,7 +12,7 @@ import mightypork.gamecore.gui.components.painters.ImagePainter; import mightypork.gamecore.gui.components.painters.QuadPainter; import mightypork.gamecore.gui.screens.Screen; import mightypork.gamecore.gui.screens.ScreenLayer; -import mightypork.gamecore.input.Edge; +import mightypork.gamecore.input.Trigger; import mightypork.gamecore.resources.Res; import mightypork.rogue.RogueStateManager.RogueState; import mightypork.rogue.events.RogueStateRequest; @@ -103,7 +103,7 @@ public class ScreenMainMenu extends RogueScreen { }); rows.add(btn, 2); - bindKey(Config.getKeyStroke("general.close"), Edge.RISING, new Runnable() { + bindKey(Config.getKeyStroke("general.close"), Trigger.RISING, new Runnable() { @Override public void run() diff --git a/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java b/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java index 6da2deb..649fe93 100644 --- a/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java +++ b/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java @@ -8,7 +8,7 @@ import mightypork.gamecore.gui.components.painters.QuadPainter; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.Screen; import mightypork.gamecore.gui.screens.ScreenLayer; -import mightypork.gamecore.input.Edge; +import mightypork.gamecore.input.Trigger; import mightypork.gamecore.resources.Res; import mightypork.rogue.RogueStateManager.RogueState; import mightypork.rogue.events.RogueStateRequest; @@ -76,7 +76,7 @@ public class ScreenSelectWorld extends RogueScreen { rows.add(slot3); // escape to quitn from here - bindKey(Config.getKeyStroke("general.close"), Edge.RISING, new Runnable() { + bindKey(Config.getKeyStroke("general.close"), Trigger.RISING, new Runnable() { @Override public void run() diff --git a/src/mightypork/rogue/screens/story/ScreenStory.java b/src/mightypork/rogue/screens/story/ScreenStory.java index 74c7098..3f297c8 100644 --- a/src/mightypork/rogue/screens/story/ScreenStory.java +++ b/src/mightypork/rogue/screens/story/ScreenStory.java @@ -10,7 +10,7 @@ import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.Screen; import mightypork.gamecore.gui.screens.ScreenLayer; import mightypork.gamecore.gui.screens.impl.LayerColor; -import mightypork.gamecore.input.Edge; +import mightypork.gamecore.input.Trigger; import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.input.Keys; import mightypork.gamecore.input.events.MouseButtonEvent; @@ -213,11 +213,11 @@ public class ScreenStory extends RogueScreen implements MouseButtonHandler { addLayer(new LayerColor(this, Color.fromHex(0x040c1e), 0)); addLayer(slideLayer = new LayerSlide(this)); - bindKey(new KeyStroke(Keys.SPACE), Edge.RISING, next); - bindKey(new KeyStroke(Keys.RIGHT), Edge.RISING, next); - bindKey(new KeyStroke(Keys.BACKSPACE), Edge.RISING, prev); - bindKey(new KeyStroke(Keys.LEFT), Edge.RISING, prev); - bindKey(Config.getKeyStroke("general.close"), Edge.RISING, close); + bindKey(new KeyStroke(Keys.SPACE), Trigger.RISING, next); + bindKey(new KeyStroke(Keys.RIGHT), Trigger.RISING, next); + bindKey(new KeyStroke(Keys.BACKSPACE), Trigger.RISING, prev); + bindKey(new KeyStroke(Keys.LEFT), Trigger.RISING, prev); + bindKey(Config.getKeyStroke("general.close"), Trigger.RISING, close); } private int slide = 0; diff --git a/src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java b/src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java index 672dcad..242f9eb 100644 --- a/src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java +++ b/src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java @@ -7,7 +7,7 @@ import java.util.List; import mightypork.gamecore.backends.lwjgl.LwjglInputModule; import mightypork.gamecore.core.config.Config; -import mightypork.gamecore.input.Edge; +import mightypork.gamecore.input.Trigger; import mightypork.gamecore.input.KeyBindingPool; import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.input.Keys; @@ -63,7 +63,7 @@ public class MIPKeyboard extends MapInteractionPlugin implements DelegatingClien for (int i = 0; i < 4; i++) { final int j = i; - kbp.bindKey(keys[i], Edge.RISING, new Runnable() { + kbp.bindKey(keys[i], Trigger.RISING, new Runnable() { @Override public void run() @@ -103,7 +103,7 @@ public class MIPKeyboard extends MapInteractionPlugin implements DelegatingClien if (mapView.plc.getPlayer().getMoveProgress() < 0.8) return false; - if (LwjglInputModule.getActiveModKeys() != Keys.MOD_NONE) return false; + if (LwjglInputModule.getActiveKeyMod() != Keys.MOD_NONE) return false; for (int i = 0; i < 4; i++) { if (keys[i].isDown()) {