interpolation, better alpha blending

This commit is contained in:
2024-07-29 20:12:35 +03:00
parent 189d1b9888
commit 1cb52696aa
4 changed files with 35 additions and 10 deletions

View File

@@ -26,7 +26,7 @@ public class RadarPacketHandler {
for (EntityPlayerMP otherPlayer : player.getServerWorld().getMinecraftServer().getPlayerList().getPlayers()) { for (EntityPlayerMP otherPlayer : player.getServerWorld().getMinecraftServer().getPlayerList().getPlayers()) {
if (!otherPlayer.equals(player) && player.getDistance(otherPlayer) <= 100) { if (!otherPlayer.equals(player) && player.getDistance(otherPlayer) <= 100) {
double direction = getPlayerDirection(player, otherPlayer); 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); INSTANCE.sendTo(new RadarPacket(playerInfos), player);

View File

@@ -14,12 +14,13 @@ public class RadarPacket implements IMessage {
public static class PlayerInfo { public static class PlayerInfo {
public String name; public String name;
public double direction; public double direction;
public double distance;
public PlayerInfo(String name, double direction) { public PlayerInfo(String name, double direction, double distance) {
this.name = name; this.name = name;
this.direction = direction; this.direction = direction;
this.distance = distance;
} }
} }
private List<PlayerInfo> playerInfos; private List<PlayerInfo> playerInfos;
@@ -40,6 +41,7 @@ public class RadarPacket implements IMessage {
buf.writeInt(nameBytes.length); buf.writeInt(nameBytes.length);
buf.writeBytes(nameBytes); buf.writeBytes(nameBytes);
buf.writeDouble(info.direction); buf.writeDouble(info.direction);
buf.writeDouble(info.distance);
} }
} }
@@ -53,7 +55,8 @@ public class RadarPacket implements IMessage {
buf.readBytes(nameBytes); buf.readBytes(nameBytes);
String name = new String(nameBytes); String name = new String(nameBytes);
double direction = buf.readDouble(); double direction = buf.readDouble();
playerInfos.add(new PlayerInfo(name, direction)); double distance = buf.readDouble();
playerInfos.add(new PlayerInfo(name, direction, distance));
} }
} }

View File

@@ -15,6 +15,7 @@ import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraftforge.items.wrapper.PlayerOffhandInvWrapper; import net.minecraftforge.items.wrapper.PlayerOffhandInvWrapper;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import java.awt.*;
import java.util.List; import java.util.List;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
@@ -58,7 +59,7 @@ public class ShortRadarRenderer {
private void renderRadar(float partialTicks) { private void renderRadar(float partialTicks) {
GlStateManager.pushMatrix(); GlStateManager.pushMatrix();
GlStateManager.translate(0, 0, 0); GlStateManager.translate(0, 0.01, 0);
mc.getTextureManager().bindTexture(radarTexture); mc.getTextureManager().bindTexture(radarTexture);
@@ -66,13 +67,22 @@ public class ShortRadarRenderer {
GlStateManager.disableLighting(); GlStateManager.disableLighting();
GlStateManager.disableCull(); 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); drawTexturedCircle(1.4f);
for (RadarPacket.PlayerInfo info : playerInfos) { for (RadarPacket.PlayerInfo info : playerInfos) {
double angle = info.direction - Math.toRadians(90); double angle = info.direction - Math.toRadians(90);
drawTexturedLine(1.4f, angle); 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) { for (RadarPacket.PlayerInfo info : playerInfos) {
double angle = info.direction - Math.toRadians(90); double angle = info.direction - Math.toRadians(90);
GlStateManager.pushMatrix(); GlStateManager.pushMatrix();
@@ -82,13 +92,14 @@ public class ShortRadarRenderer {
GlStateManager.rotate((float) Math.toDegrees(angle), 0, 0, 1); GlStateManager.rotate((float) Math.toDegrees(angle), 0, 0, 1);
GlStateManager.scale(0.01, 0.01, 0.01); GlStateManager.scale(0.01, 0.01, 0.01);
RenderHelper.disableStandardItemLighting(); mc.fontRenderer.drawStringWithShadow(info.name, -mc.fontRenderer.getStringWidth(info.name) - 50 , -4, 0x808080);
GlStateManager.enableTexture2D(); mc.fontRenderer.drawStringWithShadow("(" + (int) info.distance +"m)", -mc.fontRenderer.getStringWidth(info.name) + 5 , -4, interpolateColor(100, 0, (int) info.distance));
mc.fontRenderer.drawStringWithShadow(info.name, -mc.fontRenderer.getStringWidth(info.name) - 50 , -4, 0xAAFF00);
GlStateManager.disableTexture2D();
RenderHelper.enableStandardItemLighting();
GlStateManager.popMatrix(); GlStateManager.popMatrix();
} }
GlStateManager.disableCull();
GlStateManager.disableTexture2D();
RenderHelper.enableStandardItemLighting();
GlStateManager.enableDepth(); GlStateManager.enableDepth();
GlStateManager.enableLighting(); GlStateManager.enableLighting();
@@ -152,4 +163,15 @@ public class ShortRadarRenderer {
GlStateManager.disableTexture2D(); 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();
}
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 83 KiB