mirror of
https://github.com/TimeCrafters/FTC_2022
synced 2025-12-16 04:12:34 +00:00
Experimental: Added time based debouncing to GamepadChecker
This commit is contained in:
@@ -9,49 +9,58 @@ public class GamepadChecker {
|
|||||||
private final CyberarmEngine engine;
|
private final CyberarmEngine engine;
|
||||||
private final Gamepad gamepad;
|
private final Gamepad gamepad;
|
||||||
private final HashMap<String, Boolean> buttons = new HashMap<>();
|
private final HashMap<String, Boolean> buttons = new HashMap<>();
|
||||||
|
private final HashMap<String, Long> buttonsDebounceInterval = new HashMap<>();
|
||||||
|
private final long debounceTime = 50L; // ms
|
||||||
|
|
||||||
public GamepadChecker(CyberarmEngine engine, Gamepad gamepad) {
|
public GamepadChecker(CyberarmEngine engine, Gamepad gamepad) {
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
this.gamepad = gamepad;
|
this.gamepad = gamepad;
|
||||||
|
|
||||||
buttons.put("a", false);
|
buttons.put("a", false); buttonsDebounceInterval.put("a", 0L);
|
||||||
buttons.put("b", false);
|
buttons.put("b", false); buttonsDebounceInterval.put("b", 0L);
|
||||||
buttons.put("x", false);
|
buttons.put("x", false); buttonsDebounceInterval.put("x", 0L);
|
||||||
buttons.put("y", false);
|
buttons.put("y", false); buttonsDebounceInterval.put("y", 0L);
|
||||||
|
|
||||||
buttons.put("start", false);
|
buttons.put("start", false); buttonsDebounceInterval.put("start", 0L);
|
||||||
buttons.put("guide", false);
|
buttons.put("guide", false); buttonsDebounceInterval.put("guide", 0L);
|
||||||
buttons.put("back", false);
|
buttons.put("back", false); buttonsDebounceInterval.put("back", 0L);
|
||||||
|
|
||||||
buttons.put("left_bumper", false);
|
buttons.put("left_bumper", false); buttonsDebounceInterval.put("left_bumper", 0L);
|
||||||
buttons.put("right_bumper", false);
|
buttons.put("right_bumper", false); buttonsDebounceInterval.put("right_bumper", 0L);
|
||||||
|
|
||||||
buttons.put("left_stick_button", false);
|
buttons.put("left_stick_button", false); buttonsDebounceInterval.put("left_stick_button", 0L);
|
||||||
buttons.put("right_stick_button", false);
|
buttons.put("right_stick_button", false); buttonsDebounceInterval.put("right_stick_button", 0L);
|
||||||
|
|
||||||
buttons.put("dpad_left", false);
|
buttons.put("dpad_left", false); buttonsDebounceInterval.put("dpad_left", 0L);
|
||||||
buttons.put("dpad_right", false);
|
buttons.put("dpad_right", false); buttonsDebounceInterval.put("dpad_right", 0L);
|
||||||
buttons.put("dpad_up", false);
|
buttons.put("dpad_up", false); buttonsDebounceInterval.put("dpad_up", 0L);
|
||||||
buttons.put("dpad_down", false);
|
buttons.put("dpad_down", false); buttonsDebounceInterval.put("dpad_down", 0L);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void update() {
|
public void update() {
|
||||||
|
long milliseconds = System.currentTimeMillis();
|
||||||
|
|
||||||
for (String btn : buttons.keySet()) {
|
for (String btn : buttons.keySet()) {
|
||||||
try {
|
try {
|
||||||
Field field = gamepad.getClass().getDeclaredField(btn);
|
Field field = gamepad.getClass().getDeclaredField(btn);
|
||||||
|
boolean button = field.getBoolean(gamepad);
|
||||||
|
|
||||||
if (field.getBoolean(gamepad)) {
|
if (button != buttons.get(btn) && milliseconds - buttonsDebounceInterval.get(btn) >= debounceTime) {
|
||||||
if (!buttons.get(btn)) {
|
if (button) {
|
||||||
engine.buttonDown(gamepad, btn);
|
if (!buttons.get(btn)) {
|
||||||
|
engine.buttonDown(gamepad, btn);
|
||||||
|
}
|
||||||
|
|
||||||
|
buttons.put(btn, true);
|
||||||
|
} else {
|
||||||
|
if (buttons.get(btn)) {
|
||||||
|
engine.buttonUp(gamepad, btn);
|
||||||
|
}
|
||||||
|
|
||||||
|
buttons.put(btn, false);
|
||||||
}
|
}
|
||||||
|
} else if (button == buttons.get(btn)) {
|
||||||
buttons.put(btn, true);
|
buttonsDebounceInterval.put(btn, milliseconds);
|
||||||
} else {
|
|
||||||
if (buttons.get(btn)) {
|
|
||||||
engine.buttonUp(gamepad, btn);
|
|
||||||
}
|
|
||||||
|
|
||||||
buttons.put(btn, false);
|
|
||||||
}
|
}
|
||||||
} catch (NoSuchFieldException|IllegalAccessException e) {
|
} catch (NoSuchFieldException|IllegalAccessException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
Reference in New Issue
Block a user