From 280b1b9e161c358f2b91edef30e2a122610f5128 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Sat, 8 Mar 2025 17:42:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=B3=E6=BB=91=E9=83=A8=E5=88=86HUD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/client/overlay/DroneUIOverlay.java | 12 ++++++------ .../client/overlay/JavelinHudOverlay.java | 11 ++++------- .../client/overlay/RedTriangleOverlay.java | 11 +++++------ 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/client/overlay/DroneUIOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/overlay/DroneUIOverlay.java index 3f189a0a5..39178a2c6 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/DroneUIOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/DroneUIOverlay.java @@ -11,12 +11,12 @@ import com.atsuishio.superbwarfare.tools.SeekTool; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -135,18 +135,18 @@ public class DroneUIOverlay { } } - Camera camera = mc.gameRenderer.getMainCamera(); - Vec3 cameraPos = camera.getPosition(); List entities = SeekTool.seekLivingEntities(entity, entity.level(), 256, 30); float fovAdjust2 = (float) (mc.options.fov().get() / 30) - 1; double zoom = 0.975 * ClientEventHandler.droneFovLerp + 0.06 * fovAdjust2; for (var e : entities) { - Vec3 pos = new Vec3(e.getX(), e.getEyeY(), e.getZ()); - Vec3 lookAngle = entity.getLookAngle().normalize().scale(pos.distanceTo(cameraPos) * (1 - 1.0 / zoom)); + Vec3 droneVec = new Vec3(Mth.lerp(event.getPartialTick(), entity.xo, entity.getX()), Mth.lerp(event.getPartialTick(), entity.yo + entity.getEyeHeight(), entity.getEyeY()), Mth.lerp(event.getPartialTick(), entity.zo, entity.getZ())); + Vec3 pos = new Vec3(Mth.lerp(event.getPartialTick(), e.xo, e.getX()), Mth.lerp(event.getPartialTick(), e.yo + e.getEyeHeight(), e.getEyeY()), Mth.lerp(event.getPartialTick(), e.zo, e.getZ())); - var cPos = cameraPos.add(lookAngle); + Vec3 lookAngle = entity.getLookAngle().normalize().scale(pos.distanceTo(droneVec) * (1 - 1.0 / zoom)); + + var cPos = droneVec.add(lookAngle); Vec3 point = RenderHelper.worldToScreen(pos, cPos); if (point != null) { poseStack.pushPose(); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/overlay/JavelinHudOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/overlay/JavelinHudOverlay.java index 9d2145e76..40774d0c0 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/JavelinHudOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/JavelinHudOverlay.java @@ -12,7 +12,6 @@ import com.atsuishio.superbwarfare.tools.SeekTool; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.RenderType; @@ -45,9 +44,6 @@ public class JavelinHudOverlay { int w = event.getWindow().getGuiScaledWidth(); int h = event.getWindow().getGuiScaledHeight(); Player player = Minecraft.getInstance().player; - Minecraft mc = Minecraft.getInstance(); - Camera camera = mc.gameRenderer.getMainCamera(); - Vec3 cameraPos = camera.getPosition(); PoseStack poseStack = event.getGuiGraphics().pose(); if (player != null) { @@ -103,10 +99,11 @@ public class JavelinHudOverlay { double zoom = Minecraft.getInstance().options.fov().get() / ClientEventHandler.fov + 0.5 * fovAdjust2; for (var e : entities) { - Vec3 pos = new Vec3(e.getX(), e.getEyeY(), e.getZ()); - Vec3 lookAngle = player.getLookAngle().normalize().scale(pos.distanceTo(cameraPos) * (1 - 1.0 / zoom)); + Vec3 playerVec = new Vec3(Mth.lerp(event.getPartialTick(), player.xo, player.getX()), Mth.lerp(event.getPartialTick(), player.yo + player.getEyeHeight(), player.getEyeY()), Mth.lerp(event.getPartialTick(), player.zo, player.getZ())); + Vec3 pos = new Vec3(Mth.lerp(event.getPartialTick(), e.xo, e.getX()), Mth.lerp(event.getPartialTick(), e.yo + e.getEyeHeight(), e.getEyeY()), Mth.lerp(event.getPartialTick(), e.zo, e.getZ())); + Vec3 lookAngle = player.getLookAngle().normalize().scale(pos.distanceTo(playerVec) * (1 - 1.0 / zoom)); - var cPos = cameraPos.add(lookAngle); + var cPos = playerVec.add(lookAngle); Vec3 point = RenderHelper.worldToScreen(pos, cPos); if (point == null) return; diff --git a/src/main/java/com/atsuishio/superbwarfare/client/overlay/RedTriangleOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/overlay/RedTriangleOverlay.java index efade06e2..e1a095b8f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/RedTriangleOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/RedTriangleOverlay.java @@ -7,9 +7,9 @@ import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.tools.SeekTool; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -28,8 +28,6 @@ public class RedTriangleOverlay { @SubscribeEvent(priority = EventPriority.NORMAL) public static void eventHandler(RenderGuiEvent.Pre event) { Minecraft mc = Minecraft.getInstance(); - Camera camera = mc.gameRenderer.getMainCamera(); - Vec3 cameraPos = camera.getPosition(); PoseStack poseStack = event.getGuiGraphics().pose(); Player player = mc.player; @@ -42,9 +40,10 @@ public class RedTriangleOverlay { Entity idf = SeekTool.seekLivingEntity(player, player.level(), 128, 6); if (idf == null) return; - double distance = idf.position().distanceTo(cameraPos); - - Vec3 point = RenderHelper.worldToScreen(new Vec3(idf.getX(), idf.getEyeY() + 0.5 + 0.07 * distance, idf.getZ()), cameraPos); + Vec3 playerVec = new Vec3(Mth.lerp(event.getPartialTick(), player.xo, player.getX()), Mth.lerp(event.getPartialTick(), player.yo + player.getEyeHeight(), player.getEyeY()), Mth.lerp(event.getPartialTick(), player.zo, player.getZ())); + double distance = idf.position().distanceTo(playerVec); + Vec3 pos = new Vec3(Mth.lerp(event.getPartialTick(), idf.xo, idf.getX()), Mth.lerp(event.getPartialTick(), idf.yo + idf.getEyeHeight() + 0.5 + 0.07 * distance, idf.getEyeY() + 0.5 + 0.07 * distance), Mth.lerp(event.getPartialTick(), idf.zo, idf.getZ())); + Vec3 point = RenderHelper.worldToScreen(pos, playerVec); if (point == null) return; poseStack.pushPose();