添加过热条HUD

This commit is contained in:
17146 2025-07-14 17:49:58 +08:00 committed by Light_Quanta
parent 919fd1aa1c
commit cdc7971afd
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
3 changed files with 85 additions and 1 deletions

View file

@ -56,6 +56,7 @@ public class ClientRenderHandler {
event.registerBelowAll(ItemRendererFixOverlay.ID, new ItemRendererFixOverlay());
event.registerBelowAll(CannonHudOverlay.ID, new CannonHudOverlay());
event.registerBelowAll(CrossHairOverlay.ID, new CrossHairOverlay());
event.registerBelowAll(HeatBarOverlay.ID, new HeatBarOverlay());
event.registerBelowAll(DroneHudOverlay.ID, new DroneHudOverlay());
event.registerBelowAll(GrenadeLauncherOverlay.ID, new GrenadeLauncherOverlay());
event.registerBelowAll(RedTriangleOverlay.ID, new RedTriangleOverlay());

View file

@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.entity.vehicle.base.ArmedVehicleEntity;
import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.perk.AmmoPerk;
import com.atsuishio.superbwarfare.perk.Perk;
import com.mojang.blaze3d.platform.GlStateManager;
@ -64,7 +65,7 @@ public class CrossHairOverlay implements LayeredDraw.Layer {
if (ClickHandler.isEditing)
return;
if (!player.getMainHandItem().is(ModTags.Items.GUN) || (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand(player)))
if (!(player.getMainHandItem().getItem() instanceof GunItem) || (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand(player)))
return;
ItemStack stack = player.getMainHandItem();

View file

@ -0,0 +1,82 @@
package com.atsuishio.superbwarfare.client.overlay;
import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.client.ClickHandler;
import com.atsuishio.superbwarfare.client.RenderHelper;
import com.atsuishio.superbwarfare.data.gun.GunData;
import com.atsuishio.superbwarfare.entity.vehicle.base.ArmedVehicleEntity;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.DeltaTracker;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.LayeredDraw;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
import org.jetbrains.annotations.NotNull;
@OnlyIn(Dist.CLIENT)
public class HeatBarOverlay implements LayeredDraw.Layer {
public static final ResourceLocation ID = Mod.loc("heat_bar");
private static final ResourceLocation TEXTURE = Mod.loc("textures/screens/heat_bar.png");
@Override
public void render(@NotNull GuiGraphics guiGraphics, @NotNull DeltaTracker deltaTracker) {
Minecraft mc = Minecraft.getInstance();
Player player = mc.player;
if (player == null) return;
if (ClickHandler.isEditing) return;
if (!(player.getMainHandItem().getItem() instanceof GunItem) || (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand(player)))
return;
var screenWidth = guiGraphics.guiWidth();
var screenHeight = guiGraphics.guiHeight();
ItemStack stack = player.getMainHandItem();
var data = GunData.from(stack);
double heat = data.heat.get();
if (heat <= 0) return;
var poseStack = guiGraphics.pose();
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);
int width = 16;
int height = 64;
int i = (screenWidth - width) / 2;
int j = (screenHeight - height) / 2;
float posX = i + 64;
float posY = j + 6;
RenderHelper.preciseBlit(guiGraphics, TEXTURE, posX, posY, 0, 0, 37 / 4f, 233 / 4f, width, height);
float rate = (float) (heat / 100.0);
float barHeight = 56 * rate;
RenderHelper.preciseBlit(guiGraphics, TEXTURE, posX + 2.5f, posY + 1.5f + 56 - barHeight,
10.5f, 0, 2.25f, barHeight, width, height);
RenderSystem.depthMask(true);
RenderSystem.defaultBlendFunc();
RenderSystem.enableDepthTest();
RenderSystem.disableBlend();
RenderSystem.setShaderColor(1, 1, 1, 1);
poseStack.popPose();
}
}