Keys.java 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package me.hammerle.snuviengine.api;
  2. import java.util.HashMap;
  3. public final class Keys {
  4. private final HashMap<Integer, Key> bindings = new HashMap<>();
  5. private Key rebind = null;
  6. protected Keys() {
  7. }
  8. public Key register(int key) {
  9. if(bindings.containsKey(key)) {
  10. return null;
  11. }
  12. Key binding = new Key(key);
  13. bindings.put(key, binding);
  14. return binding;
  15. }
  16. public void rebindOnNextKeyPress(Key binding) {
  17. rebind = binding;
  18. if(binding != null) {
  19. binding.setRebinding(true);
  20. }
  21. }
  22. public void rebind(Key binding, int key) {
  23. if(bindings.get(binding.getKey()) == binding) {
  24. bindings.remove(binding.getKey());
  25. }
  26. binding.setKey(key);
  27. bindings.put(key, binding);
  28. }
  29. protected void press(int key) {
  30. if(isRebinding()) {
  31. rebindMarkedBinding(key);
  32. return;
  33. }
  34. Key binding = bindings.get(key);
  35. if(binding != null) {
  36. binding.press();
  37. }
  38. }
  39. private boolean isRebinding() {
  40. return rebind != null;
  41. }
  42. private void rebindMarkedBinding(int key) {
  43. rebind.setRebinding(false);
  44. if(!bindings.containsKey(key)) {
  45. rebind(rebind, key);
  46. }
  47. rebind = null;
  48. }
  49. protected void release(int key) {
  50. Key binding = bindings.get(key);
  51. if(binding != null) {
  52. binding.release();
  53. }
  54. }
  55. protected void tick() {
  56. bindings.values().forEach(binding -> binding.tick());
  57. }
  58. }