From 209de2f026793fde5ad3a7f5d89aa68c8a534d43 Mon Sep 17 00:00:00 2001 From: isXander Date: Sun, 2 Jul 2023 19:51:09 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9E=95=20Allow=20ingame=20button=20guide=20t?= =?UTF-8?q?o=20be=20placed=20at=20the=20bottom?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ControllerConfig.java | 1 + .../gui/guide/InGameButtonGuide.java | 18 ++++++++++++------ .../screen/ControllerConfigScreenFactory.java | 10 ++++++++++ .../assets/controlify/lang/en_us.json | 2 ++ 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java b/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java index 505e3c6..2a39ec8 100644 --- a/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java +++ b/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java @@ -19,6 +19,7 @@ public abstract class ControllerConfig { public String customName = null; public boolean showIngameGuide = true; + public boolean ingameGuideBottom = false; public boolean showScreenGuide = true; public float chatKeyboardHeight = 0f; diff --git a/src/main/java/dev/isxander/controlify/gui/guide/InGameButtonGuide.java b/src/main/java/dev/isxander/controlify/gui/guide/InGameButtonGuide.java index c4faa8b..6baafe0 100644 --- a/src/main/java/dev/isxander/controlify/gui/guide/InGameButtonGuide.java +++ b/src/main/java/dev/isxander/controlify/gui/guide/InGameButtonGuide.java @@ -35,8 +35,8 @@ public class InGameButtonGuide implements IngameGuideRegistry { private final List> leftGuides = new ArrayList<>(); private final List> rightGuides = new ArrayList<>(); - private final PositionedComponent>> leftLayout; - private final PositionedComponent>> rightLayout; + private PositionedComponent>> leftLayout; + private PositionedComponent>> rightLayout; public InGameButtonGuide(Controller controller, LocalPlayer localPlayer) { this.controller = controller; @@ -48,6 +48,12 @@ public class InGameButtonGuide implements IngameGuideRegistry { Collections.sort(leftGuides); Collections.sort(rightGuides); + refreshLayout(); + } + + public void refreshLayout() { + boolean bottom = controller.config().ingameGuideBottom; + leftLayout = new PositionedComponent<>( ColumnLayoutComponent.>builder() .spacing(1) @@ -55,9 +61,9 @@ public class InGameButtonGuide implements IngameGuideRegistry { .elementPosition(ColumnLayoutComponent.ElementPosition.LEFT) .elements(leftGuides.stream().map(guide -> new GuideActionRenderer<>(guide, false, true)).toList()) .build(), - AnchorPoint.TOP_LEFT, + !bottom ? AnchorPoint.TOP_LEFT : AnchorPoint.BOTTOM_LEFT, 0, 0, - AnchorPoint.TOP_LEFT + !bottom ? AnchorPoint.TOP_LEFT : AnchorPoint.BOTTOM_LEFT ); rightLayout = new PositionedComponent<>( @@ -67,9 +73,9 @@ public class InGameButtonGuide implements IngameGuideRegistry { .elementPosition(ColumnLayoutComponent.ElementPosition.RIGHT) .elements(rightGuides.stream().map(guide -> new GuideActionRenderer<>(guide, true, true)).toList()) .build(), - AnchorPoint.TOP_RIGHT, + !bottom ? AnchorPoint.TOP_RIGHT : AnchorPoint.BOTTOM_RIGHT, 0, 0, - AnchorPoint.TOP_RIGHT + !bottom ? AnchorPoint.TOP_RIGHT : AnchorPoint.BOTTOM_RIGHT ); } diff --git a/src/main/java/dev/isxander/controlify/gui/screen/ControllerConfigScreenFactory.java b/src/main/java/dev/isxander/controlify/gui/screen/ControllerConfigScreenFactory.java index 6011d54..63b1cd8 100644 --- a/src/main/java/dev/isxander/controlify/gui/screen/ControllerConfigScreenFactory.java +++ b/src/main/java/dev/isxander/controlify/gui/screen/ControllerConfigScreenFactory.java @@ -9,7 +9,9 @@ import dev.isxander.controlify.controller.ControllerConfig; import dev.isxander.controlify.controller.gamepad.GamepadController; import dev.isxander.controlify.controller.joystick.SingleJoystickController; import dev.isxander.controlify.controller.joystick.mapping.JoystickMapping; +import dev.isxander.controlify.driver.SteamDeckDriver; import dev.isxander.controlify.gui.controllers.AbstractBindController; +import dev.isxander.controlify.gui.guide.InGameButtonGuide; import dev.isxander.controlify.rumble.BasicRumbleEffect; import dev.isxander.controlify.rumble.RumbleSource; import dev.isxander.controlify.rumble.RumbleState; @@ -155,6 +157,14 @@ public class ControllerConfigScreenFactory { .binding(def.showIngameGuide, () -> config.showIngameGuide, v -> config.showIngameGuide = v) .controller(TickBoxControllerBuilder::create) .build()) + .option(Option.createBuilder() + .name(Component.translatable("controlify.gui.ingame_button_guide_position")) + .description(OptionDescription.of(Component.translatable("controlify.gui.ingame_button_guide_position.tooltip"))) + .binding(def.ingameGuideBottom, () -> config.ingameGuideBottom, v -> config.ingameGuideBottom = v) + .controller(opt -> BooleanControllerBuilder.create(opt) + .valueFormatter(v -> Component.translatable(v ? "controlify.gui.format.bottom" : "controlify.gui.format.top"))) + .flag(mc -> Controlify.instance().inGameButtonGuide().ifPresent(InGameButtonGuide::refreshLayout)) + .build()) .option(Option.createBuilder() .name(Component.translatable("controlify.gui.show_screen_guide")) .description(OptionDescription.createBuilder() diff --git a/src/main/resources/assets/controlify/lang/en_us.json b/src/main/resources/assets/controlify/lang/en_us.json index a064fbe..8c8c2f4 100644 --- a/src/main/resources/assets/controlify/lang/en_us.json +++ b/src/main/resources/assets/controlify/lang/en_us.json @@ -56,6 +56,8 @@ "controlify.config.group.accessibility": "Accessibility", "controlify.gui.show_ingame_guide": "Show Ingame Button Guide", "controlify.gui.show_ingame_guide.tooltip": "Show a HUD in-game displaying actions you can do with controller buttons.", + "controlify.gui.ingame_button_guide_position": "Ingame Button Guide Position", + "controlify.gui.ingame_button_guide_position.tooltip": "Where the ingame button guide is positioned.", "controlify.gui.show_screen_guide": "Show Screen Button Guide", "controlify.gui.show_screen_guide.tooltip": "Show various helpers in GUIs to assist in using controller input.", "controlify.gui.chat_screen_offset": "On-screen keyboard height",