1
0
forked from Clones/Controlify

🎮📳 Controller Vibration! (#38)

This commit is contained in:
Xander
2023-04-04 17:17:01 +01:00
committed by GitHub
parent 2bf7cf4792
commit ebbc549e32
32 changed files with 686 additions and 42 deletions

View File

@ -7,7 +7,9 @@ import dev.isxander.controlify.api.entrypoint.ControlifyEntrypoint;
import dev.isxander.controlify.controller.Controller;
import dev.isxander.controlify.controller.ControllerState;
import dev.isxander.controlify.controller.joystick.CompoundJoystickController;
import dev.isxander.controlify.controller.sdl2.SDL2NativesManager;
import dev.isxander.controlify.gui.screen.ControllerDeadzoneCalibrationScreen;
import dev.isxander.controlify.gui.screen.VibrationOnboardingScreen;
import dev.isxander.controlify.screenop.ScreenProcessorProvider;
import dev.isxander.controlify.config.ControlifyConfig;
import dev.isxander.controlify.controller.hid.ControllerHIDService;
@ -53,27 +55,56 @@ public class Controlify implements ControlifyApi {
private double askSwitchTime = 0;
private ToastUtils.ControlifyToast askSwitchToast = null;
public void initializeControllers() {
public void initializeControlify() {
LOGGER.info("Initializing Controlify...");
config().load();
if (!config().globalSettings().vibrationOnboarded) {
minecraft.setScreen(new VibrationOnboardingScreen(
minecraft.screen,
answer -> this.initializeControllers()
));
} else {
this.initializeControllers();
}
}
private void initializeControllers() {
LOGGER.info("Discovering and initializing controllers...");
config().load();
controllerHIDService = new ControllerHIDService();
controllerHIDService.start();
if (config().globalSettings().loadVibrationNatives)
SDL2NativesManager.initialise();
boolean dirtyControllerConfig = false;
// find already connected controllers
for (int jid = 0; jid <= GLFW.GLFW_JOYSTICK_LAST; jid++) {
if (GLFW.glfwJoystickPresent(jid)) {
var controller = Controller.createOrGet(jid, controllerHIDService.fetchType());
LOGGER.info("Controller found: " + controller.name());
try {
var controller = Controller.createOrGet(jid, controllerHIDService.fetchType());
LOGGER.info("Controller found: " + controller.name());
config().loadOrCreateControllerData(controller);
config().loadOrCreateControllerData(controller);
if (config().currentControllerUid().equals(controller.uid()))
setCurrentController(controller);
if (config().currentControllerUid().equals(controller.uid()))
setCurrentController(controller);
if (controller.config().allowVibrations && !config().globalSettings().loadVibrationNatives) {
controller.config().allowVibrations = false;
dirtyControllerConfig = true;
}
} catch (Exception e) {
LOGGER.error("Failed to initialize controller with jid " + jid, e);
}
}
}
if (dirtyControllerConfig) {
config().save();
}
checkCompoundJoysticks();
if (Controller.CONTROLLERS.isEmpty()) {
@ -108,12 +139,15 @@ public class Controlify implements ControlifyApi {
});
}
public void initializeControlify() {
public void preInitialiseControlify() {
LOGGER.info("Pre-initializing Controlify...");
this.inGameInputHandler = new InGameInputHandler(Controller.DUMMY); // initialize with dummy controller before connection in case of no controller
this.virtualMouseHandler = new VirtualMouseHandler();
controllerHIDService = new ControllerHIDService();
controllerHIDService.start();
FabricLoader.getInstance().getEntrypoints("controlify", ControlifyEntrypoint.class).forEach(entrypoint -> {
try {
entrypoint.onControlifyPreInit(this);
@ -139,8 +173,11 @@ public class Controlify implements ControlifyApi {
for (var controller : Controller.CONTROLLERS.values()) {
if (!outOfFocus)
controller.updateState();
else
else {
controller.clearState();
controller.rumbleManager().stopCurrentEffect();
}
controller.rumbleManager().tick();
}
ControllerState state = currentController == null ? ControllerState.EMPTY : currentController.state();