mirror of
https://github.com/TeamMidnightDust/MidnightControls.git
synced 2025-12-14 07:35:10 +01:00
feat: easy switching between virtual keyboard layouts
This commit is contained in:
@@ -14,6 +14,7 @@ import com.mojang.blaze3d.systems.RenderSystem;
|
|||||||
import eu.midnightdust.midnightcontrols.MidnightControlsConstants;
|
import eu.midnightdust.midnightcontrols.MidnightControlsConstants;
|
||||||
import eu.midnightdust.midnightcontrols.client.MidnightControlsClient;
|
import eu.midnightdust.midnightcontrols.client.MidnightControlsClient;
|
||||||
import eu.midnightdust.midnightcontrols.client.util.platform.NetworkUtil;
|
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.background.Background;
|
||||||
import org.thinkingstudio.obsidianui.mixin.DrawContextAccessor;
|
import org.thinkingstudio.obsidianui.mixin.DrawContextAccessor;
|
||||||
import org.thinkingstudio.obsidianui.widget.SpruceWidget;
|
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_x_value", GLFW.GLFW_GAMEPAD_AXIS_RIGHT_X),
|
||||||
maxAnalogValueOption("midnightcontrols.menu.max_right_y_value", GLFW.GLFW_GAMEPAD_AXIS_RIGHT_Y)
|
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) {
|
private static SpruceOption maxAnalogValueOption(String key, int axis) {
|
||||||
return new SpruceDoubleOption(key, .25f, 1.f, 0.05f,
|
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.mouseSpeedOption);
|
||||||
list.addSingleOptionEntry(this.virtualMouseOption);
|
list.addSingleOptionEntry(this.virtualMouseOption);
|
||||||
list.addSingleOptionEntry(this.virtualKeyboardOption);
|
list.addSingleOptionEntry(this.virtualKeyboardOption);
|
||||||
|
list.addSingleOptionEntry(this.virtualKeyboardLayoutOption);
|
||||||
list.addSingleOptionEntry(this.hideCursorOption);
|
list.addSingleOptionEntry(this.hideCursorOption);
|
||||||
list.addSingleOptionEntry(this.joystickAsMouseOption);
|
list.addSingleOptionEntry(this.joystickAsMouseOption);
|
||||||
list.addSingleOptionEntry(this.eyeTrackingAsMouseOption);
|
list.addSingleOptionEntry(this.eyeTrackingAsMouseOption);
|
||||||
|
|||||||
@@ -52,6 +52,12 @@ public class KeyboardLayout {
|
|||||||
return id;
|
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<List<String>> getLetters() {
|
public List<List<String>> getLetters() {
|
||||||
return letters;
|
return letters;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,4 +24,13 @@ public class KeyboardLayoutManager {
|
|||||||
public static KeyboardLayout getById(String id) {
|
public static KeyboardLayout getById(String id) {
|
||||||
return KEYBOARD_LAYOUTS.get(id) == null ? KeyboardLayout.QWERTY : KEYBOARD_LAYOUTS.get(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];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ modrinth_id = bXX9h73M
|
|||||||
curseforge_id = 621768
|
curseforge_id = 621768
|
||||||
# Configure the IDs here after creating the projects on the websites
|
# 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_loader_version=0.16.10
|
||||||
fabric_api_version=0.119.5+1.21.5
|
fabric_api_version=0.119.5+1.21.5
|
||||||
|
|||||||
Reference in New Issue
Block a user