From cf27899bcdf2f11a12df2a542e859cdc6bbc3f22 Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Sat, 8 Mar 2025 23:38:52 +0800 Subject: [PATCH] =?UTF-8?q?t=E6=B7=BB=E5=8A=A0=E5=BC=B1=E5=8C=96=E7=9A=84?= =?UTF-8?q?=E5=A2=99=E5=90=8E=E5=AE=9E=E4=BD=93=E6=A1=86=E6=98=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/overlay/DroneUIOverlay.java | 2 +- .../client/overlay/HandsomeFrameOverlay.java | 36 +++++++++++++----- .../client/overlay/JavelinHudOverlay.java | 6 +-- .../screens/{javelin => frame}/frame.png | Bin .../screens/{javelin => frame}/frame_lock.png | Bin .../{javelin => frame}/frame_target.png | Bin .../textures/screens/frame/frame_weak.png | Bin 0 -> 690 bytes 7 files changed, 30 insertions(+), 14 deletions(-) rename src/main/resources/assets/superbwarfare/textures/screens/{javelin => frame}/frame.png (100%) rename src/main/resources/assets/superbwarfare/textures/screens/{javelin => frame}/frame_lock.png (100%) rename src/main/resources/assets/superbwarfare/textures/screens/{javelin => frame}/frame_target.png (100%) create mode 100644 src/main/resources/assets/superbwarfare/textures/screens/frame/frame_weak.png 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 39178a2c6..f8b3f1d7f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/DroneUIOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/DroneUIOverlay.java @@ -38,7 +38,7 @@ import static com.atsuishio.superbwarfare.entity.vehicle.DroneEntity.KAMIKAZE_MO public class DroneUIOverlay { public static int MAX_DISTANCE = 256; - private static final ResourceLocation FRAME = ModUtils.loc("textures/screens/javelin/frame.png"); + private static final ResourceLocation FRAME = ModUtils.loc("textures/screens/frame/frame.png"); @SubscribeEvent(priority = EventPriority.NORMAL) public static void eventHandler(RenderGuiEvent.Pre event) { diff --git a/src/main/java/com/atsuishio/superbwarfare/client/overlay/HandsomeFrameOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/overlay/HandsomeFrameOverlay.java index 4f2090a10..4b7fb872f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/HandsomeFrameOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/HandsomeFrameOverlay.java @@ -31,14 +31,13 @@ import java.util.List; @Mod.EventBusSubscriber(value = Dist.CLIENT) public class HandsomeFrameOverlay { - private static final ResourceLocation FRAME = ModUtils.loc("textures/screens/javelin/frame.png"); - private static final ResourceLocation FRAME_TARGET = ModUtils.loc("textures/screens/javelin/frame_target.png"); - private static final ResourceLocation FRAME_LOCK = ModUtils.loc("textures/screens/javelin/frame_lock.png"); + private static final ResourceLocation FRAME = ModUtils.loc("textures/screens/frame/frame.png"); + private static final ResourceLocation FRAME_WEAK = ModUtils.loc("textures/screens/frame/frame_weak.png"); + private static final ResourceLocation FRAME_TARGET = ModUtils.loc("textures/screens/frame/frame_target.png"); + private static final ResourceLocation FRAME_LOCK = ModUtils.loc("textures/screens/frame/frame_lock.png"); @SubscribeEvent(priority = EventPriority.LOWEST) public static void eventHandler(RenderGuiEvent.Pre event) { - int w = event.getWindow().getGuiScaledWidth(); - int h = event.getWindow().getGuiScaledHeight(); Player player = Minecraft.getInstance().player; PoseStack poseStack = event.getGuiGraphics().pose(); @@ -50,7 +49,7 @@ public class HandsomeFrameOverlay { if (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand(player)) return; - if (stack.getItem() instanceof GunItem gunItem && Minecraft.getInstance().options.getCameraType().isFirstPerson()) { + if (stack.getItem() instanceof GunItem && Minecraft.getInstance().options.getCameraType().isFirstPerson()) { int level = PerkHelper.getItemPerkLevel(ModPerks.INTELLIGENT_CHIP.get(), stack); if (level == 0) return; @@ -61,7 +60,9 @@ public class HandsomeFrameOverlay { RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); RenderSystem.setShaderColor(1, 1, 1, 1); - List entities = SeekTool.seekLivingEntitiesThroughWall(player, player.level(), 32 + 8 * (level - 1), 30); + List allEntities = SeekTool.seekLivingEntitiesThroughWall(player, player.level(), 32 + 8 * (level - 1), 30); + List visibleEntities = SeekTool.seekLivingEntities(player, player.level(), 32 + 8 * (level - 1), 30); + Entity naerestEntity = SeekTool.seekLivingEntity(player, player.level(), 32 + 8 * (level - 1), 30); Entity targetEntity = ClientEventHandler.entity; @@ -74,7 +75,7 @@ public class HandsomeFrameOverlay { zoom = Minecraft.getInstance().options.fov().get() / ClientEventHandler.fov + 0.05 * fovAdjust2; } - for (var e : entities) { + for (var e : allEntities) { 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)); @@ -84,13 +85,28 @@ public class HandsomeFrameOverlay { if (point == null) return; boolean lockOn = e == targetEntity; - boolean nearest = e == naerestEntity; + boolean isNearestEntity = e == naerestEntity; poseStack.pushPose(); float x = (float) point.x; float y = (float) point.y; - RenderHelper.blit(poseStack, lockOn ? FRAME_LOCK : nearest ? FRAME_TARGET : FRAME, x - 12, y - 12, 0, 0, 24, 24, 24, 24, 1f); + var canBeSeen = visibleEntities.contains(e); + + ResourceLocation icon; + if (lockOn) { + icon = FRAME_LOCK; + } else if (canBeSeen) { + if (isNearestEntity) { + icon = FRAME_TARGET; + } else { + icon = FRAME; + } + } else { + icon = FRAME_WEAK; + } + + RenderHelper.blit(poseStack, icon, x - 12, y - 12, 0, 0, 24, 24, 24, 24, 1f); poseStack.popPose(); } } 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 40774d0c0..800e8217d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/JavelinHudOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/JavelinHudOverlay.java @@ -34,9 +34,9 @@ import static com.atsuishio.superbwarfare.client.RenderHelper.preciseBlit; @Mod.EventBusSubscriber(value = Dist.CLIENT) public class JavelinHudOverlay { - private static final ResourceLocation FRAME = ModUtils.loc("textures/screens/javelin/frame.png"); - private static final ResourceLocation FRAME_TARGET = ModUtils.loc("textures/screens/javelin/frame_target.png"); - private static final ResourceLocation FRAME_LOCK = ModUtils.loc("textures/screens/javelin/frame_lock.png"); + private static final ResourceLocation FRAME = ModUtils.loc("textures/screens/frame/frame.png"); + private static final ResourceLocation FRAME_TARGET = ModUtils.loc("textures/screens/frame/frame_target.png"); + private static final ResourceLocation FRAME_LOCK = ModUtils.loc("textures/screens/frame/frame_lock.png"); private static float scopeScale = 1; @SubscribeEvent(priority = EventPriority.LOWEST) diff --git a/src/main/resources/assets/superbwarfare/textures/screens/javelin/frame.png b/src/main/resources/assets/superbwarfare/textures/screens/frame/frame.png similarity index 100% rename from src/main/resources/assets/superbwarfare/textures/screens/javelin/frame.png rename to src/main/resources/assets/superbwarfare/textures/screens/frame/frame.png diff --git a/src/main/resources/assets/superbwarfare/textures/screens/javelin/frame_lock.png b/src/main/resources/assets/superbwarfare/textures/screens/frame/frame_lock.png similarity index 100% rename from src/main/resources/assets/superbwarfare/textures/screens/javelin/frame_lock.png rename to src/main/resources/assets/superbwarfare/textures/screens/frame/frame_lock.png diff --git a/src/main/resources/assets/superbwarfare/textures/screens/javelin/frame_target.png b/src/main/resources/assets/superbwarfare/textures/screens/frame/frame_target.png similarity index 100% rename from src/main/resources/assets/superbwarfare/textures/screens/javelin/frame_target.png rename to src/main/resources/assets/superbwarfare/textures/screens/frame/frame_target.png diff --git a/src/main/resources/assets/superbwarfare/textures/screens/frame/frame_weak.png b/src/main/resources/assets/superbwarfare/textures/screens/frame/frame_weak.png new file mode 100644 index 0000000000000000000000000000000000000000..e56b17320a32ce03d508df3fc10321785ce373b7 GIT binary patch literal 690 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sDEfH31!Z9ZwBphSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zo?+6~AReHaZK)BSX`Y^13>-iXD}xjxD+42tgCZM@Y zV3k3Z7C;tMm!W|HNLI$1W6KS>S3oZ_CVIL!hE&A8z3G_M93a5_uVN19BB`E z@08rFVn3;NT!6{aNnt|r4$hs;Z+A)OKUk#HQIeeL>G-Dlq|UDLn3kXR5^VRHJOAy; znFn$j7@V@W!_Iwp!mMQruV%Tfd;MwEnsu)=e1m8CEuZq-ay_52Si}3@A)!~3Wsa9` zzIo>5?|J1Z7Jbg8vEPqB{+MnzzkXWkN$bNMtQ+FiuhihO_nb8S^2;x|(~hKVt}~i> z=l%EJ*A+NU-OW3G`f!KsleEnXx8;hTe)>tXYmxcpFWFvM`)vKTM^3Yq=W8!N|JiQa z?YF7v3#8vE{kU;^`ZoRlsjEb_tY6El_!94J(onyof4}LmGZ&e5NO3gmj>3nNSrw}D zOAU|t++=ujb!*|i114V+P6=ySpFa2Ir}>c%-{5-Pb^i{Z*jgtAj3)?)?fAz~8{BL3 Sz_Y3rB;x7n=d#Wzp$P!=xZ^+o literal 0 HcmV?d00001