平滑部分HUD

This commit is contained in:
Atsuihsio 2025-03-08 17:42:57 +08:00
parent 9592fd561f
commit 280b1b9e16
3 changed files with 15 additions and 19 deletions

View file

@ -11,12 +11,12 @@ import com.atsuishio.superbwarfare.tools.SeekTool;
import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -135,18 +135,18 @@ public class DroneUIOverlay {
} }
} }
Camera camera = mc.gameRenderer.getMainCamera();
Vec3 cameraPos = camera.getPosition();
List<Entity> entities = SeekTool.seekLivingEntities(entity, entity.level(), 256, 30); List<Entity> entities = SeekTool.seekLivingEntities(entity, entity.level(), 256, 30);
float fovAdjust2 = (float) (mc.options.fov().get() / 30) - 1; float fovAdjust2 = (float) (mc.options.fov().get() / 30) - 1;
double zoom = 0.975 * ClientEventHandler.droneFovLerp + 0.06 * fovAdjust2; double zoom = 0.975 * ClientEventHandler.droneFovLerp + 0.06 * fovAdjust2;
for (var e : entities) { for (var e : entities) {
Vec3 pos = new Vec3(e.getX(), e.getEyeY(), e.getZ()); 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 lookAngle = entity.getLookAngle().normalize().scale(pos.distanceTo(cameraPos) * (1 - 1.0 / zoom)); 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); Vec3 point = RenderHelper.worldToScreen(pos, cPos);
if (point != null) { if (point != null) {
poseStack.pushPose(); poseStack.pushPose();

View file

@ -12,7 +12,6 @@ import com.atsuishio.superbwarfare.tools.SeekTool;
import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
@ -45,9 +44,6 @@ public class JavelinHudOverlay {
int w = event.getWindow().getGuiScaledWidth(); int w = event.getWindow().getGuiScaledWidth();
int h = event.getWindow().getGuiScaledHeight(); int h = event.getWindow().getGuiScaledHeight();
Player player = Minecraft.getInstance().player; Player player = Minecraft.getInstance().player;
Minecraft mc = Minecraft.getInstance();
Camera camera = mc.gameRenderer.getMainCamera();
Vec3 cameraPos = camera.getPosition();
PoseStack poseStack = event.getGuiGraphics().pose(); PoseStack poseStack = event.getGuiGraphics().pose();
if (player != null) { if (player != null) {
@ -103,10 +99,11 @@ public class JavelinHudOverlay {
double zoom = Minecraft.getInstance().options.fov().get() / ClientEventHandler.fov + 0.5 * fovAdjust2; double zoom = Minecraft.getInstance().options.fov().get() / ClientEventHandler.fov + 0.5 * fovAdjust2;
for (var e : entities) { for (var e : entities) {
Vec3 pos = new Vec3(e.getX(), e.getEyeY(), e.getZ()); 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 lookAngle = player.getLookAngle().normalize().scale(pos.distanceTo(cameraPos) * (1 - 1.0 / zoom)); 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); Vec3 point = RenderHelper.worldToScreen(pos, cPos);
if (point == null) return; if (point == null) return;

View file

@ -7,9 +7,9 @@ import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.tools.SeekTool; import com.atsuishio.superbwarfare.tools.SeekTool;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -28,8 +28,6 @@ public class RedTriangleOverlay {
@SubscribeEvent(priority = EventPriority.NORMAL) @SubscribeEvent(priority = EventPriority.NORMAL)
public static void eventHandler(RenderGuiEvent.Pre event) { public static void eventHandler(RenderGuiEvent.Pre event) {
Minecraft mc = Minecraft.getInstance(); Minecraft mc = Minecraft.getInstance();
Camera camera = mc.gameRenderer.getMainCamera();
Vec3 cameraPos = camera.getPosition();
PoseStack poseStack = event.getGuiGraphics().pose(); PoseStack poseStack = event.getGuiGraphics().pose();
Player player = mc.player; Player player = mc.player;
@ -42,9 +40,10 @@ public class RedTriangleOverlay {
Entity idf = SeekTool.seekLivingEntity(player, player.level(), 128, 6); Entity idf = SeekTool.seekLivingEntity(player, player.level(), 128, 6);
if (idf == null) return; if (idf == null) return;
double distance = idf.position().distanceTo(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 point = RenderHelper.worldToScreen(new Vec3(idf.getX(), idf.getEyeY() + 0.5 + 0.07 * distance, idf.getZ()), cameraPos); 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; if (point == null) return;
poseStack.pushPose(); poseStack.pushPose();