优化各种HUD
This commit is contained in:
parent
27893f03ab
commit
2e7e789bc0
11 changed files with 229 additions and 232 deletions
|
@ -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 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 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;
|
Player player = Minecraft.getInstance().player;
|
||||||
int count = 0;
|
if (player == null) return false;
|
||||||
if (player != null) {
|
return player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get()));
|
||||||
for (var inv : player.getInventory().items) {
|
|
||||||
if (inv.is(ModItems.CREATIVE_AMMO_BOX.get())) {
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return count > 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent(priority = EventPriority.NORMAL)
|
@SubscribeEvent(priority = EventPriority.NORMAL)
|
||||||
|
@ -150,7 +143,7 @@ public class AmmoBarOverlay {
|
||||||
poseStack.pushPose();
|
poseStack.pushPose();
|
||||||
poseStack.scale(1.5f, 1.5f, 1f);
|
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(
|
event.getGuiGraphics().drawString(
|
||||||
Minecraft.getInstance().font,
|
Minecraft.getInstance().font,
|
||||||
"∞",
|
"∞",
|
||||||
|
@ -238,7 +231,7 @@ public class AmmoBarOverlay {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!creativeAmmo()) {
|
if (!hasCreativeAmmo()) {
|
||||||
if (stack.is(ModTags.Items.LAUNCHER) || stack.getItem() == ModItems.TASER.get()) {
|
if (stack.is(ModTags.Items.LAUNCHER) || stack.getItem() == ModItems.TASER.get()) {
|
||||||
return "" + stack.getOrCreateTag().getInt("max_ammo");
|
return "" + stack.getOrCreateTag().getInt("max_ammo");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package com.atsuishio.superbwarfare.client.overlay;
|
package com.atsuishio.superbwarfare.client.overlay;
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
@ -10,16 +9,16 @@ import net.minecraftforge.eventbus.api.EventPriority;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
|
||||||
|
@Mod.EventBusSubscriber(value = Dist.CLIENT)
|
||||||
@Mod.EventBusSubscriber({Dist.CLIENT})
|
|
||||||
public class ArmRendererFixOverlay {
|
public class ArmRendererFixOverlay {
|
||||||
@SubscribeEvent(priority = EventPriority.NORMAL)
|
|
||||||
public static void eventHandler(RenderGuiEvent.Pre event) {
|
@SubscribeEvent(priority = EventPriority.NORMAL)
|
||||||
int w = event.getWindow().getGuiScaledWidth();
|
public static void eventHandler(RenderGuiEvent.Pre event) {
|
||||||
int h = event.getWindow().getGuiScaledHeight();
|
int w = event.getWindow().getGuiScaledWidth();
|
||||||
Player entity = Minecraft.getInstance().player;
|
int h = event.getWindow().getGuiScaledHeight();
|
||||||
if (entity != null) {
|
Player entity = Minecraft.getInstance().player;
|
||||||
InventoryScreen.renderEntityInInventoryFollowsAngle(event.getGuiGraphics(), w / 2 - 114514, h / 2 + 22, 1, 0f, 0, entity);
|
if (entity != null) {
|
||||||
}
|
InventoryScreen.renderEntityInInventoryFollowsAngle(event.getGuiGraphics(), w / 2 - 114514, h / 2 + 22, 1, 0f, 0, entity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,6 +74,5 @@ public class ArmorPlateOverlay {
|
||||||
guiGraphics.blit(texture, 20, h - 12, 0, 0, (int) amount, 6, length, 6);
|
guiGraphics.blit(texture, 20, h - 12, 0, 0, (int) amount, 6, length, 6);
|
||||||
|
|
||||||
guiGraphics.pose().popPose();
|
guiGraphics.pose().popPose();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,6 @@ import java.text.DecimalFormat;
|
||||||
|
|
||||||
@Mod.EventBusSubscriber(value = Dist.CLIENT)
|
@Mod.EventBusSubscriber(value = Dist.CLIENT)
|
||||||
public class CannonHudOverlay {
|
public class CannonHudOverlay {
|
||||||
public static float indicatorPosH = 0;
|
|
||||||
|
|
||||||
@SubscribeEvent(priority = EventPriority.NORMAL)
|
@SubscribeEvent(priority = EventPriority.NORMAL)
|
||||||
public static void eventHandler(RenderGuiEvent.Pre event) {
|
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.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
|
||||||
RenderSystem.setShaderColor(1, 1, 1, 1);
|
RenderSystem.setShaderColor(1, 1, 1, 1);
|
||||||
|
|
||||||
|
float indicatorPosH = 0;
|
||||||
if (cannon instanceof Mk42Entity) {
|
if (cannon instanceof Mk42Entity) {
|
||||||
indicatorPosH = 1.3f;
|
indicatorPosH = 1.3f;
|
||||||
}
|
}
|
||||||
|
@ -80,27 +80,26 @@ public class CannonHudOverlay {
|
||||||
if (ClientEventHandler.zoom) {
|
if (ClientEventHandler.zoom) {
|
||||||
Entity lookingEntity = TraceTool.findLookingEntity(player, 512);
|
Entity lookingEntity = TraceTool.findLookingEntity(player, 512);
|
||||||
boolean lookAtEntity = false;
|
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)),
|
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())));
|
ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos())));
|
||||||
|
|
||||||
double entity_range = 0;
|
double entityRange = 0;
|
||||||
|
|
||||||
if (lookingEntity instanceof LivingEntity living) {
|
if (lookingEntity instanceof LivingEntity living) {
|
||||||
lookAtEntity = true;
|
lookAtEntity = true;
|
||||||
entity_range = player.distanceTo(living);
|
entityRange = player.distanceTo(living);
|
||||||
}
|
}
|
||||||
if (lookAtEntity) {
|
if (lookAtEntity) {
|
||||||
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
|
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);
|
w / 2 + 14, h / 2 - 20, -1, false);
|
||||||
} else {
|
} else {
|
||||||
if (block_range > 511) {
|
if (blockRange > 511) {
|
||||||
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
|
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
|
||||||
.append(Component.literal("---M")), w / 2 + 14, h / 2 - 20, -1, false);
|
.append(Component.literal("---M")), w / 2 + 14, h / 2 - 20, -1, false);
|
||||||
} else {
|
} else {
|
||||||
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
|
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);
|
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")
|
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.mortar.pitch")
|
||||||
.append(Component.literal(new DecimalFormat("##.#").format(-cannon.getXRot()) + "°")),
|
.append(Component.literal(new DecimalFormat("##.#").format(-cannon.getXRot()) + "°")),
|
||||||
w / 2 + 14, h / 2 - 29, -1, false);
|
w / 2 + 14, h / 2 - 29, -1, false);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean shouldRenderCrossHair(Player player) {
|
private static boolean shouldRenderCrossHair(Player player) {
|
||||||
|
|
|
@ -33,6 +33,7 @@ import static com.atsuishio.superbwarfare.client.RenderHelper.preciseBlit;
|
||||||
|
|
||||||
@Mod.EventBusSubscriber(value = Dist.CLIENT)
|
@Mod.EventBusSubscriber(value = Dist.CLIENT)
|
||||||
public class CrossHairOverlay {
|
public class CrossHairOverlay {
|
||||||
|
|
||||||
private static final ResourceLocation REX_HORIZONTAL = ModUtils.loc("textures/screens/rex_horizontal.png");
|
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");
|
private static final ResourceLocation REX_VERTICAL = ModUtils.loc("textures/screens/rex_vertical.png");
|
||||||
|
|
||||||
|
@ -52,7 +53,8 @@ public class CrossHairOverlay {
|
||||||
return;
|
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;
|
if (player.getVehicle() != null && player.getVehicle() instanceof ICannonEntity) return;
|
||||||
|
|
||||||
GuiGraphics guiGraphics = event.getGuiGraphics();
|
GuiGraphics guiGraphics = event.getGuiGraphics();
|
||||||
|
@ -131,7 +133,7 @@ public class CrossHairOverlay {
|
||||||
PoseStack poseStack = guiGraphics.pose();
|
PoseStack poseStack = guiGraphics.pose();
|
||||||
|
|
||||||
poseStack.pushPose();
|
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 - 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_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);
|
preciseBlit(guiGraphics, REX_VERTICAL, w / 2f - 7.5f + moveX, (float) (h / 2f - 2.5f + 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16);
|
||||||
|
|
|
@ -37,103 +37,112 @@ import static com.atsuishio.superbwarfare.entity.DroneEntity.KAMIKAZE;
|
||||||
|
|
||||||
@Mod.EventBusSubscriber(value = Dist.CLIENT)
|
@Mod.EventBusSubscriber(value = Dist.CLIENT)
|
||||||
public class DroneUIOverlay {
|
public class DroneUIOverlay {
|
||||||
|
|
||||||
public static int MAX_DISTANCE = 256;
|
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/javelin/frame.png");
|
||||||
|
|
||||||
@SubscribeEvent(priority = EventPriority.NORMAL)
|
@SubscribeEvent(priority = EventPriority.NORMAL)
|
||||||
public static void eventHandler(RenderGuiEvent.Pre event) {
|
public static void eventHandler(RenderGuiEvent.Pre event) {
|
||||||
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;
|
|
||||||
|
|
||||||
if (player != null) {
|
Minecraft mc = Minecraft.getInstance();
|
||||||
ItemStack stack = player.getMainHandItem();
|
Player player = mc.player;
|
||||||
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);
|
|
||||||
|
|
||||||
DroneEntity entity = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone"));
|
if (player == null) return;
|
||||||
|
|
||||||
if (entity != null) {
|
GuiGraphics guiGraphics = event.getGuiGraphics();
|
||||||
boolean lookAtEntity = false;
|
PoseStack poseStack = guiGraphics.pose();
|
||||||
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())));
|
|
||||||
|
|
||||||
double entity_range = 0;
|
ItemStack stack = player.getMainHandItem();
|
||||||
|
|
||||||
Entity lookingEntity = SeekTool.seekLivingEntity(entity, entity.level(), 512, 2);
|
poseStack.pushPose();
|
||||||
|
|
||||||
if (lookingEntity != null) {
|
RenderSystem.disableDepthTest();
|
||||||
lookAtEntity = true;
|
RenderSystem.depthMask(false);
|
||||||
entity_range = entity.distanceTo(lookingEntity);
|
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) {
|
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.translatable("des.superbwarfare.drone.warning"),
|
guiGraphics.drawString(mc.font, Component.literal(new DecimalFormat("##.#").format(ClientEventHandler.droneFovLerp) + "x"),
|
||||||
w / 2 - 18, h / 2 - 47, -65536, false);
|
w / 2 + 144, h / 2 + 56 - (int) ((ClientEventHandler.droneFovLerp - 1) * 23.8), -1, false);
|
||||||
color = -65536;
|
|
||||||
}
|
|
||||||
|
|
||||||
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.distance")
|
DroneEntity entity = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone"));
|
||||||
.append(Component.literal(new DecimalFormat("##.#").format(distance) + "M")),
|
|
||||||
w / 2 + 10, h / 2 + 33, color, false);
|
|
||||||
|
|
||||||
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.health")
|
if (entity != null) {
|
||||||
.append(Component.literal(new DecimalFormat("##.#").format(entity.getHealth()) + "/" + new DecimalFormat("##.#").format(entity.getMaxHealth()))),
|
boolean lookAtEntity = false;
|
||||||
w / 2 - 77, h / 2 + 33, -1, false);
|
double distance = player.distanceTo(entity);
|
||||||
if (!entity.getEntityData().get(KAMIKAZE)) {
|
double blockRange = entity.position().distanceTo((Vec3.atLowerCornerOf(entity.level().clip(
|
||||||
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.ammo")
|
new ClipContext(entity.getEyePosition(), entity.getEyePosition().add(entity.getViewVector(event.getPartialTick()).scale(520)),
|
||||||
.append(Component.literal(new DecimalFormat("##.#").format(entity.getEntityData().get(AMMO)) + " / 6")),
|
ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, entity)).getBlockPos())));
|
||||||
w / 2 + 12, h / 2 - 37, -1, false);
|
|
||||||
|
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 {
|
} else {
|
||||||
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.kamikaze"),
|
guiGraphics.drawString(mc.font, Component.translatable("des.superbwarfare.drone.range")
|
||||||
w / 2 + 12, h / 2 - 37, -65536, false);
|
.append(Component.literal(new DecimalFormat("##.#").format(blockRange) + "M")),
|
||||||
}
|
|
||||||
|
|
||||||
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())),
|
|
||||||
w / 2 + 12, h / 2 - 28, color, false);
|
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);
|
Camera camera = mc.gameRenderer.getMainCamera();
|
||||||
float fovAdjust2 = (float) (Minecraft.getInstance().options.fov().get() / 30) - 1;
|
Vec3 cameraPos = camera.getPosition();
|
||||||
double zoom = 0.975 * ClientEventHandler.droneFovLerp + 0.06 * fovAdjust2;
|
|
||||||
|
|
||||||
for (var e : entities) {
|
List<Entity> entities = SeekTool.seekLivingEntities(entity, entity.level(), 256, 30);
|
||||||
Vec3 pos = new Vec3(e.getX(), e.getEyeY(), e.getZ());
|
float fovAdjust2 = (float) (mc.options.fov().get() / 30) - 1;
|
||||||
Vec3 lookAngle = entity.getLookAngle().normalize().scale(pos.distanceTo(cameraPos) * (1 - 1.0 / zoom));
|
double zoom = 0.975 * ClientEventHandler.droneFovLerp + 0.06 * fovAdjust2;
|
||||||
|
|
||||||
var cPos = cameraPos.add(lookAngle);
|
for (var e : entities) {
|
||||||
Vec3 p = RenderHelper.worldToScreen(pos, cPos);
|
Vec3 pos = new Vec3(e.getX(), e.getEyeY(), e.getZ());
|
||||||
if (p == null) return;
|
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();
|
poseStack.pushPose();
|
||||||
int x = (int) p.x;
|
int x = (int) p.x;
|
||||||
int y = (int) p.y;
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ import com.mojang.math.Axis;
|
||||||
import net.minecraft.client.Camera;
|
import net.minecraft.client.Camera;
|
||||||
import net.minecraft.client.CameraType;
|
import net.minecraft.client.CameraType;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
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.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
|
@ -44,105 +45,105 @@ public class HelicopterHudOverlay {
|
||||||
public static void eventHandler(RenderGuiEvent.Pre event) {
|
public static void eventHandler(RenderGuiEvent.Pre event) {
|
||||||
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;
|
|
||||||
Minecraft mc = Minecraft.getInstance();
|
Minecraft mc = Minecraft.getInstance();
|
||||||
|
Player player = mc.player;
|
||||||
Camera camera = mc.gameRenderer.getMainCamera();
|
Camera camera = mc.gameRenderer.getMainCamera();
|
||||||
Vec3 cameraPos = camera.getPosition();
|
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)
|
if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (player.getVehicle() instanceof IHelicopterEntity iHelicopterEntity && player.getVehicle() instanceof MobileVehicleEntity mobileVehicle && iHelicopterEntity.isDriver(player) && Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON) {
|
if (player.getVehicle() instanceof IHelicopterEntity iHelicopterEntity && player.getVehicle() instanceof MobileVehicleEntity mobileVehicle && iHelicopterEntity.isDriver(player) && Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON) {
|
||||||
RenderSystem.disableDepthTest();
|
poseStack.pushPose();
|
||||||
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);
|
|
||||||
|
|
||||||
|
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 RATE,PULL 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.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 RATE,PULL 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 x = (int) p.x;
|
||||||
int y = (int) p.y;
|
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();
|
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));
|
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);
|
return Math.sqrt(x * x + y * y + z * z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ import static com.atsuishio.superbwarfare.client.RenderHelper.preciseBlit;
|
||||||
|
|
||||||
@Mod.EventBusSubscriber(value = Dist.CLIENT)
|
@Mod.EventBusSubscriber(value = Dist.CLIENT)
|
||||||
public class KillMessageOverlay {
|
public class KillMessageOverlay {
|
||||||
|
|
||||||
private static final ResourceLocation HEADSHOT = ModUtils.loc("textures/screens/damage_types/headshot.png");
|
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");
|
private static final ResourceLocation KNIFE = ModUtils.loc("textures/screens/damage_types/knife.png");
|
||||||
|
|
|
@ -22,48 +22,41 @@ import net.minecraftforge.fml.common.Mod;
|
||||||
|
|
||||||
@Mod.EventBusSubscriber(value = Dist.CLIENT)
|
@Mod.EventBusSubscriber(value = Dist.CLIENT)
|
||||||
public class RedTriangleOverlay {
|
public class RedTriangleOverlay {
|
||||||
|
|
||||||
private static final ResourceLocation TRIANGLE = ModUtils.loc("textures/screens/red_triangle.png");
|
private static final ResourceLocation TRIANGLE = ModUtils.loc("textures/screens/red_triangle.png");
|
||||||
|
|
||||||
@SubscribeEvent(priority = EventPriority.NORMAL)
|
@SubscribeEvent(priority = EventPriority.NORMAL)
|
||||||
public static void eventHandler(RenderGuiEvent.Pre event) {
|
public static void eventHandler(RenderGuiEvent.Pre event) {
|
||||||
int w = event.getWindow().getGuiScaledWidth();
|
|
||||||
int h = event.getWindow().getGuiScaledHeight();
|
|
||||||
Minecraft mc = Minecraft.getInstance();
|
Minecraft mc = Minecraft.getInstance();
|
||||||
Camera camera = mc.gameRenderer.getMainCamera();
|
Camera camera = mc.gameRenderer.getMainCamera();
|
||||||
Vec3 cameraPos = camera.getPosition();
|
Vec3 cameraPos = camera.getPosition();
|
||||||
PoseStack poseStack = event.getGuiGraphics().pose();
|
PoseStack poseStack = event.getGuiGraphics().pose();
|
||||||
|
|
||||||
Player player = Minecraft.getInstance().player;
|
Player player = mc.player;
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
|
|
||||||
ItemStack stack = player.getMainHandItem();
|
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);
|
HudUtil.blit(poseStack, TRIANGLE, x - 4, y - 4, 0, 0, 8, 8, 8, 8, -65536);
|
||||||
|
|
||||||
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();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
RenderSystem.depthMask(true);
|
RenderSystem.depthMask(true);
|
||||||
RenderSystem.defaultBlendFunc();
|
RenderSystem.defaultBlendFunc();
|
||||||
RenderSystem.enableDepthTest();
|
RenderSystem.enableDepthTest();
|
||||||
RenderSystem.disableBlend();
|
RenderSystem.disableBlend();
|
||||||
RenderSystem.setShaderColor(1, 1, 1, 1);
|
RenderSystem.setShaderColor(1, 1, 1, 1);
|
||||||
|
|
||||||
|
poseStack.popPose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,30 +26,29 @@ public class SpyglassRangeOverlay {
|
||||||
Player player = Minecraft.getInstance().player;
|
Player player = Minecraft.getInstance().player;
|
||||||
if (player != null && (player.getMainHandItem().getItem() == Items.SPYGLASS || player.getOffhandItem().getItem() == Items.SPYGLASS) && player.isUsingItem()) {
|
if (player != null && (player.getMainHandItem().getItem() == Items.SPYGLASS || player.getOffhandItem().getItem() == Items.SPYGLASS) && player.isUsingItem()) {
|
||||||
boolean lookAtEntity = false;
|
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)),
|
new ClipContext(player.getEyePosition(), player.getEyePosition().add(player.getLookAngle().scale(520)),
|
||||||
ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos())));
|
ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos())));
|
||||||
|
|
||||||
double entity_range = 0;
|
double entityRange = 0;
|
||||||
|
|
||||||
Entity lookingEntity = TraceTool.findLookingEntity(player, 520);
|
Entity lookingEntity = TraceTool.findLookingEntity(player, 520);
|
||||||
|
|
||||||
if (lookingEntity != null) {
|
if (lookingEntity != null) {
|
||||||
lookAtEntity = true;
|
lookAtEntity = true;
|
||||||
entity_range = player.distanceTo(lookingEntity);
|
entityRange = player.distanceTo(lookingEntity);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lookAtEntity) {
|
if (lookAtEntity) {
|
||||||
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
|
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);
|
w / 2 + 12, h / 2 - 28, -1, false);
|
||||||
} else {
|
} else {
|
||||||
if (block_range > 512) {
|
if (blockRange > 512) {
|
||||||
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
|
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
|
||||||
.append(Component.literal("---M")), w / 2 + 12, h / 2 - 28, -1, false);
|
.append(Component.literal("---M")), w / 2 + 12, h / 2 - 28, -1, false);
|
||||||
} else {
|
} else {
|
||||||
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.drone.range")
|
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);
|
w / 2 + 12, h / 2 - 28, -1, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.atsuishio.superbwarfare.client.overlay;
|
package com.atsuishio.superbwarfare.client.overlay;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
import com.atsuishio.superbwarfare.ModUtils;
|
||||||
|
import com.atsuishio.superbwarfare.config.client.DisplayConfig;
|
||||||
import com.atsuishio.superbwarfare.entity.*;
|
import com.atsuishio.superbwarfare.entity.*;
|
||||||
import com.atsuishio.superbwarfare.init.ModItems;
|
import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
|
@ -136,6 +137,7 @@ public class VehicleHudOverlay {
|
||||||
ItemStack stack = player.getItemBySlot(EquipmentSlot.CHEST);
|
ItemStack stack = player.getItemBySlot(EquipmentSlot.CHEST);
|
||||||
if (stack == ItemStack.EMPTY) return 0;
|
if (stack == ItemStack.EMPTY) return 0;
|
||||||
if (stack.getTag() == null || !stack.getTag().contains("ArmorPlate")) return 0;
|
if (stack.getTag() == null || !stack.getTag().contains("ArmorPlate")) return 0;
|
||||||
|
if (!DisplayConfig.ARMOR_PLATE_HUD.get()) return 0;
|
||||||
return 9;
|
return 9;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue