优化各种HUD

This commit is contained in:
17146 2025-01-03 22:32:30 +08:00
parent 27893f03ab
commit 2e7e789bc0
11 changed files with 229 additions and 232 deletions

View file

@ -32,17 +32,10 @@ public class AmmoBarOverlay {
private static final ResourceLocation DIR = ModUtils.loc("textures/gun_icon/fire_mode/dir.png");
private static final ResourceLocation MOUSE = ModUtils.loc("textures/gun_icon/fire_mode/mouse.png");
private static boolean creativeAmmo() {
private static boolean hasCreativeAmmo() {
Player player = Minecraft.getInstance().player;
int count = 0;
if (player != null) {
for (var inv : player.getInventory().items) {
if (inv.is(ModItems.CREATIVE_AMMO_BOX.get())) {
count++;
}
}
}
return count > 0;
if (player == null) return false;
return player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get()));
}
@SubscribeEvent(priority = EventPriority.NORMAL)
@ -150,7 +143,7 @@ public class AmmoBarOverlay {
poseStack.pushPose();
poseStack.scale(1.5f, 1.5f, 1f);
if ((stack.getItem() == ModItems.MINIGUN.get() || stack.getItem() == ModItems.BOCEK.get()) && creativeAmmo()) {
if ((stack.getItem() == ModItems.MINIGUN.get() || stack.getItem() == ModItems.BOCEK.get()) && hasCreativeAmmo()) {
event.getGuiGraphics().drawString(
Minecraft.getInstance().font,
"",
@ -238,7 +231,7 @@ public class AmmoBarOverlay {
return "";
}
if (!creativeAmmo()) {
if (!hasCreativeAmmo()) {
if (stack.is(ModTags.Items.LAUNCHER) || stack.getItem() == ModItems.TASER.get()) {
return "" + stack.getOrCreateTag().getInt("max_ammo");
}

View file

@ -1,4 +1,3 @@
package com.atsuishio.superbwarfare.client.overlay;
import net.minecraft.client.Minecraft;
@ -10,16 +9,16 @@ import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
@Mod.EventBusSubscriber({Dist.CLIENT})
@Mod.EventBusSubscriber(value = Dist.CLIENT)
public class ArmRendererFixOverlay {
@SubscribeEvent(priority = EventPriority.NORMAL)
public static void eventHandler(RenderGuiEvent.Pre event) {
int w = event.getWindow().getGuiScaledWidth();
int h = event.getWindow().getGuiScaledHeight();
Player entity = Minecraft.getInstance().player;
if (entity != null) {
InventoryScreen.renderEntityInInventoryFollowsAngle(event.getGuiGraphics(), w / 2 - 114514, h / 2 + 22, 1, 0f, 0, entity);
}
@SubscribeEvent(priority = EventPriority.NORMAL)
public static void eventHandler(RenderGuiEvent.Pre event) {
int w = event.getWindow().getGuiScaledWidth();
int h = event.getWindow().getGuiScaledHeight();
Player entity = Minecraft.getInstance().player;
if (entity != null) {
InventoryScreen.renderEntityInInventoryFollowsAngle(event.getGuiGraphics(), w / 2 - 114514, h / 2 + 22, 1, 0f, 0, entity);
}
}
}

View file

@ -74,6 +74,5 @@ public class ArmorPlateOverlay {
guiGraphics.blit(texture, 20, h - 12, 0, 0, (int) amount, 6, length, 6);
guiGraphics.pose().popPose();
}
}

View file

@ -29,7 +29,6 @@ import java.text.DecimalFormat;
@Mod.EventBusSubscriber(value = Dist.CLIENT)
public class CannonHudOverlay {
public static float indicatorPosH = 0;
@SubscribeEvent(priority = EventPriority.NORMAL)
public static void eventHandler(RenderGuiEvent.Pre event) {
@ -49,6 +48,7 @@ public class CannonHudOverlay {
RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
RenderSystem.setShaderColor(1, 1, 1, 1);
float indicatorPosH = 0;
if (cannon instanceof Mk42Entity) {
indicatorPosH = 1.3f;
}
@ -80,27 +80,26 @@ public class CannonHudOverlay {
if (ClientEventHandler.zoom) {
Entity lookingEntity = TraceTool.findLookingEntity(player, 512);
boolean lookAtEntity = false;
double block_range = player.position().distanceTo((Vec3.atLowerCornerOf(player.level().clip(
double blockRange = player.position().distanceTo((Vec3.atLowerCornerOf(player.level().clip(
new ClipContext(new Vec3(player.getX(), player.getEyeY() + 1, player.getZ()), new Vec3(player.getX(), player.getEyeY() + 1, player.getZ()).add(player.getLookAngle().scale(512)),
ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos())));
double entity_range = 0;
double entityRange = 0;
if (lookingEntity instanceof LivingEntity living) {
lookAtEntity = true;
entity_range = player.distanceTo(living);
entityRange = player.distanceTo(living);
}
if (lookAtEntity) {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
.append(Component.literal(new DecimalFormat("##.#").format(entity_range) + "M " + lookingEntity.getDisplayName().getString())),
.append(Component.literal(new DecimalFormat("##.#").format(entityRange) + "M " + lookingEntity.getDisplayName().getString())),
w / 2 + 14, h / 2 - 20, -1, false);
} else {
if (block_range > 511) {
if (blockRange > 511) {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
.append(Component.literal("---M")), w / 2 + 14, h / 2 - 20, -1, false);
} else {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
.append(Component.literal(new DecimalFormat("##.#").format(block_range) + "M")),
.append(Component.literal(new DecimalFormat("##.#").format(blockRange) + "M")),
w / 2 + 14, h / 2 - 20, -1, false);
}
}
@ -117,8 +116,6 @@ public class CannonHudOverlay {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.mortar.pitch")
.append(Component.literal(new DecimalFormat("##.#").format(-cannon.getXRot()) + "°")),
w / 2 + 14, h / 2 - 29, -1, false);
}
private static boolean shouldRenderCrossHair(Player player) {

View file

@ -33,6 +33,7 @@ import static com.atsuishio.superbwarfare.client.RenderHelper.preciseBlit;
@Mod.EventBusSubscriber(value = Dist.CLIENT)
public class CrossHairOverlay {
private static final ResourceLocation REX_HORIZONTAL = ModUtils.loc("textures/screens/rex_horizontal.png");
private static final ResourceLocation REX_VERTICAL = ModUtils.loc("textures/screens/rex_vertical.png");
@ -52,7 +53,8 @@ public class CrossHairOverlay {
return;
}
if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) return;
if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit)
return;
if (player.getVehicle() != null && player.getVehicle() instanceof ICannonEntity) return;
GuiGraphics guiGraphics = event.getGuiGraphics();
@ -131,7 +133,7 @@ public class CrossHairOverlay {
PoseStack poseStack = guiGraphics.pose();
poseStack.pushPose();
poseStack.rotateAround(Axis.ZP.rotationDegrees(-gunRot * Mth.RAD_TO_DEG),w / 2f + moveX, h / 2f + moveY, 0);
poseStack.rotateAround(Axis.ZP.rotationDegrees(-gunRot * Mth.RAD_TO_DEG), w / 2f + moveX, h / 2f + moveY, 0);
preciseBlit(guiGraphics, REX_HORIZONTAL, (float) (w / 2f - 13.5f - 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16);
preciseBlit(guiGraphics, REX_HORIZONTAL, (float) (w / 2f - 2.5f + 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16);
preciseBlit(guiGraphics, REX_VERTICAL, w / 2f - 7.5f + moveX, (float) (h / 2f - 2.5f + 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16);

View file

@ -37,103 +37,112 @@ import static com.atsuishio.superbwarfare.entity.DroneEntity.KAMIKAZE;
@Mod.EventBusSubscriber(value = Dist.CLIENT)
public class DroneUIOverlay {
public static int MAX_DISTANCE = 256;
private static final ResourceLocation FRAME = ModUtils.loc("textures/screens/javelin/frame.png");
@SubscribeEvent(priority = EventPriority.NORMAL)
public static void eventHandler(RenderGuiEvent.Pre event) {
int w = event.getWindow().getGuiScaledWidth();
int h = event.getWindow().getGuiScaledHeight();
Player player = Minecraft.getInstance().player;
if (player != null) {
ItemStack stack = player.getMainHandItem();
RenderSystem.disableDepthTest();
RenderSystem.depthMask(false);
RenderSystem.enableBlend();
RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
RenderSystem.setShaderColor(1, 1, 1, 1);
if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
event.getGuiGraphics().blit(ModUtils.loc("textures/screens/drone.png"), w / 2 - 16, h / 2 - 16, 0, 0, 32, 32, 32, 32);
event.getGuiGraphics().blit(ModUtils.loc("textures/screens/drone_fov.png"), w / 2 + 100, h / 2 - 64, 0, 0, 64, 129, 64, 129);
GuiGraphics guiGraphics = event.getGuiGraphics();
preciseBlit(guiGraphics, ModUtils.loc("textures/screens/drone_fov_move.png"), (float) w / 2 + 100, (float) (h / 2 - 64 - ((ClientEventHandler.droneFovLerp - 1) * 23.8)), 0, 0, 64, 129, 64, 129);
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.literal(new DecimalFormat("##.#").format(ClientEventHandler.droneFovLerp) + "x"),
w / 2 + 144, h / 2 + 56 - (int) ((ClientEventHandler.droneFovLerp - 1) * 23.8), -1, false);
Minecraft mc = Minecraft.getInstance();
Player player = mc.player;
DroneEntity entity = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone"));
if (player == null) return;
if (entity != null) {
boolean lookAtEntity = false;
double distance = player.distanceTo(entity);
double block_range = entity.position().distanceTo((Vec3.atLowerCornerOf(entity.level().clip(
new ClipContext(entity.getEyePosition(), entity.getEyePosition().add(entity.getViewVector(event.getPartialTick()).scale(520)),
ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, entity)).getBlockPos())));
GuiGraphics guiGraphics = event.getGuiGraphics();
PoseStack poseStack = guiGraphics.pose();
double entity_range = 0;
ItemStack stack = player.getMainHandItem();
Entity lookingEntity = SeekTool.seekLivingEntity(entity, entity.level(), 512, 2);
poseStack.pushPose();
if (lookingEntity != null) {
lookAtEntity = true;
entity_range = entity.distanceTo(lookingEntity);
}
RenderSystem.disableDepthTest();
RenderSystem.depthMask(false);
RenderSystem.enableBlend();
RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
RenderSystem.setShaderColor(1, 1, 1, 1);
int color = -1;
if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
guiGraphics.blit(ModUtils.loc("textures/screens/drone.png"), w / 2 - 16, h / 2 - 16, 0, 0, 32, 32, 32, 32);
guiGraphics.blit(ModUtils.loc("textures/screens/drone_fov.png"), w / 2 + 100, h / 2 - 64, 0, 0, 64, 129, 64, 129);
if (distance > MAX_DISTANCE - 48) {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.warning"),
w / 2 - 18, h / 2 - 47, -65536, false);
color = -65536;
}
preciseBlit(guiGraphics, ModUtils.loc("textures/screens/drone_fov_move.png"), (float) w / 2 + 100, (float) (h / 2 - 64 - ((ClientEventHandler.droneFovLerp - 1) * 23.8)), 0, 0, 64, 129, 64, 129);
guiGraphics.drawString(mc.font, Component.literal(new DecimalFormat("##.#").format(ClientEventHandler.droneFovLerp) + "x"),
w / 2 + 144, h / 2 + 56 - (int) ((ClientEventHandler.droneFovLerp - 1) * 23.8), -1, false);
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.distance")
.append(Component.literal(new DecimalFormat("##.#").format(distance) + "M")),
w / 2 + 10, h / 2 + 33, color, false);
DroneEntity entity = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone"));
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.health")
.append(Component.literal(new DecimalFormat("##.#").format(entity.getHealth()) + "/" + new DecimalFormat("##.#").format(entity.getMaxHealth()))),
w / 2 - 77, h / 2 + 33, -1, false);
if (!entity.getEntityData().get(KAMIKAZE)) {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.ammo")
.append(Component.literal(new DecimalFormat("##.#").format(entity.getEntityData().get(AMMO)) + " / 6")),
w / 2 + 12, h / 2 - 37, -1, false);
if (entity != null) {
boolean lookAtEntity = false;
double distance = player.distanceTo(entity);
double blockRange = entity.position().distanceTo((Vec3.atLowerCornerOf(entity.level().clip(
new ClipContext(entity.getEyePosition(), entity.getEyePosition().add(entity.getViewVector(event.getPartialTick()).scale(520)),
ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, entity)).getBlockPos())));
double entityRange = 0;
Entity lookingEntity = SeekTool.seekLivingEntity(entity, entity.level(), 512, 2);
if (lookingEntity != null) {
lookAtEntity = true;
entityRange = entity.distanceTo(lookingEntity);
}
int color = -1;
if (distance > MAX_DISTANCE - 48) {
guiGraphics.drawString(mc.font, Component.translatable("des.superbwarfare.drone.warning"),
w / 2 - 18, h / 2 - 47, -65536, false);
color = -65536;
}
guiGraphics.drawString(mc.font, Component.translatable("des.superbwarfare.drone.distance")
.append(Component.literal(new DecimalFormat("##.#").format(distance) + "M")),
w / 2 + 10, h / 2 + 33, color, false);
guiGraphics.drawString(mc.font, Component.translatable("des.superbwarfare.drone.health")
.append(Component.literal(new DecimalFormat("##.#").format(entity.getHealth()) + "/" + new DecimalFormat("##.#").format(entity.getMaxHealth()))),
w / 2 - 77, h / 2 + 33, -1, false);
if (!entity.getEntityData().get(KAMIKAZE)) {
guiGraphics.drawString(mc.font, Component.translatable("des.superbwarfare.drone.ammo")
.append(Component.literal(new DecimalFormat("##.#").format(entity.getEntityData().get(AMMO)) + " / 6")),
w / 2 + 12, h / 2 - 37, -1, false);
} else {
guiGraphics.drawString(mc.font, Component.translatable("des.superbwarfare.drone.kamikaze"),
w / 2 + 12, h / 2 - 37, -65536, false);
}
if (lookAtEntity) {
guiGraphics.drawString(mc.font, Component.translatable("des.superbwarfare.drone.range")
.append(Component.literal(new DecimalFormat("##.#").format(entityRange) + "M " + lookingEntity.getDisplayName().getString())),
w / 2 + 12, h / 2 - 28, color, false);
} else {
if (blockRange > 512) {
guiGraphics.drawString(mc.font, Component.translatable("des.superbwarfare.drone.range")
.append(Component.literal("---M")), w / 2 + 12, h / 2 - 28, color, false);
} else {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.kamikaze"),
w / 2 + 12, h / 2 - 37, -65536, false);
}
if (lookAtEntity) {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
.append(Component.literal(new DecimalFormat("##.#").format(entity_range) + "M " + lookingEntity.getDisplayName().getString())),
guiGraphics.drawString(mc.font, Component.translatable("des.superbwarfare.drone.range")
.append(Component.literal(new DecimalFormat("##.#").format(blockRange) + "M")),
w / 2 + 12, h / 2 - 28, color, false);
} else {
if (block_range > 512) {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
.append(Component.literal("---M")), w / 2 + 12, h / 2 - 28, color, false);
} else {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
.append(Component.literal(new DecimalFormat("##.#").format(block_range) + "M")),
w / 2 + 12, h / 2 - 28, color, false);
}
}
Minecraft mc = Minecraft.getInstance();
Camera camera = mc.gameRenderer.getMainCamera();
Vec3 cameraPos = camera.getPosition();
PoseStack poseStack = event.getGuiGraphics().pose();
}
List<Entity> entities = SeekTool.seekLivingEntities(entity, entity.level(), 256, 30);
float fovAdjust2 = (float) (Minecraft.getInstance().options.fov().get() / 30) - 1;
double zoom = 0.975 * ClientEventHandler.droneFovLerp + 0.06 * fovAdjust2;
Camera camera = mc.gameRenderer.getMainCamera();
Vec3 cameraPos = camera.getPosition();
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));
List<Entity> 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;
var cPos = cameraPos.add(lookAngle);
Vec3 p = RenderHelper.worldToScreen(pos, cPos);
if (p == null) return;
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));
var cPos = cameraPos.add(lookAngle);
Vec3 p = RenderHelper.worldToScreen(pos, cPos);
if (p != null) {
poseStack.pushPose();
int x = (int) p.x;
int y = (int) p.y;
@ -143,12 +152,14 @@ public class DroneUIOverlay {
}
}
}
RenderSystem.depthMask(true);
RenderSystem.defaultBlendFunc();
RenderSystem.enableDepthTest();
RenderSystem.disableBlend();
RenderSystem.setShaderColor(1, 1, 1, 1);
}
RenderSystem.depthMask(true);
RenderSystem.defaultBlendFunc();
RenderSystem.enableDepthTest();
RenderSystem.disableBlend();
RenderSystem.setShaderColor(1, 1, 1, 1);
poseStack.popPose();
}
}

View file

@ -15,6 +15,7 @@ import com.mojang.math.Axis;
import net.minecraft.client.Camera;
import net.minecraft.client.CameraType;
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.util.Mth;
@ -44,105 +45,105 @@ public class HelicopterHudOverlay {
public static void eventHandler(RenderGuiEvent.Pre event) {
int w = event.getWindow().getGuiScaledWidth();
int h = event.getWindow().getGuiScaledHeight();
Player player = Minecraft.getInstance().player;
Minecraft mc = Minecraft.getInstance();
Player player = mc.player;
Camera camera = mc.gameRenderer.getMainCamera();
Vec3 cameraPos = camera.getPosition();
PoseStack poseStack = event.getGuiGraphics().pose();
GuiGraphics guiGraphics = event.getGuiGraphics();
PoseStack poseStack = guiGraphics.pose();
if (player != null) {
if (player == null) return;
if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit)
return;
if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit)
return;
if (player.getVehicle() instanceof IHelicopterEntity iHelicopterEntity && player.getVehicle() instanceof MobileVehicleEntity mobileVehicle && iHelicopterEntity.isDriver(player) && Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON) {
RenderSystem.disableDepthTest();
RenderSystem.depthMask(false);
RenderSystem.enableBlend();
RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
RenderSystem.setShaderColor(1, 1, 1, 1);
scopeScale = Mth.lerp(event.getPartialTick(), scopeScale, 1F);
float f = (float) Math.min(w, h);
float f1 = Math.min((float) w / f, (float) h / f) * scopeScale;
float i = Mth.floor(f * f1);
float j = Mth.floor(f * f1);
float k = ((w - i) / 2);
float l = ((h - j) / 2);
preciseBlit(event.getGuiGraphics(), ModUtils.loc("textures/screens/helicopter/heli_base.png"), k, l, 0, 0.0F, i, j, i, j);
if (player.getVehicle() instanceof IHelicopterEntity iHelicopterEntity && player.getVehicle() instanceof MobileVehicleEntity mobileVehicle && iHelicopterEntity.isDriver(player) && Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON) {
poseStack.pushPose();
RenderSystem.disableDepthTest();
RenderSystem.depthMask(false);
RenderSystem.enableBlend();
RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
RenderSystem.setShaderColor(1, 1, 1, 1);
scopeScale = Mth.lerp(event.getPartialTick(), scopeScale, 1F);
float f = (float) Math.min(w, h);
float f1 = Math.min((float) w / f, (float) h / f) * scopeScale;
float i = Mth.floor(f * f1);
float j = Mth.floor(f * f1);
float k = ((w - i) / 2);
float l = ((h - j) / 2);
preciseBlit(guiGraphics, ModUtils.loc("textures/screens/helicopter/heli_base.png"), k, l, 0, 0.0F, i, j, i, j);
poseStack.pushPose();
poseStack.rotateAround(Axis.ZP.rotationDegrees(-iHelicopterEntity.getRotZ(event.getPartialTick())), w / 2f, h / 2f, 0);
float pitch = iHelicopterEntity.getRotX(event.getPartialTick());
preciseBlit(guiGraphics, ModUtils.loc("textures/screens/helicopter/heli_line.png"), (float) w / 2 - 128, (float) h / 2 - 512 - 5.475f * pitch, 0, 0, 256, 1024, 256, 1024);
poseStack.popPose();
poseStack.pushPose();
poseStack.rotateAround(Axis.ZP.rotationDegrees(-iHelicopterEntity.getRotZ(event.getPartialTick())), w / 2f, h / 2f - 56, 0);
preciseBlit(guiGraphics, ModUtils.loc("textures/screens/helicopter/roll_ind.png"), (float) w / 2 - 8, (float) h / 2 - 88, 0, 0, 16, 16, 16, 16);
poseStack.popPose();
guiGraphics.blit(ModUtils.loc("textures/screens/helicopter/heli_power_ruler.png"), w / 2 + 100, h / 2 - 64, 0, 0, 64, 128, 64, 128);
double height = mobileVehicle.position().distanceTo((Vec3.atLowerCornerOf(mobileVehicle.level().clip(new ClipContext(mobileVehicle.position(), mobileVehicle.position().add(new Vec3(0, -1, 0).scale(100)),
ClipContext.Block.OUTLINE, ClipContext.Fluid.ANY, mobileVehicle)).getBlockPos())));
double blockInWay = mobileVehicle.position().distanceTo((Vec3.atLowerCornerOf(mobileVehicle.level().clip(new ClipContext(mobileVehicle.position(), mobileVehicle.position().add(new Vec3(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z).normalize().scale(100)),
ClipContext.Block.OUTLINE, ClipContext.Fluid.ANY, mobileVehicle)).getBlockPos())));
float power = iHelicopterEntity.getPower();
lerpPower = Mth.lerp(0.001f * event.getPartialTick(), lerpPower, power);
preciseBlit(guiGraphics, ModUtils.loc("textures/screens/helicopter/heli_power.png"), (float) w / 2 + 130f, ((float) h / 2 - 64 + 124 - power * 980), 0, 0, 4, power * 980, 4, power * 980);
lerpVy = (float) Mth.lerp(0.021f * event.getPartialTick(), lerpVy, mobileVehicle.getDeltaMovement().y() + 0.06f);
preciseBlit(guiGraphics, ModUtils.loc("textures/screens/helicopter/heli_vy_move.png"), (float) w / 2 + 138, ((float) h / 2 - 3 - Math.max(lerpVy * 20, -24) * 2.5f), 0, 0, 8, 8, 8, 8);
guiGraphics.drawString(Minecraft.getInstance().font, Component.literal(new DecimalFormat("##").format(lerpVy * 20) + "m/s"),
w / 2 + 146, (int) (h / 2 - 3 - Math.max(lerpVy * 20, -24) * 2.5), (((lerpVy < -20 || lerpVy * 20 < -5 || (lerpVy * 20 < -1 && length(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z) * 72 > 100)) && height < 36) || (length(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z) * 72 > 40 && blockInWay < 72) ? -65536 : 0x66FF00), false);
guiGraphics.drawString(Minecraft.getInstance().font, Component.literal(new DecimalFormat("##").format(mobileVehicle.getY())),
w / 2 + 104, h / 2, 0x66FF00, false);
preciseBlit(guiGraphics, ModUtils.loc("textures/screens/helicopter/speed_frame.png"), (float) w / 2 - 144, (float) h / 2 - 6, 0, 0, 50, 18, 50, 18);
guiGraphics.drawString(Minecraft.getInstance().font, Component.literal(new DecimalFormat("##").format(length(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z) * 72) + "KM/H"),
w / 2 - 140, h / 2, 0x66FF00, false);
if (((lerpVy * 20 < -5 || (lerpVy * 20 < -1 && length(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z) * 72 > 100)) && height < 36)
|| (length(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z) * 72 > 40 && blockInWay < 72)) {
guiGraphics.drawString(Minecraft.getInstance().font, Component.literal("TERRAIN TERRAIN"),
w / 2 - 42, h / 2 + 24, -65536, false);
} else if (lerpVy * 20 < -20) {
guiGraphics.drawString(Minecraft.getInstance().font, Component.literal("SINK RATEPULL UP!"),
w / 2 - 53, h / 2 + 24, -65536, false);
}
Matrix4f transform = getVehicleTransform(mobileVehicle);
float x0 = 0f;
float y0 = 0.65f;
float z0 = 0.8f;
Vector4f worldPosition = transformPosition(transform, x0, y0, z0);
float fovAdjust2 = (float) (Minecraft.getInstance().options.fov().get() / 30) - 1;
double zoom = 0.96 * 3 + 0.06 * fovAdjust2;
Vec3 pos = new Vec3(worldPosition.x, worldPosition.y, worldPosition.z).add(mobileVehicle.getViewVector(event.getPartialTick()).scale(500));
Vec3 lookAngle = player.getLookAngle().normalize().scale(pos.distanceTo(cameraPos) * (1 - 1.0 / zoom));
var cPos = cameraPos.add(lookAngle);
Vec3 p = RenderHelper.worldToScreen(new Vec3(worldPosition.x, worldPosition.y, worldPosition.z).add(mobileVehicle.getViewVector(event.getPartialTick()).scale(500)), ClientEventHandler.zoom ? cPos : cameraPos);
if (p != null) {
poseStack.pushPose();
poseStack.rotateAround(Axis.ZP.rotationDegrees(-iHelicopterEntity.getRotZ(event.getPartialTick())),w / 2f, h / 2f, 0);
float pitch = iHelicopterEntity.getRotX(event.getPartialTick());
// player.displayClientMessage(Component.literal("Angle:" + new java.text.DecimalFormat("##").format(pitch)), true);
preciseBlit(event.getGuiGraphics(), ModUtils.loc("textures/screens/helicopter/heli_line.png"), (float) w / 2 - 128, (float) h / 2 - 512 - 5.475f * pitch, 0, 0, 256, 1024, 256, 1024);
poseStack.popPose();
poseStack.pushPose();
poseStack.rotateAround(Axis.ZP.rotationDegrees(-iHelicopterEntity.getRotZ(event.getPartialTick())),w / 2f, h / 2f - 56, 0);
preciseBlit(event.getGuiGraphics(), ModUtils.loc("textures/screens/helicopter/roll_ind.png"), (float) w / 2 - 8, (float) h / 2 - 88, 0, 0, 16, 16, 16, 16);
poseStack.popPose();
event.getGuiGraphics().blit(ModUtils.loc("textures/screens/helicopter/heli_power_ruler.png"), w / 2 + 100, h / 2 - 64, 0, 0, 64, 128, 64, 128);
double height = mobileVehicle.position().distanceTo((Vec3.atLowerCornerOf(mobileVehicle.level().clip(new ClipContext(mobileVehicle.position(), mobileVehicle.position().add(new Vec3(0, -1, 0).scale(100)),
ClipContext.Block.OUTLINE, ClipContext.Fluid.ANY, mobileVehicle)).getBlockPos())));
double blockInWay = mobileVehicle.position().distanceTo((Vec3.atLowerCornerOf(mobileVehicle.level().clip(new ClipContext(mobileVehicle.position(), mobileVehicle.position().add(new Vec3(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z).normalize().scale(100)),
ClipContext.Block.OUTLINE, ClipContext.Fluid.ANY, mobileVehicle)).getBlockPos())));
float power = iHelicopterEntity.getPower();
lerpPower = Mth.lerp(0.001f * event.getPartialTick(), lerpPower, power);
preciseBlit(event.getGuiGraphics(), ModUtils.loc("textures/screens/helicopter/heli_power.png"), (float) w / 2 + 130f, ((float) h / 2 - 64 + 124 - power * 980), 0, 0, 4, power * 980, 4, power * 980);
lerpVy = (float) Mth.lerp(0.021f * event.getPartialTick(), lerpVy, mobileVehicle.getDeltaMovement().y() + 0.06f);
preciseBlit(event.getGuiGraphics(), ModUtils.loc("textures/screens/helicopter/heli_vy_move.png"), (float) w / 2 + 138, ((float) h / 2 - 3 - Math.max(lerpVy * 20, -24) * 2.5f), 0, 0, 8, 8, 8, 8);
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.literal(new DecimalFormat("##").format(lerpVy * 20) + "m/s"),
w / 2 + 146, (int)(h / 2 - 3 - Math.max(lerpVy * 20, -24) * 2.5), (((lerpVy < -20 || lerpVy * 20 < -5 || (lerpVy * 20 < -1 && length(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z) * 72 > 100)) && height < 36) || (length(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z) * 72 > 40 && blockInWay < 72) ? -65536 : 0x66FF00), false);
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.literal(new DecimalFormat("##").format(mobileVehicle.getY())),
w / 2 + 104, h / 2, 0x66FF00, false);
preciseBlit(event.getGuiGraphics(), ModUtils.loc("textures/screens/helicopter/speed_frame.png"), (float) w / 2 - 144, (float) h / 2 - 6, 0, 0, 50, 18, 50, 18);
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.literal(new DecimalFormat("##").format(length(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z) * 72) + "KM/H"),
w / 2 - 140, h / 2, 0x66FF00, false);
if (((lerpVy * 20 < -5 || (lerpVy * 20 < -1 && length(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z) * 72 > 100)) && height < 36)
||(length(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z) * 72 > 40 && blockInWay < 72)) {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.literal( "TERRAIN TERRAIN"),
w / 2 - 42, h / 2 + 24, -65536, false);
} else if (lerpVy * 20 < -20) {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.literal( "SINK RATEPULL UP!"),
w / 2 - 53, h / 2 + 24, -65536, false);
}
Matrix4f transform = getVehicleTransform(mobileVehicle);
float x0 = 0f;
float y0 = 0.65f;
float z0 = 0.8f;
Vector4f worldPosition = transformPosition(transform, x0, y0, z0);
float fovAdjust2 = (float) (Minecraft.getInstance().options.fov().get() / 30) - 1;
double zoom = 0.96 * 3 + 0.06 * fovAdjust2;
Vec3 pos = new Vec3(worldPosition.x, worldPosition.y, worldPosition.z).add(mobileVehicle.getViewVector(event.getPartialTick()).scale(500));
Vec3 lookAngle = player.getLookAngle().normalize().scale(pos.distanceTo(cameraPos) * (1 - 1.0 / zoom));
var cPos = cameraPos.add(lookAngle);
Vec3 p = RenderHelper.worldToScreen(new Vec3(worldPosition.x, worldPosition.y, worldPosition.z).add(mobileVehicle.getViewVector(event.getPartialTick()).scale(500)),ClientEventHandler.zoom ? cPos : cameraPos);
if (p == null) return;
poseStack.pushPose();
int x = (int) p.x;
int y = (int) p.y;
HudUtil.blit(poseStack, ModUtils.loc("textures/screens/helicopter/crosshair_ind.png"), x-8, y-8, 0, 0, 16, 16, 16, 16, 0x66FF00);
HudUtil.blit(poseStack, ModUtils.loc("textures/screens/helicopter/crosshair_ind.png"), x - 8, y - 8, 0, 0, 16, 16, 16, 16, 0x66FF00);
poseStack.popPose();
} else {
scopeScale = 0.7f;
}
poseStack.popPose();
} else {
scopeScale = 0.7f;
}
}
@ -159,7 +160,7 @@ public class HelicopterHudOverlay {
return transform.transform(new Vector4f(x, y, z, 1));
}
public static double length(double x, double y,double z) {
public static double length(double x, double y, double z) {
return Math.sqrt(x * x + y * y + z * z);
}
}

View file

@ -31,6 +31,7 @@ import static com.atsuishio.superbwarfare.client.RenderHelper.preciseBlit;
@Mod.EventBusSubscriber(value = Dist.CLIENT)
public class KillMessageOverlay {
private static final ResourceLocation HEADSHOT = ModUtils.loc("textures/screens/damage_types/headshot.png");
private static final ResourceLocation KNIFE = ModUtils.loc("textures/screens/damage_types/knife.png");

View file

@ -22,48 +22,41 @@ import net.minecraftforge.fml.common.Mod;
@Mod.EventBusSubscriber(value = Dist.CLIENT)
public class RedTriangleOverlay {
private static final ResourceLocation TRIANGLE = ModUtils.loc("textures/screens/red_triangle.png");
@SubscribeEvent(priority = EventPriority.NORMAL)
public static void eventHandler(RenderGuiEvent.Pre event) {
int w = event.getWindow().getGuiScaledWidth();
int h = event.getWindow().getGuiScaledHeight();
Minecraft mc = Minecraft.getInstance();
Camera camera = mc.gameRenderer.getMainCamera();
Vec3 cameraPos = camera.getPosition();
PoseStack poseStack = event.getGuiGraphics().pose();
Player player = Minecraft.getInstance().player;
Player player = mc.player;
if (player == null) return;
ItemStack stack = player.getMainHandItem();
if (!stack.is(ModItems.RPG.get())) return;
if (stack.is(ModItems.RPG.get())) {
Entity idf = SeekTool.seekLivingEntity(player, player.level(),128,6);
Entity idf = SeekTool.seekLivingEntity(player, player.level(), 128, 6);
if (idf == null) return;
double distance = idf.position().distanceTo(cameraPos);
if (idf == null) return;
Vec3 p = RenderHelper.worldToScreen(new Vec3(idf.getX(), idf.getEyeY() + 0.5 + 0.07 * distance, idf.getZ()), cameraPos);
if (p == null) return;
double distance = idf.position().distanceTo(cameraPos);
poseStack.pushPose();
int x = (int) p.x;
int y = (int) p.y;
Vec3 p = RenderHelper.worldToScreen(new Vec3(idf.getX(), idf.getEyeY() + 0.5 + 0.07 * distance, idf.getZ()), cameraPos);
if (p == null) return;
poseStack.pushPose();
int x = (int) p.x;
int y = (int) p.y;
HudUtil.blit(poseStack, TRIANGLE, x-4, y-4, 0, 0, 8, 8, 8, 8, -65536);
poseStack.popPose();
}
HudUtil.blit(poseStack, TRIANGLE, x - 4, y - 4, 0, 0, 8, 8, 8, 8, -65536);
RenderSystem.depthMask(true);
RenderSystem.defaultBlendFunc();
RenderSystem.enableDepthTest();
RenderSystem.disableBlend();
RenderSystem.setShaderColor(1, 1, 1, 1);
poseStack.popPose();
}
}

View file

@ -26,30 +26,29 @@ public class SpyglassRangeOverlay {
Player player = Minecraft.getInstance().player;
if (player != null && (player.getMainHandItem().getItem() == Items.SPYGLASS || player.getOffhandItem().getItem() == Items.SPYGLASS) && player.isUsingItem()) {
boolean lookAtEntity = false;
double block_range = player.position().distanceTo((Vec3.atLowerCornerOf(player.level().clip(
double blockRange = player.position().distanceTo((Vec3.atLowerCornerOf(player.level().clip(
new ClipContext(player.getEyePosition(), player.getEyePosition().add(player.getLookAngle().scale(520)),
ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos())));
double entity_range = 0;
double entityRange = 0;
Entity lookingEntity = TraceTool.findLookingEntity(player, 520);
if (lookingEntity != null) {
lookAtEntity = true;
entity_range = player.distanceTo(lookingEntity);
entityRange = player.distanceTo(lookingEntity);
}
if (lookAtEntity) {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
.append(Component.literal(new DecimalFormat("##.#").format(entity_range) + "M " + lookingEntity.getDisplayName().getString())),
.append(Component.literal(new DecimalFormat("##.#").format(entityRange) + "M " + lookingEntity.getDisplayName().getString())),
w / 2 + 12, h / 2 - 28, -1, false);
} else {
if (block_range > 512) {
if (blockRange > 512) {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
.append(Component.literal("---M")), w / 2 + 12, h / 2 - 28, -1, false);
} else {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
.append(Component.literal(new DecimalFormat("##.#").format(block_range) + "M")),
.append(Component.literal(new DecimalFormat("##.#").format(blockRange) + "M")),
w / 2 + 12, h / 2 - 28, -1, false);
}
}

View file

@ -1,6 +1,7 @@
package com.atsuishio.superbwarfare.client.overlay;
import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.config.client.DisplayConfig;
import com.atsuishio.superbwarfare.entity.*;
import com.atsuishio.superbwarfare.init.ModItems;
import com.mojang.blaze3d.platform.GlStateManager;
@ -136,6 +137,7 @@ public class VehicleHudOverlay {
ItemStack stack = player.getItemBySlot(EquipmentSlot.CHEST);
if (stack == ItemStack.EMPTY) return 0;
if (stack.getTag() == null || !stack.getTag().contains("ArmorPlate")) return 0;
if (!DisplayConfig.ARMOR_PLATE_HUD.get()) return 0;
return 9;
}
}