package edu.gatech.cs2340.trydent.internal;
import java.awt.event.KeyEvent;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javafx.scene.input.KeyCode;
/**
* A static keyboard class for ease of using key events.
*
*/
public class KeyboardImpl {
private static Set<KeyCode> down = new HashSet<>();
private static Set<KeyCode> released = new HashSet<>();
private static Set<KeyCode> pressed = new HashSet<>();
private static Set<KeyCode> lastDownBuffer = new HashSet<>();
private static Set<KeyCode> downBuffer = new HashSet<>();
private static Set<KeyCode> releasedBuffer = new HashSet<>();
private static Set<KeyCode> pressedBuffer = new HashSet<>();
private static Map<Integer, KeyCode> swingToJavaFXKeyMap;
static {
swingToJavaFXKeyMap = new HashMap<>();
swingToJavaFXKeyMap.put(KeyEvent.VK_A, KeyCode.A);
swingToJavaFXKeyMap.put(KeyEvent.VK_ACCEPT, KeyCode.ACCEPT);
swingToJavaFXKeyMap.put(KeyEvent.VK_ADD, KeyCode.ADD);
swingToJavaFXKeyMap.put(KeyEvent.VK_AGAIN, KeyCode.AGAIN);
swingToJavaFXKeyMap.put(KeyEvent.VK_ALL_CANDIDATES, KeyCode.ALL_CANDIDATES);
swingToJavaFXKeyMap.put(KeyEvent.VK_ALPHANUMERIC, KeyCode.ALPHANUMERIC);
swingToJavaFXKeyMap.put(KeyEvent.VK_ALT, KeyCode.ALT);
swingToJavaFXKeyMap.put(KeyEvent.VK_ALT_GRAPH, KeyCode.ALT_GRAPH);
swingToJavaFXKeyMap.put(KeyEvent.VK_AMPERSAND, KeyCode.AMPERSAND);
swingToJavaFXKeyMap.put(KeyEvent.VK_ASTERISK, KeyCode.ASTERISK);
swingToJavaFXKeyMap.put(KeyEvent.VK_AT, KeyCode.AT);
swingToJavaFXKeyMap.put(KeyEvent.VK_B, KeyCode.B);
swingToJavaFXKeyMap.put(KeyEvent.VK_BACK_QUOTE, KeyCode.BACK_QUOTE);
swingToJavaFXKeyMap.put(KeyEvent.VK_BACK_SLASH, KeyCode.BACK_SLASH);
swingToJavaFXKeyMap.put(KeyEvent.VK_BACK_SPACE, KeyCode.BACK_SPACE);
swingToJavaFXKeyMap.put(KeyEvent.VK_BEGIN, KeyCode.BEGIN);
swingToJavaFXKeyMap.put(KeyEvent.VK_BRACELEFT, KeyCode.BRACELEFT);
swingToJavaFXKeyMap.put(KeyEvent.VK_BRACERIGHT, KeyCode.BRACERIGHT);
swingToJavaFXKeyMap.put(KeyEvent.VK_C, KeyCode.C);
swingToJavaFXKeyMap.put(KeyEvent.VK_CANCEL, KeyCode.CANCEL);
swingToJavaFXKeyMap.put(KeyEvent.VK_CAPS_LOCK, KeyCode.CAPS);
// swingToJavaFXKeyMap.put(, KeyCode.CHANNEL_DOWN);
// swingToJavaFXKeyMap.put(, KeyCode.CHANNEL_UP);
swingToJavaFXKeyMap.put(KeyEvent.VK_CIRCUMFLEX, KeyCode.CIRCUMFLEX);
swingToJavaFXKeyMap.put(KeyEvent.VK_CLEAR, KeyCode.CLEAR);
swingToJavaFXKeyMap.put(KeyEvent.VK_CLOSE_BRACKET, KeyCode.CLOSE_BRACKET);
swingToJavaFXKeyMap.put(KeyEvent.VK_CODE_INPUT, KeyCode.CODE_INPUT);
swingToJavaFXKeyMap.put(KeyEvent.VK_COLON, KeyCode.COLON);
// swingToJavaFXKeyMap.put(, KeyCode.COLORED_KEY_0);
// swingToJavaFXKeyMap.put(, KeyCode.COLORED_KEY_1);
// swingToJavaFXKeyMap.put(, KeyCode.COLORED_KEY_2);
// swingToJavaFXKeyMap.put(, KeyCode.COLORED_KEY_3);
swingToJavaFXKeyMap.put(KeyEvent.VK_COMMA, KeyCode.COMMA);
// swingToJavaFXKeyMap.put(KeyEvent.VK_META, KeyCode.COMMAND);
swingToJavaFXKeyMap.put(KeyEvent.VK_COMPOSE, KeyCode.COMPOSE);
swingToJavaFXKeyMap.put(KeyEvent.VK_CONTEXT_MENU, KeyCode.CONTEXT_MENU);
swingToJavaFXKeyMap.put(KeyEvent.VK_CONTROL, KeyCode.CONTROL);
swingToJavaFXKeyMap.put(KeyEvent.VK_CONVERT, KeyCode.CONVERT);
swingToJavaFXKeyMap.put(KeyEvent.VK_COPY, KeyCode.COPY);
swingToJavaFXKeyMap.put(KeyEvent.VK_CUT, KeyCode.CUT);
swingToJavaFXKeyMap.put(KeyEvent.VK_D, KeyCode.D);
swingToJavaFXKeyMap.put(KeyEvent.VK_DEAD_ABOVEDOT, KeyCode.DEAD_ABOVEDOT);
swingToJavaFXKeyMap.put(KeyEvent.VK_DEAD_ABOVERING, KeyCode.DEAD_ABOVERING);
swingToJavaFXKeyMap.put(KeyEvent.VK_DEAD_ACUTE, KeyCode.DEAD_ACUTE);
swingToJavaFXKeyMap.put(KeyEvent.VK_DEAD_BREVE, KeyCode.DEAD_BREVE);
swingToJavaFXKeyMap.put(KeyEvent.VK_DEAD_CARON, KeyCode.DEAD_CARON);
swingToJavaFXKeyMap.put(KeyEvent.VK_DEAD_CEDILLA, KeyCode.DEAD_CEDILLA);
swingToJavaFXKeyMap.put(KeyEvent.VK_DEAD_CIRCUMFLEX, KeyCode.DEAD_CIRCUMFLEX);
swingToJavaFXKeyMap.put(KeyEvent.VK_DEAD_DIAERESIS, KeyCode.DEAD_DIAERESIS);
swingToJavaFXKeyMap.put(KeyEvent.VK_DEAD_DOUBLEACUTE, KeyCode.DEAD_DOUBLEACUTE);
swingToJavaFXKeyMap.put(KeyEvent.VK_DEAD_GRAVE, KeyCode.DEAD_GRAVE);
swingToJavaFXKeyMap.put(KeyEvent.VK_DEAD_IOTA, KeyCode.DEAD_IOTA);
swingToJavaFXKeyMap.put(KeyEvent.VK_DEAD_MACRON, KeyCode.DEAD_MACRON);
swingToJavaFXKeyMap.put(KeyEvent.VK_DEAD_OGONEK, KeyCode.DEAD_OGONEK);
swingToJavaFXKeyMap.put(KeyEvent.VK_DEAD_SEMIVOICED_SOUND, KeyCode.DEAD_SEMIVOICED_SOUND);
swingToJavaFXKeyMap.put(KeyEvent.VK_DEAD_TILDE, KeyCode.DEAD_TILDE);
swingToJavaFXKeyMap.put(KeyEvent.VK_DEAD_VOICED_SOUND, KeyCode.DEAD_VOICED_SOUND);
swingToJavaFXKeyMap.put(KeyEvent.VK_DECIMAL, KeyCode.DECIMAL);
swingToJavaFXKeyMap.put(KeyEvent.VK_DELETE, KeyCode.DELETE);
swingToJavaFXKeyMap.put(KeyEvent.VK_0, KeyCode.DIGIT0);
swingToJavaFXKeyMap.put(KeyEvent.VK_1, KeyCode.DIGIT1);
swingToJavaFXKeyMap.put(KeyEvent.VK_2, KeyCode.DIGIT2);
swingToJavaFXKeyMap.put(KeyEvent.VK_3, KeyCode.DIGIT3);
swingToJavaFXKeyMap.put(KeyEvent.VK_4, KeyCode.DIGIT4);
swingToJavaFXKeyMap.put(KeyEvent.VK_5, KeyCode.DIGIT5);
swingToJavaFXKeyMap.put(KeyEvent.VK_6, KeyCode.DIGIT6);
swingToJavaFXKeyMap.put(KeyEvent.VK_7, KeyCode.DIGIT7);
swingToJavaFXKeyMap.put(KeyEvent.VK_8, KeyCode.DIGIT8);
swingToJavaFXKeyMap.put(KeyEvent.VK_9, KeyCode.DIGIT9);
swingToJavaFXKeyMap.put(KeyEvent.VK_DIVIDE, KeyCode.DIVIDE);
swingToJavaFXKeyMap.put(KeyEvent.VK_DOLLAR, KeyCode.DOLLAR);
swingToJavaFXKeyMap.put(KeyEvent.VK_DOWN, KeyCode.DOWN);
swingToJavaFXKeyMap.put(KeyEvent.VK_E, KeyCode.E);
// swingToJavaFXKeyMap.put(, KeyCode.EJECT_TOGGLE);
swingToJavaFXKeyMap.put(KeyEvent.VK_END, KeyCode.END);
swingToJavaFXKeyMap.put(KeyEvent.VK_ENTER, KeyCode.ENTER);
swingToJavaFXKeyMap.put(KeyEvent.VK_EQUALS, KeyCode.EQUALS);
swingToJavaFXKeyMap.put(KeyEvent.VK_ESCAPE, KeyCode.ESCAPE);
swingToJavaFXKeyMap.put(KeyEvent.VK_EURO_SIGN, KeyCode.EURO_SIGN);
swingToJavaFXKeyMap.put(KeyEvent.VK_EXCLAMATION_MARK, KeyCode.EXCLAMATION_MARK);
swingToJavaFXKeyMap.put(KeyEvent.VK_F, KeyCode.F);
swingToJavaFXKeyMap.put(KeyEvent.VK_F1, KeyCode.F1);
swingToJavaFXKeyMap.put(KeyEvent.VK_F2, KeyCode.F2);
swingToJavaFXKeyMap.put(KeyEvent.VK_F3, KeyCode.F3);
swingToJavaFXKeyMap.put(KeyEvent.VK_F4, KeyCode.F4);
swingToJavaFXKeyMap.put(KeyEvent.VK_F5, KeyCode.F5);
swingToJavaFXKeyMap.put(KeyEvent.VK_F6, KeyCode.F6);
swingToJavaFXKeyMap.put(KeyEvent.VK_F7, KeyCode.F7);
swingToJavaFXKeyMap.put(KeyEvent.VK_F8, KeyCode.F8);
swingToJavaFXKeyMap.put(KeyEvent.VK_F9, KeyCode.F9);
swingToJavaFXKeyMap.put(KeyEvent.VK_F10, KeyCode.F10);
swingToJavaFXKeyMap.put(KeyEvent.VK_F11, KeyCode.F11);
swingToJavaFXKeyMap.put(KeyEvent.VK_F12, KeyCode.F12);
swingToJavaFXKeyMap.put(KeyEvent.VK_F13, KeyCode.F13);
swingToJavaFXKeyMap.put(KeyEvent.VK_F14, KeyCode.F14);
swingToJavaFXKeyMap.put(KeyEvent.VK_F15, KeyCode.F15);
swingToJavaFXKeyMap.put(KeyEvent.VK_F16, KeyCode.F16);
swingToJavaFXKeyMap.put(KeyEvent.VK_F17, KeyCode.F17);
swingToJavaFXKeyMap.put(KeyEvent.VK_F18, KeyCode.F18);
swingToJavaFXKeyMap.put(KeyEvent.VK_F19, KeyCode.F19);
swingToJavaFXKeyMap.put(KeyEvent.VK_F20, KeyCode.F20);
swingToJavaFXKeyMap.put(KeyEvent.VK_F21, KeyCode.F21);
swingToJavaFXKeyMap.put(KeyEvent.VK_F22, KeyCode.F22);
swingToJavaFXKeyMap.put(KeyEvent.VK_F23, KeyCode.F23);
swingToJavaFXKeyMap.put(KeyEvent.VK_F24, KeyCode.F24);
// swingToJavaFXKeyMap.put(, KeyCode.FAST_FWD);
swingToJavaFXKeyMap.put(KeyEvent.VK_FINAL, KeyCode.FINAL);
swingToJavaFXKeyMap.put(KeyEvent.VK_FIND, KeyCode.FIND);
swingToJavaFXKeyMap.put(KeyEvent.VK_FULL_WIDTH, KeyCode.FULL_WIDTH);
swingToJavaFXKeyMap.put(KeyEvent.VK_G, KeyCode.G);
// swingToJavaFXKeyMap.put(, KeyCode.GAME_A);
// swingToJavaFXKeyMap.put(, KeyCode.GAME_B);
// swingToJavaFXKeyMap.put(, KeyCode.GAME_C);
// swingToJavaFXKeyMap.put(, KeyCode.GAME_D);
swingToJavaFXKeyMap.put(KeyEvent.VK_GREATER, KeyCode.GREATER);
swingToJavaFXKeyMap.put(KeyEvent.VK_H, KeyCode.H);
swingToJavaFXKeyMap.put(KeyEvent.VK_HALF_WIDTH, KeyCode.HALF_WIDTH);
swingToJavaFXKeyMap.put(KeyEvent.VK_HELP, KeyCode.HELP);
swingToJavaFXKeyMap.put(KeyEvent.VK_HIRAGANA, KeyCode.HIRAGANA);
swingToJavaFXKeyMap.put(KeyEvent.VK_HOME, KeyCode.HOME);
swingToJavaFXKeyMap.put(KeyEvent.VK_I, KeyCode.I);
// swingToJavaFXKeyMap.put(, KeyCode.INFO);
swingToJavaFXKeyMap.put(KeyEvent.VK_INPUT_METHOD_ON_OFF, KeyCode.INPUT_METHOD_ON_OFF);
swingToJavaFXKeyMap.put(KeyEvent.VK_INSERT, KeyCode.INSERT);
swingToJavaFXKeyMap.put(KeyEvent.VK_INVERTED_EXCLAMATION_MARK, KeyCode.INVERTED_EXCLAMATION_MARK);
swingToJavaFXKeyMap.put(KeyEvent.VK_F, KeyCode.J);
swingToJavaFXKeyMap.put(KeyEvent.VK_JAPANESE_HIRAGANA, KeyCode.JAPANESE_HIRAGANA);
swingToJavaFXKeyMap.put(KeyEvent.VK_JAPANESE_KATAKANA, KeyCode.JAPANESE_KATAKANA);
swingToJavaFXKeyMap.put(KeyEvent.VK_JAPANESE_ROMAN, KeyCode.JAPANESE_ROMAN);
swingToJavaFXKeyMap.put(KeyEvent.VK_K, KeyCode.K);
swingToJavaFXKeyMap.put(KeyEvent.VK_KANA, KeyCode.KANA);
swingToJavaFXKeyMap.put(KeyEvent.VK_KANA_LOCK, KeyCode.KANA_LOCK);
swingToJavaFXKeyMap.put(KeyEvent.VK_KANJI, KeyCode.KANJI);
swingToJavaFXKeyMap.put(KeyEvent.VK_KATAKANA, KeyCode.KATAKANA);
swingToJavaFXKeyMap.put(KeyEvent.VK_KP_DOWN, KeyCode.KP_DOWN);
swingToJavaFXKeyMap.put(KeyEvent.VK_KP_LEFT, KeyCode.KP_LEFT);
swingToJavaFXKeyMap.put(KeyEvent.VK_KP_RIGHT, KeyCode.KP_RIGHT);
swingToJavaFXKeyMap.put(KeyEvent.VK_KP_UP, KeyCode.KP_UP);
swingToJavaFXKeyMap.put(KeyEvent.VK_L, KeyCode.L);
swingToJavaFXKeyMap.put(KeyEvent.VK_LEFT, KeyCode.LEFT);
swingToJavaFXKeyMap.put(KeyEvent.VK_LEFT_PARENTHESIS, KeyCode.LEFT_PARENTHESIS);
swingToJavaFXKeyMap.put(KeyEvent.VK_LESS, KeyCode.LESS);
swingToJavaFXKeyMap.put(KeyEvent.VK_M, KeyCode.M);
swingToJavaFXKeyMap.put(KeyEvent.VK_META, KeyCode.META);
swingToJavaFXKeyMap.put(KeyEvent.VK_MINUS, KeyCode.MINUS);
swingToJavaFXKeyMap.put(KeyEvent.VK_MODECHANGE, KeyCode.MODECHANGE);
swingToJavaFXKeyMap.put(KeyEvent.VK_MULTIPLY, KeyCode.MULTIPLY);
// swingToJavaFXKeyMap.put(, KeyCode.MUTE);
swingToJavaFXKeyMap.put(KeyEvent.VK_N, KeyCode.N);
swingToJavaFXKeyMap.put(KeyEvent.VK_NONCONVERT, KeyCode.NONCONVERT);
swingToJavaFXKeyMap.put(KeyEvent.VK_NUM_LOCK, KeyCode.NUM_LOCK);
swingToJavaFXKeyMap.put(KeyEvent.VK_NUMBER_SIGN, KeyCode.NUMBER_SIGN);
swingToJavaFXKeyMap.put(KeyEvent.VK_NUMPAD0, KeyCode.NUMPAD0);
swingToJavaFXKeyMap.put(KeyEvent.VK_NUMPAD1, KeyCode.NUMPAD1);
swingToJavaFXKeyMap.put(KeyEvent.VK_NUMPAD2, KeyCode.NUMPAD2);
swingToJavaFXKeyMap.put(KeyEvent.VK_NUMPAD3, KeyCode.NUMPAD3);
swingToJavaFXKeyMap.put(KeyEvent.VK_NUMPAD4, KeyCode.NUMPAD4);
swingToJavaFXKeyMap.put(KeyEvent.VK_NUMPAD5, KeyCode.NUMPAD5);
swingToJavaFXKeyMap.put(KeyEvent.VK_NUMPAD6, KeyCode.NUMPAD6);
swingToJavaFXKeyMap.put(KeyEvent.VK_NUMPAD7, KeyCode.NUMPAD7);
swingToJavaFXKeyMap.put(KeyEvent.VK_NUMPAD8, KeyCode.NUMPAD8);
swingToJavaFXKeyMap.put(KeyEvent.VK_NUMPAD9, KeyCode.NUMPAD9);
swingToJavaFXKeyMap.put(KeyEvent.VK_O, KeyCode.O);
swingToJavaFXKeyMap.put(KeyEvent.VK_OPEN_BRACKET, KeyCode.OPEN_BRACKET);
swingToJavaFXKeyMap.put(KeyEvent.VK_P, KeyCode.P);
swingToJavaFXKeyMap.put(KeyEvent.VK_PAGE_DOWN, KeyCode.PAGE_DOWN);
swingToJavaFXKeyMap.put(KeyEvent.VK_PAGE_UP, KeyCode.PAGE_UP);
swingToJavaFXKeyMap.put(KeyEvent.VK_PASTE, KeyCode.PASTE);
swingToJavaFXKeyMap.put(KeyEvent.VK_PAUSE, KeyCode.PAUSE);
swingToJavaFXKeyMap.put(KeyEvent.VK_PERIOD, KeyCode.PERIOD);
// swingToJavaFXKeyMap.put(, KeyCode.PLAY);
swingToJavaFXKeyMap.put(KeyEvent.VK_PLUS, KeyCode.PLUS);
// swingToJavaFXKeyMap.put(, KeyCode.POUND);
// swingToJavaFXKeyMap.put(, KeyCode.POWER);
swingToJavaFXKeyMap.put(KeyEvent.VK_PREVIOUS_CANDIDATE, KeyCode.PREVIOUS_CANDIDATE);
swingToJavaFXKeyMap.put(KeyEvent.VK_PRINTSCREEN, KeyCode.PRINTSCREEN);
swingToJavaFXKeyMap.put(KeyEvent.VK_PROPS, KeyCode.PROPS);
swingToJavaFXKeyMap.put(KeyEvent.VK_Q, KeyCode.Q);
swingToJavaFXKeyMap.put(KeyEvent.VK_QUOTE, KeyCode.QUOTE);
swingToJavaFXKeyMap.put(KeyEvent.VK_QUOTEDBL, KeyCode.QUOTEDBL);
swingToJavaFXKeyMap.put(KeyEvent.VK_R, KeyCode.R);
// swingToJavaFXKeyMap.put(, KeyCode.RECORD);
// swingToJavaFXKeyMap.put(, KeyCode.REWIND);
swingToJavaFXKeyMap.put(KeyEvent.VK_RIGHT, KeyCode.RIGHT);
swingToJavaFXKeyMap.put(KeyEvent.VK_RIGHT_PARENTHESIS, KeyCode.RIGHT_PARENTHESIS);
swingToJavaFXKeyMap.put(KeyEvent.VK_ROMAN_CHARACTERS, KeyCode.ROMAN_CHARACTERS);
swingToJavaFXKeyMap.put(KeyEvent.VK_S, KeyCode.S);
swingToJavaFXKeyMap.put(KeyEvent.VK_SCROLL_LOCK, KeyCode.SCROLL_LOCK);
swingToJavaFXKeyMap.put(KeyEvent.VK_SEMICOLON, KeyCode.SEMICOLON);
swingToJavaFXKeyMap.put(KeyEvent.VK_SEPARATOR, KeyCode.SEPARATOR);
swingToJavaFXKeyMap.put(KeyEvent.VK_SHIFT, KeyCode.SHIFT);
// swingToJavaFXKeyMap.put(, KeyCode.SHORTCUT);
swingToJavaFXKeyMap.put(KeyEvent.VK_SLASH, KeyCode.SLASH);
// swingToJavaFXKeyMap.put(, KeyCode.SOFTKEY_0);
// swingToJavaFXKeyMap.put(, KeyCode.SOFTKEY_1);
// swingToJavaFXKeyMap.put(, KeyCode.SOFTKEY_3);
// swingToJavaFXKeyMap.put(, KeyCode.SOFTKEY_4);
// swingToJavaFXKeyMap.put(, KeyCode.SOFTKEY_5);
// swingToJavaFXKeyMap.put(, KeyCode.SOFTKEY_6);
// swingToJavaFXKeyMap.put(, KeyCode.SOFTKEY_7);
// swingToJavaFXKeyMap.put(, KeyCode.SOFTKEY_8);
// swingToJavaFXKeyMap.put(, KeyCode.SOFTKEY_9);
swingToJavaFXKeyMap.put(KeyEvent.VK_SPACE, KeyCode.SPACE);
// swingToJavaFXKeyMap.put(, KeyCode.STAR);
swingToJavaFXKeyMap.put(KeyEvent.VK_STOP, KeyCode.STOP);
swingToJavaFXKeyMap.put(KeyEvent.VK_SUBTRACT, KeyCode.SUBTRACT);
swingToJavaFXKeyMap.put(KeyEvent.VK_T, KeyCode.T);
swingToJavaFXKeyMap.put(KeyEvent.VK_TAB, KeyCode.TAB);
// swingToJavaFXKeyMap.put(, KeyCode.TRACK_NEXT);
// swingToJavaFXKeyMap.put(, KeyCode.TRACK_PREV);
swingToJavaFXKeyMap.put(KeyEvent.VK_U, KeyCode.U);
swingToJavaFXKeyMap.put(KeyEvent.VK_UNDEFINED, KeyCode.UNDEFINED);
swingToJavaFXKeyMap.put(KeyEvent.VK_UNDERSCORE, KeyCode.UNDERSCORE);
swingToJavaFXKeyMap.put(KeyEvent.VK_UNDO, KeyCode.UNDO);
swingToJavaFXKeyMap.put(KeyEvent.VK_UP, KeyCode.UP);
swingToJavaFXKeyMap.put(KeyEvent.VK_V, KeyCode.V);
// swingToJavaFXKeyMap.put(, KeyCode.VOLUME_DOWN);
// swingToJavaFXKeyMap.put(, KeyCode.VOLUME_UP);
swingToJavaFXKeyMap.put(KeyEvent.VK_W, KeyCode.W);
swingToJavaFXKeyMap.put(KeyEvent.VK_WINDOWS, KeyCode.WINDOWS);
swingToJavaFXKeyMap.put(KeyEvent.VK_X, KeyCode.X);
swingToJavaFXKeyMap.put(KeyEvent.VK_Y, KeyCode.Y);
swingToJavaFXKeyMap.put(KeyEvent.VK_Z, KeyCode.Z);
}
private static final Object UPDATE_LOCK = new Object();
/**
* Determines if a key is down on the keyboard.
* @param key the key to check
* @return whether the key is currently down
*/
public static boolean isKeyDown(KeyCode key) {
return down.contains(key);
}
/**
* Determines if a key is pressed just now.
* @param key the key to check
* @return whether the key is down starting with this frame
*/
public static boolean isKeyDownOnce(KeyCode key) {
return pressed.contains(key);
}
/**
* Determines if a key is released just now.
* @param key the key to check
* @return whether the key is is up starting with this frame
*/
public static boolean isKeyUpOnce(KeyCode key) {
return released.contains(key);
}
static void newFrame() {
synchronized(UPDATE_LOCK) {
down.clear();
down.addAll(downBuffer);
pressed.clear();
pressed.addAll(pressedBuffer);
released.clear();
released.addAll(releasedBuffer);
lastDownBuffer.clear();
lastDownBuffer.addAll(downBuffer);
pressedBuffer.clear();
releasedBuffer.clear();
}
}
static void pressed(KeyCode key) {
synchronized(UPDATE_LOCK) {
if(!lastDownBuffer.contains(key)) {
pressedBuffer.add(key);
}
downBuffer.add(key);
}
}
static void released(KeyCode key) {
synchronized(UPDATE_LOCK) {
downBuffer.remove(key);
releasedBuffer.add(key);
}
}
static KeyCode convertSwingToJavaFXKeyEvent(int key) {
return swingToJavaFXKeyMap.get(key);
}
}