diff --git a/src/main/java/com/lumijiez/lumiscope/handlers/RadarPacketHandler.java b/src/main/java/com/lumijiez/lumiscope/handlers/RadarPacketHandler.java index 6e3a1fc..e6611a5 100644 --- a/src/main/java/com/lumijiez/lumiscope/handlers/RadarPacketHandler.java +++ b/src/main/java/com/lumijiez/lumiscope/handlers/RadarPacketHandler.java @@ -26,7 +26,7 @@ public class RadarPacketHandler { for (EntityPlayerMP otherPlayer : player.getServerWorld().getMinecraftServer().getPlayerList().getPlayers()) { if (!otherPlayer.equals(player) && player.getDistance(otherPlayer) <= 100) { double direction = getPlayerDirection(player, otherPlayer); - playerInfos.add(new RadarPacket.PlayerInfo(otherPlayer.getName(), direction)); + playerInfos.add(new RadarPacket.PlayerInfo(otherPlayer.getName(), direction, player.getDistance(otherPlayer))); } } INSTANCE.sendTo(new RadarPacket(playerInfos), player); diff --git a/src/main/java/com/lumijiez/lumiscope/network/RadarPacket.java b/src/main/java/com/lumijiez/lumiscope/network/RadarPacket.java index 8721c05..28160c1 100644 --- a/src/main/java/com/lumijiez/lumiscope/network/RadarPacket.java +++ b/src/main/java/com/lumijiez/lumiscope/network/RadarPacket.java @@ -14,12 +14,13 @@ public class RadarPacket implements IMessage { public static class PlayerInfo { public String name; public double direction; + public double distance; - public PlayerInfo(String name, double direction) { + public PlayerInfo(String name, double direction, double distance) { this.name = name; this.direction = direction; + this.distance = distance; } - } private List playerInfos; @@ -40,6 +41,7 @@ public class RadarPacket implements IMessage { buf.writeInt(nameBytes.length); buf.writeBytes(nameBytes); buf.writeDouble(info.direction); + buf.writeDouble(info.distance); } } @@ -53,7 +55,8 @@ public class RadarPacket implements IMessage { buf.readBytes(nameBytes); String name = new String(nameBytes); double direction = buf.readDouble(); - playerInfos.add(new PlayerInfo(name, direction)); + double distance = buf.readDouble(); + playerInfos.add(new PlayerInfo(name, direction, distance)); } } diff --git a/src/main/java/com/lumijiez/lumiscope/render/ShortRadarRenderer.java b/src/main/java/com/lumijiez/lumiscope/render/ShortRadarRenderer.java index a7e8446..133d07d 100644 --- a/src/main/java/com/lumijiez/lumiscope/render/ShortRadarRenderer.java +++ b/src/main/java/com/lumijiez/lumiscope/render/ShortRadarRenderer.java @@ -15,6 +15,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.items.wrapper.PlayerOffhandInvWrapper; import org.lwjgl.opengl.GL11; +import java.awt.*; import java.util.List; @SideOnly(Side.CLIENT) @@ -58,7 +59,7 @@ public class ShortRadarRenderer { private void renderRadar(float partialTicks) { GlStateManager.pushMatrix(); - GlStateManager.translate(0, 0, 0); + GlStateManager.translate(0, 0.01, 0); mc.getTextureManager().bindTexture(radarTexture); @@ -66,13 +67,22 @@ public class ShortRadarRenderer { GlStateManager.disableLighting(); GlStateManager.disableCull(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.color(1.0f, 1.0f, 1.0f, 0.5f); + drawTexturedCircle(1.4f); for (RadarPacket.PlayerInfo info : playerInfos) { double angle = info.direction - Math.toRadians(90); drawTexturedLine(1.4f, angle); } + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + GlStateManager.disableBlend(); + RenderHelper.disableStandardItemLighting(); + GlStateManager.enableTexture2D(); + GlStateManager.enableCull(); for (RadarPacket.PlayerInfo info : playerInfos) { double angle = info.direction - Math.toRadians(90); GlStateManager.pushMatrix(); @@ -82,13 +92,14 @@ public class ShortRadarRenderer { GlStateManager.rotate((float) Math.toDegrees(angle), 0, 0, 1); GlStateManager.scale(0.01, 0.01, 0.01); - RenderHelper.disableStandardItemLighting(); - GlStateManager.enableTexture2D(); - mc.fontRenderer.drawStringWithShadow(info.name, -mc.fontRenderer.getStringWidth(info.name) - 50 , -4, 0xAAFF00); - GlStateManager.disableTexture2D(); - RenderHelper.enableStandardItemLighting(); + mc.fontRenderer.drawStringWithShadow(info.name, -mc.fontRenderer.getStringWidth(info.name) - 50 , -4, 0x808080); + mc.fontRenderer.drawStringWithShadow("(" + (int) info.distance +"m)", -mc.fontRenderer.getStringWidth(info.name) + 5 , -4, interpolateColor(100, 0, (int) info.distance)); + GlStateManager.popMatrix(); } + GlStateManager.disableCull(); + GlStateManager.disableTexture2D(); + RenderHelper.enableStandardItemLighting(); GlStateManager.enableDepth(); GlStateManager.enableLighting(); @@ -152,4 +163,15 @@ public class ShortRadarRenderer { GlStateManager.disableTexture2D(); } + + private int interpolateColor(int maxDistance, int minDistance, int currentDistance) { + int clampedDistance = Math.max(minDistance, Math.min(maxDistance, currentDistance)); + float ratio = (float) (maxDistance - clampedDistance) / (maxDistance - minDistance); + + int r = (int) (ratio * 255); + int g = (int) ((1 - ratio) * 255); + int b = 0; + + return new Color(r, g, b).getRGB(); + } } diff --git a/src/main/resources/assets/lumiscope/textures/gui/radar.png b/src/main/resources/assets/lumiscope/textures/gui/radar.png index 74709a4..40b61e1 100644 Binary files a/src/main/resources/assets/lumiscope/textures/gui/radar.png and b/src/main/resources/assets/lumiscope/textures/gui/radar.png differ