GamepadHandler.java 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package me.hammerle.snuviengine.api;
  2. import java.nio.ByteBuffer;
  3. import java.nio.FloatBuffer;
  4. import java.util.function.Consumer;
  5. import static org.lwjgl.glfw.GLFW.*;
  6. public class GamepadHandler
  7. {
  8. public final static GamepadBinding A = new GamepadBinding("A", 1);
  9. public final static GamepadBinding B = new GamepadBinding("B", 2);
  10. public final static GamepadBinding X = new GamepadBinding("X", 0);
  11. public final static GamepadBinding Y = new GamepadBinding("Y", 3);
  12. public final static GamepadBinding L = new GamepadBinding("L", 4);
  13. public final static GamepadBinding R = new GamepadBinding("R", 5);
  14. public final static GamepadBinding START = new GamepadBinding("Start", 9);
  15. public final static GamepadBinding SELECT = new GamepadBinding("Select", 8);
  16. public final static GamepadBinding LEFT = new GamepadBinding("Left", 0);
  17. public final static GamepadBinding RIGHT = new GamepadBinding("Right", 0);
  18. public final static GamepadBinding UP = new GamepadBinding("Up", 1);
  19. public final static GamepadBinding DOWN = new GamepadBinding("Down", 1);
  20. private final static GamepadBinding[] BUTTONS = new GamepadBinding[]
  21. {
  22. A, B, X, Y, L, R, START, SELECT
  23. };
  24. public final static GamepadBinding[] BINDINGS = new GamepadBinding[]
  25. {
  26. A, B, X, Y, L, R, START, SELECT, LEFT, RIGHT, UP, DOWN
  27. };
  28. protected static void tick()
  29. {
  30. if(!glfwJoystickPresent(GLFW_JOYSTICK_1))
  31. {
  32. return;
  33. }
  34. updateButtons();
  35. updateAxes();
  36. }
  37. private static void updateButtons()
  38. {
  39. ByteBuffer buttonBuffer = glfwGetJoystickButtons(GLFW_JOYSTICK_1);
  40. if(buttonBuffer == null)
  41. {
  42. return;
  43. }
  44. for(GamepadBinding binding : BUTTONS)
  45. {
  46. binding.tick(buttonBuffer.get(binding.getMapping()) != 0);
  47. }
  48. }
  49. private static void updateAxes()
  50. {
  51. FloatBuffer axesBuffer = glfwGetJoystickAxes(GLFW_JOYSTICK_1);
  52. if(axesBuffer == null)
  53. {
  54. return;
  55. }
  56. LEFT.tick(axesBuffer.get(LEFT.getMapping()) < -0.5f);
  57. RIGHT.tick(axesBuffer.get(RIGHT.getMapping()) > 0.5f);
  58. UP.tick(axesBuffer.get(UP.getMapping()) < -0.5f);
  59. DOWN.tick(axesBuffer.get(DOWN.getMapping()) > 0.5f);
  60. }
  61. }