From 3c9d6f2b535f3a223b548aa8cb72f0af5d9c2209 Mon Sep 17 00:00:00 2001 From: isXander Date: Sun, 11 Jun 2023 21:51:01 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20hotplugging=20controllers?= =?UTF-8?q?=20when=20no=20controllers=20were=20connected=20on=20startup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/dev/isxander/controlify/Controlify.java | 10 +++++++--- .../controlify/controller/sdl2/SDL2NativesManager.java | 8 +++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/dev/isxander/controlify/Controlify.java b/src/main/java/dev/isxander/controlify/Controlify.java index c58086f..0e779f3 100644 --- a/src/main/java/dev/isxander/controlify/Controlify.java +++ b/src/main/java/dev/isxander/controlify/Controlify.java @@ -99,6 +99,8 @@ public class Controlify implements ControlifyApi { } } + ClientTickEvents.START_CLIENT_TICK.register(this::tick); + // listen for new controllers GLFW.glfwSetJoystickCallback((jid, event) -> { try { @@ -119,7 +121,11 @@ public class Controlify implements ControlifyApi { if (nativeOnboardingFuture != null) return nativeOnboardingFuture; if (config().globalSettings().vibrationOnboarded) { - return CompletableFuture.completedFuture(config().globalSettings().loadVibrationNatives); + boolean loadNatives = config().globalSettings().loadVibrationNatives; + if (loadNatives && !SDL2NativesManager.isInitialised()) { + SDL2NativesManager.initialise(); + } + return CompletableFuture.completedFuture(loadNatives); } nativeOnboardingFuture = new CompletableFuture<>(); @@ -180,8 +186,6 @@ public class Controlify implements ControlifyApi { config().saveIfDirty(); } - ClientTickEvents.START_CLIENT_TICK.register(this::tick); - FabricLoader.getInstance().getEntrypoints("controlify", ControlifyEntrypoint.class).forEach(entrypoint -> { try { entrypoint.onControllersDiscovered(this); diff --git a/src/main/java/dev/isxander/controlify/controller/sdl2/SDL2NativesManager.java b/src/main/java/dev/isxander/controlify/controller/sdl2/SDL2NativesManager.java index d3d75b8..af5c063 100644 --- a/src/main/java/dev/isxander/controlify/controller/sdl2/SDL2NativesManager.java +++ b/src/main/java/dev/isxander/controlify/controller/sdl2/SDL2NativesManager.java @@ -31,9 +31,11 @@ public class SDL2NativesManager { private static final String NATIVE_LIBRARY_URL = "https://maven.isxander.dev/releases/dev/isxander/sdl2-jni-natives/%s/".formatted(SDL2_VERSION); private static boolean loaded = false; + private static boolean initialised = false; public static void initialise() { - if (loaded) return; + if (initialised) return; + initialised = true; DebugLog.log("Initialising SDL2 native library"); @@ -124,6 +126,10 @@ public class SDL2NativesManager { return loaded; } + public static boolean isInitialised() { + return initialised; + } + private record Target(Util.OS os, boolean is64Bit, boolean isARM) { public static final Target CURRENT = Util.make(() -> { Util.OS os = Util.getPlatform();