KeyHandler.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package me.hammerle.supersnuvi.javafx;
  2. import java.util.EnumMap;
  3. import javafx.scene.input.KeyCode;
  4. import me.hammerle.supersnuvi.gamelogic.StateRenderer;
  5. public class KeyHandler
  6. {
  7. private KeyHandler()
  8. {
  9. }
  10. private final static EnumMap<KeyCode, KeyBinding> BINDINGS = new EnumMap(KeyCode.class);
  11. private static KeyBinding registerBinding(String name, KeyCode error)
  12. {
  13. String s = StateRenderer.CONFIG.getString(name);
  14. KeyCode code;
  15. if(s == null)
  16. {
  17. code = error;
  18. }
  19. else
  20. {
  21. code = KeyCode.getKeyCode(s);
  22. if(code == null)
  23. {
  24. System.out.println("cant find key '" + s + "'");
  25. code = error;
  26. }
  27. }
  28. KeyBinding binding = new KeyBinding(name, code);
  29. BINDINGS.put(code, binding);
  30. return binding;
  31. }
  32. public final static IKeyBinding UP = registerBinding("key.up", KeyCode.UP);
  33. public final static IKeyBinding DOWN = registerBinding("key.down", KeyCode.DOWN);
  34. public final static IKeyBinding LEFT = registerBinding("key.left", KeyCode.LEFT);
  35. public final static IKeyBinding RIGHT = registerBinding("key.right", KeyCode.RIGHT);
  36. public final static IKeyBinding JUMP = registerBinding("key.jump", KeyCode.SPACE);
  37. public final static IKeyBinding RUN = registerBinding("key.run", KeyCode.SHIFT);
  38. public final static IKeyBinding ESCAPE = registerBinding("key.escape", KeyCode.ESCAPE);
  39. public final static IKeyBinding ENTER = registerBinding("key.enter", KeyCode.ENTER);
  40. public final static IKeyBinding COMBAT = registerBinding("key.combat", KeyCode.A);
  41. public final static IKeyBinding COMBAT_SWITCH_FACE = registerBinding("key.combat.switchface", KeyCode.S);
  42. public final static IKeyBinding COMBAT_DASH = registerBinding("key.combat.dash", KeyCode.D);
  43. public final static IKeyBinding COMBAT_DODGE = registerBinding("key.combat.dodge", KeyCode.F);
  44. public final static IKeyBinding COMBAT_BLOCK = registerBinding("key.combat.block", KeyCode.G);
  45. public final static IKeyBinding COMBAT_ATTACK = registerBinding("key.combat.attack", KeyCode.H);
  46. public final static IKeyBinding[] ARRAY = new IKeyBinding[]
  47. {
  48. UP, DOWN, LEFT, RIGHT, JUMP, RUN, ESCAPE, ENTER, COMBAT, COMBAT_SWITCH_FACE, COMBAT_DASH, COMBAT_DODGE, COMBAT_BLOCK, COMBAT_ATTACK
  49. };
  50. private static KeyBinding rebind = null;
  51. public static void rebindKey(IKeyBinding binding)
  52. {
  53. rebind = (KeyBinding) binding;
  54. rebind.setEditStatus(true);
  55. }
  56. protected static void pressKey(KeyCode key)
  57. {
  58. if(rebind == null)
  59. {
  60. KeyBinding binding = BINDINGS.get(key);
  61. if(binding != null)
  62. {
  63. binding.press();
  64. }
  65. }
  66. else
  67. {
  68. for(IKeyBinding b : ARRAY)
  69. {
  70. if(((KeyBinding) b).getKeyCode() == key)
  71. {
  72. rebind.setEditStatus(false);
  73. rebind = null;
  74. return;
  75. }
  76. }
  77. BINDINGS.remove(rebind.getKeyCode());
  78. rebind.setKeyCode(key);
  79. BINDINGS.put(key, rebind);
  80. rebind.setEditStatus(false);
  81. rebind = null;
  82. }
  83. }
  84. protected static void releaseKey(KeyCode key)
  85. {
  86. KeyBinding binding = BINDINGS.get(key);
  87. if(binding != null)
  88. {
  89. binding.release();
  90. }
  91. }
  92. protected static void tick()
  93. {
  94. BINDINGS.values().forEach(binding -> binding.tick());
  95. }
  96. }