package mightypork.gamecore.input; import mightypork.utils.string.StringUtil; import org.lwjgl.input.Keyboard; /** * Key stroke trigger * * @author Ondřej Hruška (MightyPork) */ public class KeyStroke { //implements Pollable public static enum Edge { FALLING, RISING; } private int mod; private int key; /** * KeyStroke * * @param key key code * @param mod_mask mods mask */ public KeyStroke(int key, int mod_mask) { setTo(key, mod_mask); } /** * Rising edge keystroke * * @param key key code */ public KeyStroke(int key) { this(key, Keys.MOD_NONE); } /** * @return true if the keystroke is currently down & modifiers match. */ public boolean isDown() { boolean st = Keyboard.isKeyDown(key); st &= (InputSystem.getActiveModKeys() == mod); return st; } public void setTo(int key, int mod_mask) { this.key = key; this.mod = mod_mask | Keys.keyToMod(key); // for mods alone } public String toDataString() { String s = ""; if (mod != Keys.MOD_NONE) s = Keys.modToString(mod); s += Keys.keyToString(key); return s; } public static KeyStroke createFromDataString(String dataString) { final KeyStroke ks = new KeyStroke(Keys.NONE, Keys.MOD_NONE); ks.fromDataString(dataString); return ks; } public void fromDataString(String dataString) { final String dataString1 = dataString.toUpperCase().replace('-', '+').replaceAll("[^A-Z0-9_+]", ""); if (dataString1.contains("+")) { final String keyStr = StringUtil.fromLastChar(dataString1, '+'); final String modStr = StringUtil.toLastChar(dataString1, '+'); setTo(Keys.keyFromString(keyStr), Keys.modFromString(modStr)); } else { setTo(Keys.keyFromString(dataString1), Keys.MOD_NONE); } } public int getKey() { return key; } public int getMod() { return mod; } @Override public String toString() { return toDataString(); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + key; result = prime * result + mod; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final KeyStroke other = (KeyStroke) obj; if (key != other.key) return false; if (mod != other.mod) return false; return true; } }