From ab317f3d31d9f488bc75279e379ea4f6e693c2a7 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Thu, 28 Dec 2023 10:30:43 +0100 Subject: [PATCH] Touch-related fixes --- .../client/MidnightControlsConfig.java | 2 +- .../client/mixin/MouseMixin.java | 6 +-- .../client/touch/TouchInput.java | 52 ++++++++----------- .../client/touch/TouchUtils.java | 3 +- .../assets/midnightcontrols/lang/en_us.json | 4 +- 5 files changed, 28 insertions(+), 39 deletions(-) diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java index df33553..8e28629 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java @@ -114,7 +114,7 @@ public class MidnightControlsConfig extends MidnightConfig { @Entry(category = CONTROLLER, name = "Max analog value: Right X", isSlider = true, min = .25f, max = 1.f) public static double maxAnalogValueRightX = maxAnalogValues[2]; @Entry(category = CONTROLLER, name = "Max analog value: Right Y", isSlider = true, min = .25f, max = 1.f) public static double maxAnalogValueRightY = maxAnalogValues[3]; @Entry(category = CONTROLLER, name = "Trigger button fix") public static boolean triggerFix = true; - @Entry(category = CONTROLLER, name = "Excluded Keybindings") public static List excludedKeybindings = Lists.newArrayList("key.forward", "key.left", "key.back", "key.right", "key.jump", "key.sneak", "key.sprint", "key.inventory", + @Entry(category = MISC, name = "Excluded Keybindings") public static List excludedKeybindings = Lists.newArrayList("key.forward", "key.left", "key.back", "key.right", "key.jump", "key.sneak", "key.sprint", "key.inventory", "key.swapOffhand", "key.drop", "key.use", "key.attack", "key.chat", "key.playerlist", "key.screenshot", "key.togglePerspective", "key.smoothCamera", "key.fullscreen", "key.saveToolbarActivator", "key.loadToolbarActivator", "key.pickItem", "key.hotbar.1", "key.hotbar.2", "key.hotbar.3", "key.hotbar.4", "key.hotbar.5", "key.hotbar.6", "key.hotbar.7", "key.hotbar.8", "key.hotbar.9"); @Entry(category = GAMEPLAY, name = "Enable Hints") public static boolean enableHints = true; diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MouseMixin.java b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MouseMixin.java index 4339aa9..4c26245 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MouseMixin.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MouseMixin.java @@ -88,15 +88,11 @@ public abstract class MouseMixin implements MouseAccessor { boolean bl = false; if (client.currentScreen instanceof TouchscreenOverlay overlay) bl = overlay.mouseClicked(mouseX, mouseY, button); if (!bl) TouchInput.firstHitResult = TouchUtils.getTargettedObject(mouseX, mouseY); - ci.cancel(); + if (client.currentScreen == null) ci.cancel(); } else if (TouchInput.mouseReleased(mouseX, mouseY, button)) ci.cancel(); } } - @Inject(method = "onCursorPos", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiler/Profiler;push(Ljava/lang/String;)V", shift = At.Shift.BEFORE)) - private void midnightcontrols$onCursorDrag(long window, double x, double y, CallbackInfo ci) { - TouchInput.dragging = this.activeButton == GLFW_MOUSE_BUTTON_1 && this.glfwTime > 0.0; - } @Inject(method = "isCursorLocked", at = @At("HEAD"), cancellable = true) private void midnightcontrols$isCursorLocked(CallbackInfoReturnable ci) { diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchInput.java b/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchInput.java index 2a52cdc..48ba292 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchInput.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchInput.java @@ -16,7 +16,6 @@ public class TouchInput { private static final MinecraftClient client = MinecraftClient.getInstance(); public static long clickStartTime; public static HitResult firstHitResult = null; - public static boolean dragging = false; public static void tick() { if (client.currentScreen != null && !(client.currentScreen instanceof TouchscreenOverlay)) return; double scaleFactor = client.getWindow().getScaleFactor(); @@ -31,42 +30,35 @@ public class TouchInput { assert client != null; assert client.player != null; assert client.interactionManager != null; - if (!dragging) { - if (client.player.getMainHandStack() != null && TouchUtils.hasInWorldUseAction(client.player.getMainHandStack())) { - client.interactionManager.interactItem(client.player, client.player.getActiveHand()); - return; - } - HitResult result = TouchUtils.getTargettedObject(mouseX, mouseY); - if (result == null || firstHitResult == null) return; - if (result instanceof BlockHitResult blockHit && firstHitResult instanceof BlockHitResult firstBlock && blockHit.getBlockPos().equals(firstBlock.getBlockPos())) { - if (MidnightControlsConfig.debug) System.out.println(blockHit.getBlockPos().toString()); - if (client.interactionManager.updateBlockBreakingProgress(blockHit.getBlockPos(), blockHit.getSide())) { - client.particleManager.addBlockBreakingParticles(blockHit.getBlockPos(), blockHit.getSide()); - client.player.swingHand(Hand.MAIN_HAND); - } else client.interactionManager.cancelBlockBreaking(); - firstHitResult = TouchUtils.getTargettedObject(mouseX, mouseY); - } - else if (result instanceof EntityHitResult entityHit && firstHitResult instanceof EntityHitResult firstEntity && entityHit.getEntity().getUuid().compareTo(firstEntity.getEntity().getUuid()) == 0) { - if (client.interactionManager.interactEntity(client.player, entityHit.getEntity(), client.player.getActiveHand()) == ActionResult.SUCCESS) { - client.player.swingHand(Hand.MAIN_HAND); - } - firstHitResult = TouchUtils.getTargettedObject(mouseX, mouseY); - } + if (client.player.getMainHandStack() != null && TouchUtils.hasInWorldUseAction(client.player.getMainHandStack())) { + client.interactionManager.interactItem(client.player, client.player.getActiveHand()); + return; } - else { - HitResult result = TouchUtils.getTargettedObject(mouseX, mouseY); - if (result != null && firstHitResult != null) { - if (result instanceof BlockHitResult blockHit && firstHitResult instanceof BlockHitResult firstBlock && !blockHit.getBlockPos().equals(firstBlock.getBlockPos())) { - firstHitResult = null; - } else if (result instanceof EntityHitResult entityHit && firstHitResult instanceof EntityHitResult firstEntity && entityHit.getEntity().getUuid().compareTo(firstEntity.getEntity().getUuid()) != 0) { - firstHitResult = null; - } + HitResult result = TouchUtils.getTargettedObject(mouseX, mouseY); + if (result == null || firstHitResult == null) { + client.interactionManager.cancelBlockBreaking(); + return; + } + + if (result instanceof BlockHitResult blockHit && firstHitResult instanceof BlockHitResult firstBlock && blockHit.getBlockPos().equals(firstBlock.getBlockPos())) { + if (MidnightControlsConfig.debug) System.out.println(blockHit.getBlockPos().toString()); + if (client.interactionManager.updateBlockBreakingProgress(blockHit.getBlockPos(), blockHit.getSide())) { + client.particleManager.addBlockBreakingParticles(blockHit.getBlockPos(), blockHit.getSide()); + client.player.swingHand(Hand.MAIN_HAND); + } else client.interactionManager.cancelBlockBreaking(); + firstHitResult = TouchUtils.getTargettedObject(mouseX, mouseY); + } + else if (result instanceof EntityHitResult entityHit && firstHitResult instanceof EntityHitResult firstEntity && entityHit.getEntity().getUuid().compareTo(firstEntity.getEntity().getUuid()) == 0) { + if (client.interactionManager.interactEntity(client.player, entityHit.getEntity(), client.player.getActiveHand()) == ActionResult.SUCCESS) { + client.player.swingHand(Hand.MAIN_HAND); } + firstHitResult = TouchUtils.getTargettedObject(mouseX, mouseY); } } public static boolean mouseReleased(double mouseX, double mouseY, int button) { firstHitResult = null; + if (client.interactionManager != null) client.interactionManager.cancelBlockBreaking(); if ((client.currentScreen == null || !client.currentScreen.mouseReleased(mouseX, mouseY, button)) && System.currentTimeMillis() - clickStartTime < MidnightControlsConfig.touchBreakDelay) { assert client.player != null; assert client.world != null; 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 4e2e2c0..24b7574 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchUtils.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchUtils.java @@ -1,5 +1,6 @@ package eu.midnightdust.midnightcontrols.client.touch; +import eu.midnightdust.lib.util.PlatformFunctions; import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig; import eu.midnightdust.midnightcontrols.client.enums.TouchMode; import net.minecraft.client.MinecraftClient; @@ -25,7 +26,7 @@ public class TouchUtils { public static final Matrix4f lastProjMat = new Matrix4f(); public static final Matrix4f lastModMat = new Matrix4f(); public static HitResult getTargettedObject(double mouseX, double mouseY) { - if (MidnightControlsConfig.touchMode == TouchMode.CROSSHAIR) { + if (MidnightControlsConfig.touchMode == TouchMode.CROSSHAIR || PlatformFunctions.isModLoaded("vulkanmod")) { return client.crosshairTarget; } Vec3d near = screenSpaceToWorldSpace(mouseX, mouseY, 0); diff --git a/src/main/resources/assets/midnightcontrols/lang/en_us.json b/src/main/resources/assets/midnightcontrols/lang/en_us.json index 8ddc9ce..d1fb7d6 100644 --- a/src/main/resources/assets/midnightcontrols/lang/en_us.json +++ b/src/main/resources/assets/midnightcontrols/lang/en_us.json @@ -16,7 +16,7 @@ "midnightcontrols.midnightconfig.enum.ControllerType.NUMBERED": "Numbered Controller", "midnightcontrols.midnightconfig.enum.ControlsMode.DEFAULT": "Keyboard/Mouse", "midnightcontrols.midnightconfig.enum.ControlsMode.CONTROLLER": "Controller", - "midnightcontrols.midnightconfig.enum.ControlsMode.TOUCHSCREEN": "Touchscreen (WIP)", + "midnightcontrols.midnightconfig.enum.ControlsMode.TOUCHSCREEN": "Touchscreen (Beta)", "midnightcontrols.midnightconfig.enum.HudSide.LEFT": "Left", "midnightcontrols.midnightconfig.enum.HudSide.RIGHT": "Right", "midnightcontrols.midnightconfig.enum.TouchMode.CROSSHAIR": "At Crosshair", @@ -128,7 +128,7 @@ "midnightcontrols.controller_type.numbered": "Numbered Controller", "midnightcontrols.controls_mode.default": "Keyboard/Mouse", "midnightcontrols.controls_mode.controller": "Controller", - "midnightcontrols.controls_mode.touchscreen": "Touchscreen (WIP)", + "midnightcontrols.controls_mode.touchscreen": "Touchscreen (Beta)", "midnightcontrols.hud_side.left": "Left", "midnightcontrols.hud_side.right": "Right", "midnightcontrols.menu.analog_movement": "Analog Movement",