添加过热条HUD
This commit is contained in:
parent
919fd1aa1c
commit
cdc7971afd
3 changed files with 85 additions and 1 deletions
|
@ -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());
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue