From 8a3436d1c12d23d4a1d2d74219abef322a6259ed Mon Sep 17 00:00:00 2001 From: isXander Date: Mon, 10 Jul 2023 16:55:42 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9E=95=20Configurable=20mixed=20input=20mode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/dev/isxander/controlify/Controlify.java | 12 ++++-------- .../controlify/controller/ControllerConfig.java | 2 ++ .../controller/gamepad/GamepadController.java | 4 ++++ .../gui/screen/ControllerConfigScreenFactory.java | 6 ++++++ src/main/resources/assets/controlify/lang/en_us.json | 2 ++ 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/java/dev/isxander/controlify/Controlify.java b/src/main/java/dev/isxander/controlify/Controlify.java index 1fc2366..018e320 100644 --- a/src/main/java/dev/isxander/controlify/Controlify.java +++ b/src/main/java/dev/isxander/controlify/Controlify.java @@ -326,11 +326,7 @@ public class Controlify implements ControlifyApi { } if (state.hasAnyInput()) { - // use MIXED input mode to support Steam Input for things like gyro mouse and touchpads - // this is only temporary until the Steam Deck driver is finished - boolean isSteamDeck = controller.hidInfo().map(info -> info.hidDevice().map(device -> SteamDeckDriver.isSteamDeck(device.getVendorId(), device.getProductId())).orElse(false)).orElse(false); - - this.setInputMode(isSteamDeck ? InputMode.MIXED : InputMode.CONTROLLER); + this.setInputMode(controller.config().mixedInput ? InputMode.MIXED : InputMode.CONTROLLER); } if (consecutiveInputSwitches > 100) { @@ -362,9 +358,9 @@ public class Controlify implements ControlifyApi { } catch (Throwable e) { CrashReport crashReport = CrashReport.forThrowable(e, errorTitle); CrashReportCategory category = crashReport.addCategory("Affected controller"); - category.setDetail("Controller name", controller::name); - category.setDetail("Controller identification", () -> controller.type().toString()); - category.setDetail("Controller type", () -> controller.getClass().getCanonicalName()); + category.setDetail("Controller name", controller.name()); + category.setDetail("Controller identification", controller.type().toString()); + category.setDetail("Controller type", controller.getClass().getCanonicalName()); throw new ReportedException(crashReport); } } diff --git a/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java b/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java index b243248..b85d0f6 100644 --- a/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java +++ b/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java @@ -32,6 +32,8 @@ public abstract class ControllerConfig { public boolean deadzonesCalibrated = false; public boolean delayedCalibration = false; + public boolean mixedInput = false; + public abstract void setDeadzone(int axis, float deadzone); public abstract float getDeadzone(int axis); diff --git a/src/main/java/dev/isxander/controlify/controller/gamepad/GamepadController.java b/src/main/java/dev/isxander/controlify/controller/gamepad/GamepadController.java index ca99b41..8606a1c 100644 --- a/src/main/java/dev/isxander/controlify/controller/gamepad/GamepadController.java +++ b/src/main/java/dev/isxander/controlify/controller/gamepad/GamepadController.java @@ -44,6 +44,10 @@ public class GamepadController extends AbstractController SteamDeckDriver.isSteamDeck(hid.getVendorId(), hid.getProductId())).orElse(false)) { + this.defaultConfig.mixedInput = true; + this.config.mixedInput = true; + } this.bindings = new ControllerBindings<>(this); } 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 0e26ebc..b12a598 100644 --- a/src/main/java/dev/isxander/controlify/gui/screen/ControllerConfigScreenFactory.java +++ b/src/main/java/dev/isxander/controlify/gui/screen/ControllerConfigScreenFactory.java @@ -294,6 +294,12 @@ public class ControllerConfigScreenFactory { private static ConfigCategory createAdvancedCategory(Controller controller) { return ConfigCategory.createBuilder() .name(Component.translatable("controlify.config.category.advanced")) + .option(Option.createBuilder() + .name(Component.translatable("controlify.gui.mixed_input")) + .description(OptionDescription.of(Component.translatable("controlify.gui.mixed_input.tooltip"))) + .binding(controller.defaultConfig().mixedInput, () -> controller.config().mixedInput, v -> controller.config().mixedInput = v) + .controller(TickBoxControllerBuilder::create) + .build()) .group(makeVibrationGroup(controller)) .group(makeGyroGroup(controller)) .build(); diff --git a/src/main/resources/assets/controlify/lang/en_us.json b/src/main/resources/assets/controlify/lang/en_us.json index 3741237..acd5678 100644 --- a/src/main/resources/assets/controlify/lang/en_us.json +++ b/src/main/resources/assets/controlify/lang/en_us.json @@ -75,6 +75,8 @@ "controlify.gui.button_activation_threshold": "Button Activation Threshold", "controlify.gui.button_activation_threshold.tooltip": "How far a button needs to be pushed before registering as pressed.", "controlify.config.category.advanced": "Advanced", + "controlify.gui.mixed_input": "Mixed Input", + "controlify.gui.mixed_input.tooltip": "If enabled, Controlify will allow you to use both this controller and keyboard/mouse at the same time. This should be used when pairing with Steam Input, where certain advanced controller actions needs to be mapped to these inputs, rather than a gamepad. Be aware, this prevents you from entering normal keyboard/mouse mode whilst this controller is in use.", "controlify.gui.group.vibration": "Vibration", "controlify.gui.group.vibration.tooltip": "Adjust how your controller vibrates.", "controlify.gui.allow_vibrations": "Allow Vibration",