From 5e7d8dc366e77db0c384ffec456f2922fbdfab0a Mon Sep 17 00:00:00 2001 From: isXander Date: Sun, 2 Jul 2023 19:52:49 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9E=95=20Allow=20usage=20of=20d-pad=20on=20g?= =?UTF-8?q?amepads=20to=20navigate=20GUIs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controlify/screenop/ScreenProcessor.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/main/java/dev/isxander/controlify/screenop/ScreenProcessor.java b/src/main/java/dev/isxander/controlify/screenop/ScreenProcessor.java index 90d5995..45c3946 100644 --- a/src/main/java/dev/isxander/controlify/screenop/ScreenProcessor.java +++ b/src/main/java/dev/isxander/controlify/screenop/ScreenProcessor.java @@ -4,6 +4,7 @@ import dev.isxander.controlify.Controlify; import dev.isxander.controlify.InputMode; import dev.isxander.controlify.controller.Controller; import dev.isxander.controlify.api.event.ControlifyEvents; +import dev.isxander.controlify.controller.gamepad.GamepadState; import dev.isxander.controlify.mixins.feature.screenop.ScreenAccessor; import dev.isxander.controlify.mixins.feature.screenop.vanilla.TabNavigationBarAccessor; import dev.isxander.controlify.sound.ControlifySounds; @@ -104,6 +105,28 @@ public class ScreenProcessor { if (!bindings.GUI_NAVI_DOWN.prevHeld()) navigationHelper.reset(); + } else if (controller.state() instanceof GamepadState state && controller.prevState() instanceof GamepadState prevState) { + if (state.gamepadButtons().dpadRight() && (repeatEventAvailable || !prevState.gamepadButtons().dpadRight())) { + event = accessor.invokeCreateArrowEvent(ScreenDirection.RIGHT); + + if (!prevState.gamepadButtons().dpadRight()) + navigationHelper.reset(); + } else if (state.gamepadButtons().dpadLeft() && (repeatEventAvailable || !prevState.gamepadButtons().dpadLeft())) { + event = accessor.invokeCreateArrowEvent(ScreenDirection.LEFT); + + if (!prevState.gamepadButtons().dpadLeft()) + navigationHelper.reset(); + } else if (state.gamepadButtons().dpadUp() && (repeatEventAvailable || !prevState.gamepadButtons().dpadUp())) { + event = accessor.invokeCreateArrowEvent(ScreenDirection.UP); + + if (!prevState.gamepadButtons().dpadUp()) + navigationHelper.reset(); + } else if (state.gamepadButtons().dpadDown() && (repeatEventAvailable || !prevState.gamepadButtons().dpadDown())) { + event = accessor.invokeCreateArrowEvent(ScreenDirection.DOWN); + + if (!prevState.gamepadButtons().dpadDown()) + navigationHelper.reset(); + } } if (event != null) {