diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java index 9e06f94..cccff9e 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java @@ -14,6 +14,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import eu.midnightdust.midnightcontrols.MidnightControlsConstants; import eu.midnightdust.midnightcontrols.client.MidnightControlsClient; import eu.midnightdust.midnightcontrols.client.util.platform.NetworkUtil; +import eu.midnightdust.midnightcontrols.client.virtualkeyboard.KeyboardLayoutManager; import org.thinkingstudio.obsidianui.background.Background; import org.thinkingstudio.obsidianui.mixin.DrawContextAccessor; import org.thinkingstudio.obsidianui.widget.SpruceWidget; @@ -140,6 +141,15 @@ public class MidnightControlsSettingsScreen extends SpruceScreen { maxAnalogValueOption("midnightcontrols.menu.max_right_x_value", GLFW.GLFW_GAMEPAD_AXIS_RIGHT_X), maxAnalogValueOption("midnightcontrols.menu.max_right_y_value", GLFW.GLFW_GAMEPAD_AXIS_RIGHT_Y) }; + // Controller options + public final static SpruceOption virtualKeyboardLayoutOption = + new SpruceCyclingOption("midnightcontrols.menu.virtual_keyboard_layout", + amount -> { + MidnightControlsConfig.keyboardLayout = KeyboardLayoutManager.getNext(KeyboardLayoutManager.getById(MidnightControlsConfig.keyboardLayout)).getId(); + }, + option -> { + return option.getDisplayText(Text.translatable(KeyboardLayoutManager.getById(MidnightControlsConfig.keyboardLayout).getTranslationKey())); + }, null); private static SpruceOption maxAnalogValueOption(String key, int axis) { return new SpruceDoubleOption(key, .25f, 1.f, 0.05f, @@ -395,6 +405,7 @@ public class MidnightControlsSettingsScreen extends SpruceScreen { list.addSingleOptionEntry(this.mouseSpeedOption); list.addSingleOptionEntry(this.virtualMouseOption); list.addSingleOptionEntry(this.virtualKeyboardOption); + list.addSingleOptionEntry(this.virtualKeyboardLayoutOption); list.addSingleOptionEntry(this.hideCursorOption); list.addSingleOptionEntry(this.joystickAsMouseOption); list.addSingleOptionEntry(this.eyeTrackingAsMouseOption); diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/KeyboardLayout.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/KeyboardLayout.java index a88c9ad..23d6d83 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/KeyboardLayout.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/KeyboardLayout.java @@ -52,6 +52,12 @@ public class KeyboardLayout { return id; } + public String getTranslationKey() { + String[] identifier = id.split(":"); + if (identifier.length != 2) return "Invalid Keyboard ID: %s".formatted(id); + return "midnightcontrols.virtual_keyboard.layout.%s.%s".formatted(identifier[0], identifier[1]); + } + public List> getLetters() { return letters; } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/KeyboardLayoutManager.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/KeyboardLayoutManager.java index ba2cfae..6a762af 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/KeyboardLayoutManager.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/KeyboardLayoutManager.java @@ -24,4 +24,13 @@ public class KeyboardLayoutManager { public static KeyboardLayout getById(String id) { return KEYBOARD_LAYOUTS.get(id) == null ? KeyboardLayout.QWERTY : KEYBOARD_LAYOUTS.get(id); } + public static KeyboardLayout getNext(KeyboardLayout current) { + KeyboardLayout[] layouts = KEYBOARD_LAYOUTS.values().toArray(KeyboardLayout[]::new); + int currentIndex = -1; + for (int i = 0; i < layouts.length; i++) { + if (layouts[i] == current) currentIndex = i; + } + currentIndex = currentIndex+1 >= layouts.length ? 0 : currentIndex + 1; + return layouts[currentIndex]; + } } diff --git a/gradle.properties b/gradle.properties index d3b3219..fdc3da1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,7 +15,7 @@ modrinth_id = bXX9h73M curseforge_id = 621768 # Configure the IDs here after creating the projects on the websites -midnightlib_version=1.7.0+1.21.4 +midnightlib_version=1.7.3+1.21.4 fabric_loader_version=0.16.10 fabric_api_version=0.119.5+1.21.5