diff --git a/src/main/java/dev/isxander/controlify/Controlify.java b/src/main/java/dev/isxander/controlify/Controlify.java index eb05cd1..1fc2366 100644 --- a/src/main/java/dev/isxander/controlify/Controlify.java +++ b/src/main/java/dev/isxander/controlify/Controlify.java @@ -183,7 +183,12 @@ public class Controlify implements ControlifyApi { } if (getCurrentController().isEmpty()) { - this.setCurrentController(ControllerManager.getConnectedControllers().stream().findFirst().orElse(null)); + var controller = ControllerManager.getConnectedControllers().stream().findFirst().orElse(null); + if (controller != null && controller.config().delayedCalibration) { + controller = null; + } + + this.setCurrentController(controller); } else { // setCurrentController saves config config().saveIfDirty(); diff --git a/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java b/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java index 2a39ec8..b243248 100644 --- a/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java +++ b/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java @@ -30,6 +30,7 @@ public abstract class ControllerConfig { public JsonObject vibrationStrengths = RumbleSource.getDefaultJson(); public boolean deadzonesCalibrated = false; + public boolean delayedCalibration = false; public abstract void setDeadzone(int axis, float deadzone); public abstract float getDeadzone(int axis); diff --git a/src/main/java/dev/isxander/controlify/gui/screen/ControllerCalibrationScreen.java b/src/main/java/dev/isxander/controlify/gui/screen/ControllerCalibrationScreen.java index 168f641..98a6def 100644 --- a/src/main/java/dev/isxander/controlify/gui/screen/ControllerCalibrationScreen.java +++ b/src/main/java/dev/isxander/controlify/gui/screen/ControllerCalibrationScreen.java @@ -9,6 +9,7 @@ import net.minecraft.ChatFormatting; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.MultiLineLabel; +import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -27,7 +28,7 @@ public class ControllerCalibrationScreen extends Screen { private MultiLineLabel waitLabel, infoLabel, completeLabel; - protected Button readyButton; + protected Button readyButton, laterButton; protected boolean calibrating = false, calibrated = false; protected int calibrationTicks = 0; @@ -47,16 +48,20 @@ public class ControllerCalibrationScreen extends Screen { @Override protected void init() { - addRenderableWidget( - readyButton = Button.builder(Component.translatable("controlify.calibration.ready"), btn -> { - if (!calibrated) - startCalibration(); - else - onClose(); - }) + addRenderableWidget(readyButton = + Button.builder(Component.translatable("controlify.calibration.ready"), btn -> onButtonPress()) .width(150) - .pos(this.width / 2 - 75, this.height - 8 - 20) - .build()); + .pos(this.width / 2 - 150 - 5, this.height - 8 - 20) + .build() + ); + addRenderableWidget(laterButton = + Button.builder(Component.translatable("controlify.calibration.later"), btn -> onLaterButtonPress()) + .width(150) + .pos(this.width / 2 + 5, this.height - 8 - 20) + .tooltip(Tooltip.create(Component.translatable("controlify.calibration.later.tooltip"))) + .build() + ); + this.infoLabel = MultiLineLabel.create(font, Component.translatable("controlify.calibration.info"), width - 30); this.waitLabel = MultiLineLabel.create(font, Component.translatable("controlify.calibration.wait"), width - 30); @@ -139,6 +144,7 @@ public class ControllerCalibrationScreen extends Screen { readyButton.setMessage(Component.translatable("controlify.calibration.done")); controller.config().deadzonesCalibrated = true; + controller.config().delayedCalibration = false; Controlify.instance().config().save(); } } @@ -178,6 +184,25 @@ public class ControllerCalibrationScreen extends Screen { .anyMatch(axis -> Math.abs(axis - controller.prevState().axes().get(controller.state().axes().indexOf(axis))) > amt); } + private void onButtonPress() { + if (!calibrated) { + startCalibration(); + + removeWidget(laterButton); + readyButton.setX(this.width / 2 - 75); + } else + onClose(); + } + + private void onLaterButtonPress() { + if (!calibrated) { + controller.config().delayedCalibration = true; + Controlify.instance().config().setDirty(); + Controlify.instance().setCurrentController(null); + onClose(); + } + } + @Override public void onClose() { minecraft.setScreen(parent.get()); diff --git a/src/main/resources/assets/controlify/lang/en_us.json b/src/main/resources/assets/controlify/lang/en_us.json index ba8b0b1..3741237 100644 --- a/src/main/resources/assets/controlify/lang/en_us.json +++ b/src/main/resources/assets/controlify/lang/en_us.json @@ -274,6 +274,8 @@ "controlify.calibration.ready": "Ready", "controlify.calibration.done": "Done", "controlify.calibration.calibrating": "Calibrating...", + "controlify.calibration.later": "Maybe Later", + "controlify.calibration.later.tooltip": "You must calibrate to use the controller. Pressing this will deactivate the controller and you will have to use it again to calibrate.", "controlify.beta.title": "Controlify Beta Notice", "controlify.beta.message": "You are currently using Controlify Beta.\n\nThis mod is a work in progress and will contain many bugs. Please, if you spot a bug in this mod or have a suggestion to make it even better, please create an issue on the %s!\n\nYou can always find the link to the issue tracker in Controlify's settings menu.",