diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java index f4bcad7..df33553 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java @@ -23,7 +23,7 @@ import eu.midnightdust.midnightcontrols.client.enums.ControllerType; import eu.midnightdust.midnightcontrols.client.enums.HudSide; import eu.midnightdust.midnightcontrols.client.enums.VirtualMouseSkin; import eu.midnightdust.midnightcontrols.client.gui.RingScreen; -import eu.midnightdust.midnightcontrols.client.touch.TouchMode; +import eu.midnightdust.midnightcontrols.client.enums.TouchMode; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.ChatScreen; import net.minecraft.client.gui.screen.advancement.AdvancementsScreen; diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/enums/CameraMode.java b/src/main/java/eu/midnightdust/midnightcontrols/client/enums/CameraMode.java index 36efabc..2724248 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/enums/CameraMode.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/enums/CameraMode.java @@ -1,5 +1,17 @@ package eu.midnightdust.midnightcontrols.client.enums; +import net.minecraft.text.Text; +import org.jetbrains.annotations.NotNull; + public enum CameraMode { - FLAT, ADAPTIVE + FLAT, ADAPTIVE; + public Text getTranslatedText() { + return Text.translatable("midnightcontrols.midnightconfig.enum."+this.getClass().getSimpleName()+"."+this.name()); + } + public @NotNull CameraMode next() { + var v = values(); + if (v.length == this.ordinal() + 1) + return v[0]; + return v[this.ordinal() + 1]; + } } diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchMode.java b/src/main/java/eu/midnightdust/midnightcontrols/client/enums/TouchMode.java similarity index 89% rename from src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchMode.java rename to src/main/java/eu/midnightdust/midnightcontrols/client/enums/TouchMode.java index 241b850..74b8211 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchMode.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/enums/TouchMode.java @@ -1,4 +1,4 @@ -package eu.midnightdust.midnightcontrols.client.touch; +package eu.midnightdust.midnightcontrols.client.enums; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java b/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java index 1831d0c..ad38808 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java @@ -125,6 +125,7 @@ public class MidnightControlsSettingsScreen extends SpruceScreen { private final SpruceOption unfocusedInputOption; private final SpruceOption invertsRightXAxis; private final SpruceOption invertsRightYAxis; + private final SpruceOption cameraModeOption; private final SpruceOption toggleControllerProfileOption; private final SpruceOption rightDeadZoneOption; private final SpruceOption leftDeadZoneOption; @@ -144,6 +145,7 @@ public class MidnightControlsSettingsScreen extends SpruceScreen { ); } // Touch options + private final SpruceOption touchWithControllerOption; private final SpruceOption touchSpeedOption; private final SpruceOption touchBreakDelayOption; private final SpruceOption invertTouchOption; @@ -268,6 +270,10 @@ public class MidnightControlsSettingsScreen extends SpruceScreen { } }, Text.translatable("")); + this.cameraModeOption = new SpruceCyclingOption("midnightcontrols.menu.camera_mode", + amount -> MidnightControlsConfig.cameraMode = MidnightControlsConfig.cameraMode.next(), + option -> option.getDisplayText(MidnightControlsConfig.cameraMode.getTranslatedText()), + Text.translatable("midnightcontrols.menu.camera_mode.tooltip")); this.rightDeadZoneOption = new SpruceDoubleOption("midnightcontrols.menu.right_dead_zone", 0.05, 1.0, .05f, () -> MidnightControlsConfig.rightDeadZone, value -> MidnightControlsConfig.rightDeadZone = value, option -> { @@ -295,6 +301,8 @@ public class MidnightControlsSettingsScreen extends SpruceScreen { amount -> MidnightControlsConfig.touchMode = MidnightControlsConfig.touchMode.next(), option -> option.getDisplayText(MidnightControlsConfig.touchMode.getTranslatedText()), Text.translatable("midnightcontrols.menu.touch_mode.tooltip")); + this.touchWithControllerOption = new SpruceToggleBooleanOption("midnightcontrols.menu.touch_with_controller", () -> MidnightControlsConfig.touchInControllerMode, + value -> MidnightControlsConfig.touchInControllerMode = value, Text.translatable("midnightcontrols.menu.touch_with_controller.tooltip")); this.touchSpeedOption = new SpruceDoubleOption("midnightcontrols.menu.touch_speed", 0.0, 150.0, .5f, () -> MidnightControlsConfig.touchSpeed, value -> MidnightControlsConfig.touchSpeed = value, option -> option.getDisplayText(Text.literal(String.valueOf(option.get()))), @@ -447,6 +455,7 @@ public class MidnightControlsSettingsScreen extends SpruceScreen { list.addSingleOptionEntry(this.secondControllerOption); list.addSingleOptionEntry(this.toggleControllerProfileOption); list.addSingleOptionEntry(this.unfocusedInputOption); + list.addSingleOptionEntry(this.cameraModeOption); list.addOptionEntry(this.invertsRightXAxis, this.invertsRightYAxis); list.addSingleOptionEntry(this.rightDeadZoneOption); list.addSingleOptionEntry(this.leftDeadZoneOption); @@ -462,6 +471,7 @@ public class MidnightControlsSettingsScreen extends SpruceScreen { var list = new SpruceOptionListWidget(Position.origin(), width, height); list.setBackground(new MidnightControlsBackground(130)); list.addSingleOptionEntry(this.touchSpeedOption); + list.addSingleOptionEntry(this.touchWithControllerOption); list.addSingleOptionEntry(this.invertTouchOption); list.addSingleOptionEntry(new SpruceSeparatorOption("midnightcontrols.menu.title.hud", true, null)); list.addSingleOptionEntry(this.touchModeOption); diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/WorldRendererMixin.java b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/WorldRendererMixin.java index 46caf6e..44f760a 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/WorldRendererMixin.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/WorldRendererMixin.java @@ -14,7 +14,7 @@ import eu.midnightdust.midnightcontrols.ControlsMode; import eu.midnightdust.midnightcontrols.client.MidnightControlsClient; import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig; import eu.midnightdust.midnightcontrols.client.touch.TouchInput; -import eu.midnightdust.midnightcontrols.client.touch.TouchMode; +import eu.midnightdust.midnightcontrols.client.enums.TouchMode; import eu.midnightdust.midnightcontrols.client.util.RainbowColor; import net.minecraft.block.ShapeContext; import net.minecraft.client.MinecraftClient; diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchUtils.java b/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchUtils.java index ebf8aff..4e2e2c0 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchUtils.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchUtils.java @@ -1,6 +1,7 @@ package eu.midnightdust.midnightcontrols.client.touch; import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig; +import eu.midnightdust.midnightcontrols.client.enums.TouchMode; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.Camera; import net.minecraft.entity.projectile.ProjectileUtil; diff --git a/src/main/resources/assets/midnightcontrols/lang/en_us.json b/src/main/resources/assets/midnightcontrols/lang/en_us.json index 1a0a458..8ddc9ce 100644 --- a/src/main/resources/assets/midnightcontrols/lang/en_us.json +++ b/src/main/resources/assets/midnightcontrols/lang/en_us.json @@ -21,6 +21,8 @@ "midnightcontrols.midnightconfig.enum.HudSide.RIGHT": "Right", "midnightcontrols.midnightconfig.enum.TouchMode.CROSSHAIR": "At Crosshair", "midnightcontrols.midnightconfig.enum.TouchMode.FINGER_POS": "Finger Position", + "midnightcontrols.midnightconfig.enum.CameraMode.FLAT": "Flat", + "midnightcontrols.midnightconfig.enum.CameraMode.ADAPTIVE": "Adaptive", "key.midnightcontrols.look_down": "Look down", "key.midnightcontrols.look_left": "Look left", "key.midnightcontrols.look_right": "Look right", @@ -133,6 +135,7 @@ "midnightcontrols.menu.analog_movement.tooltip": "When possible, enables analog movement.", "midnightcontrols.menu.auto_switch_mode": "Auto Switch Mode", "midnightcontrols.menu.auto_switch_mode.tooltip": "Whether the controls mode should be switched to Controller automatically if one is connected.", + "midnightcontrols.menu.camera_mode": "Camera Mode", "midnightcontrols.menu.controller": "Controller", "midnightcontrols.menu.controller2": "Second Controller", "midnightcontrols.menu.controller2.tooltip": "Second controller to use, which allows (for example) Joy-Cons support.", @@ -207,6 +210,7 @@ "midnightcontrols.menu.invert_touch": "Invert Touch Direction", "midnightcontrols.menu.touch_mode": "Touch Interaction Mode", "midnightcontrols.menu.touch_transparency": "Touch HUD Transparency", + "midnightcontrols.menu.touch_with_controller": "Touch in Controller mode", "midnightcontrols.menu.unfocused_input": "Unfocused Input", "midnightcontrols.menu.unfocused_input.tooltip": "Allows controller input when the window is not focused.", "midnightcontrols.menu.virtual_mouse": "Virtual Mouse",