mirror of
https://github.com/TeamMidnightDust/MidnightControls.git
synced 2025-12-14 07:35:10 +01:00
Touch-related fixes
This commit is contained in:
@@ -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 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 = "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 = "Trigger button fix") public static boolean triggerFix = true;
|
||||||
@Entry(category = CONTROLLER, name = "Excluded Keybindings") public static List<String> 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<String> 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.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");
|
"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;
|
@Entry(category = GAMEPLAY, name = "Enable Hints") public static boolean enableHints = true;
|
||||||
|
|||||||
@@ -88,15 +88,11 @@ public abstract class MouseMixin implements MouseAccessor {
|
|||||||
boolean bl = false;
|
boolean bl = false;
|
||||||
if (client.currentScreen instanceof TouchscreenOverlay overlay) bl = overlay.mouseClicked(mouseX, mouseY, button);
|
if (client.currentScreen instanceof TouchscreenOverlay overlay) bl = overlay.mouseClicked(mouseX, mouseY, button);
|
||||||
if (!bl) TouchInput.firstHitResult = TouchUtils.getTargettedObject(mouseX, mouseY);
|
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();
|
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)
|
@Inject(method = "isCursorLocked", at = @At("HEAD"), cancellable = true)
|
||||||
private void midnightcontrols$isCursorLocked(CallbackInfoReturnable<Boolean> ci) {
|
private void midnightcontrols$isCursorLocked(CallbackInfoReturnable<Boolean> ci) {
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ public class TouchInput {
|
|||||||
private static final MinecraftClient client = MinecraftClient.getInstance();
|
private static final MinecraftClient client = MinecraftClient.getInstance();
|
||||||
public static long clickStartTime;
|
public static long clickStartTime;
|
||||||
public static HitResult firstHitResult = null;
|
public static HitResult firstHitResult = null;
|
||||||
public static boolean dragging = false;
|
|
||||||
public static void tick() {
|
public static void tick() {
|
||||||
if (client.currentScreen != null && !(client.currentScreen instanceof TouchscreenOverlay)) return;
|
if (client.currentScreen != null && !(client.currentScreen instanceof TouchscreenOverlay)) return;
|
||||||
double scaleFactor = client.getWindow().getScaleFactor();
|
double scaleFactor = client.getWindow().getScaleFactor();
|
||||||
@@ -31,42 +30,35 @@ public class TouchInput {
|
|||||||
assert client != null;
|
assert client != null;
|
||||||
assert client.player != null;
|
assert client.player != null;
|
||||||
assert client.interactionManager != 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 (client.player.getMainHandStack() != null && TouchUtils.hasInWorldUseAction(client.player.getMainHandStack())) {
|
||||||
if (MidnightControlsConfig.debug) System.out.println(blockHit.getBlockPos().toString());
|
client.interactionManager.interactItem(client.player, client.player.getActiveHand());
|
||||||
if (client.interactionManager.updateBlockBreakingProgress(blockHit.getBlockPos(), blockHit.getSide())) {
|
return;
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
HitResult result = TouchUtils.getTargettedObject(mouseX, mouseY);
|
||||||
HitResult result = TouchUtils.getTargettedObject(mouseX, mouseY);
|
if (result == null || firstHitResult == null) {
|
||||||
if (result != null && firstHitResult != null) {
|
client.interactionManager.cancelBlockBreaking();
|
||||||
if (result instanceof BlockHitResult blockHit && firstHitResult instanceof BlockHitResult firstBlock && !blockHit.getBlockPos().equals(firstBlock.getBlockPos())) {
|
return;
|
||||||
firstHitResult = null;
|
}
|
||||||
} else if (result instanceof EntityHitResult entityHit && firstHitResult instanceof EntityHitResult firstEntity && entityHit.getEntity().getUuid().compareTo(firstEntity.getEntity().getUuid()) != 0) {
|
|
||||||
firstHitResult = null;
|
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) {
|
public static boolean mouseReleased(double mouseX, double mouseY, int button) {
|
||||||
firstHitResult = null;
|
firstHitResult = null;
|
||||||
|
if (client.interactionManager != null) client.interactionManager.cancelBlockBreaking();
|
||||||
if ((client.currentScreen == null || !client.currentScreen.mouseReleased(mouseX, mouseY, button)) && System.currentTimeMillis() - clickStartTime < MidnightControlsConfig.touchBreakDelay) {
|
if ((client.currentScreen == null || !client.currentScreen.mouseReleased(mouseX, mouseY, button)) && System.currentTimeMillis() - clickStartTime < MidnightControlsConfig.touchBreakDelay) {
|
||||||
assert client.player != null;
|
assert client.player != null;
|
||||||
assert client.world != null;
|
assert client.world != null;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package eu.midnightdust.midnightcontrols.client.touch;
|
package eu.midnightdust.midnightcontrols.client.touch;
|
||||||
|
|
||||||
|
import eu.midnightdust.lib.util.PlatformFunctions;
|
||||||
import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig;
|
import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig;
|
||||||
import eu.midnightdust.midnightcontrols.client.enums.TouchMode;
|
import eu.midnightdust.midnightcontrols.client.enums.TouchMode;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
@@ -25,7 +26,7 @@ public class TouchUtils {
|
|||||||
public static final Matrix4f lastProjMat = new Matrix4f();
|
public static final Matrix4f lastProjMat = new Matrix4f();
|
||||||
public static final Matrix4f lastModMat = new Matrix4f();
|
public static final Matrix4f lastModMat = new Matrix4f();
|
||||||
public static HitResult getTargettedObject(double mouseX, double mouseY) {
|
public static HitResult getTargettedObject(double mouseX, double mouseY) {
|
||||||
if (MidnightControlsConfig.touchMode == TouchMode.CROSSHAIR) {
|
if (MidnightControlsConfig.touchMode == TouchMode.CROSSHAIR || PlatformFunctions.isModLoaded("vulkanmod")) {
|
||||||
return client.crosshairTarget;
|
return client.crosshairTarget;
|
||||||
}
|
}
|
||||||
Vec3d near = screenSpaceToWorldSpace(mouseX, mouseY, 0);
|
Vec3d near = screenSpaceToWorldSpace(mouseX, mouseY, 0);
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
"midnightcontrols.midnightconfig.enum.ControllerType.NUMBERED": "Numbered Controller",
|
"midnightcontrols.midnightconfig.enum.ControllerType.NUMBERED": "Numbered Controller",
|
||||||
"midnightcontrols.midnightconfig.enum.ControlsMode.DEFAULT": "Keyboard/Mouse",
|
"midnightcontrols.midnightconfig.enum.ControlsMode.DEFAULT": "Keyboard/Mouse",
|
||||||
"midnightcontrols.midnightconfig.enum.ControlsMode.CONTROLLER": "Controller",
|
"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.LEFT": "Left",
|
||||||
"midnightcontrols.midnightconfig.enum.HudSide.RIGHT": "Right",
|
"midnightcontrols.midnightconfig.enum.HudSide.RIGHT": "Right",
|
||||||
"midnightcontrols.midnightconfig.enum.TouchMode.CROSSHAIR": "At Crosshair",
|
"midnightcontrols.midnightconfig.enum.TouchMode.CROSSHAIR": "At Crosshair",
|
||||||
@@ -128,7 +128,7 @@
|
|||||||
"midnightcontrols.controller_type.numbered": "Numbered Controller",
|
"midnightcontrols.controller_type.numbered": "Numbered Controller",
|
||||||
"midnightcontrols.controls_mode.default": "Keyboard/Mouse",
|
"midnightcontrols.controls_mode.default": "Keyboard/Mouse",
|
||||||
"midnightcontrols.controls_mode.controller": "Controller",
|
"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.left": "Left",
|
||||||
"midnightcontrols.hud_side.right": "Right",
|
"midnightcontrols.hud_side.right": "Right",
|
||||||
"midnightcontrols.menu.analog_movement": "Analog Movement",
|
"midnightcontrols.menu.analog_movement": "Analog Movement",
|
||||||
|
|||||||
Reference in New Issue
Block a user