KeyHandler.java 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package me.hammerle.supersnuvi.input;
  2. import java.util.EnumMap;
  3. import java.util.LinkedList;
  4. import javafx.scene.input.KeyCode;
  5. public class KeyHandler implements IKeyHandler
  6. {
  7. private LinkedList<KeyCode> removeQueue;
  8. private EnumMap<KeyCode, Integer> keys;
  9. private EnumMap<KeyCode, Integer> justReleased;
  10. public KeyHandler()
  11. {
  12. keys = new EnumMap(KeyCode.class);
  13. justReleased = new EnumMap(KeyCode.class);
  14. removeQueue = new LinkedList<>();
  15. }
  16. public void pressKey(KeyCode key)
  17. {
  18. keys.putIfAbsent(key, 0);
  19. }
  20. public void releaseKey(KeyCode key)
  21. {
  22. removeQueue.add(key);
  23. }
  24. @Override
  25. public int getKeyDownTime(KeyCode key)
  26. {
  27. Integer i = keys.get(key);
  28. return i != null ? i : 0;
  29. }
  30. @Override
  31. public int isKeyJustReleased(KeyCode key)
  32. {
  33. Integer i = justReleased.get(key);
  34. return i != null ? i : -1;
  35. }
  36. @Override
  37. public boolean isKeyDown(KeyCode key)
  38. {
  39. return keys.containsKey(key);
  40. }
  41. public void tick(long delta)
  42. {
  43. keys.replaceAll((k, v) -> v + 1);
  44. justReleased.clear();
  45. removeQueue.forEach(key ->
  46. {
  47. Integer i = keys.remove(key);
  48. if(i != null)
  49. {
  50. justReleased.put(key, i);
  51. }
  52. });
  53. removeQueue.clear();
  54. }
  55. }