Skip to content

Commit

Permalink
Fix icon rendering
Browse files Browse the repository at this point in the history
  • Loading branch information
sddsd2332 committed Jan 2, 2025
1 parent 19237c6 commit c873c84
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 64 deletions.
30 changes: 24 additions & 6 deletions src/main/java/mekanism/client/gui/element/GuiUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import mekanism.common.InfuseStorage;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
Expand All @@ -27,7 +26,7 @@
@SideOnly(Side.CLIENT)
public class GuiUtils {

public static void renderExtendedTexture(ResourceLocation resource, int sideWidth, int sideHeight, int left, int top, int width, int height) {
public static void renderExtendedTexture(ResourceLocation resource, int sideWidth, int sideHeight, int left, int top, int width, int height) {
int textureWidth = 2 * sideWidth + 1;
int textureHeight = 2 * sideHeight + 1;
blitNineSlicedSized(resource, left, top, width, height, sideWidth, sideHeight, textureWidth, textureHeight, 0, 0, textureWidth, textureHeight);
Expand Down Expand Up @@ -338,10 +337,6 @@ public static int drawString(FontRenderer font, String component, float x, float
return font.drawString(component, x, y, color, drawShadow);
}

public static void drawBackdrop(Minecraft minecraft, int x, int y, int width, int height, int alpha) {
int argb = 0xFFFFFF | alpha << 24;
Gui.drawRect(x - 2, y - 2, x + width + 2, y + height + 2, multiply(0xFFFFFF, argb));
}

public static int multiply(int pPackedColourOne, int pPackedColorTwo) {
return color(alpha(pPackedColourOne) * alpha(pPackedColorTwo) / 255, red(pPackedColourOne) * red(pPackedColorTwo) / 255, green(pPackedColourOne) * green(pPackedColorTwo) / 255, blue(pPackedColourOne) * blue(pPackedColorTwo) / 255);
Expand Down Expand Up @@ -369,4 +364,27 @@ public static int color(int pAlpha, int pRed, int pGreen, int pBlue) {
return pAlpha << 24 | pRed << 16 | pGreen << 8 | pBlue;
}

public static void blit(int pX, int pY, float pUOffset, float pVOffset, int pWidth, int pHeight, int pTextureWidth, int pTextureHeight) {
blit(pX, pY, pWidth, pHeight, pUOffset, pVOffset, pWidth, pHeight, pTextureWidth, pTextureHeight);
}

public static void blit(int pX, int pY, int pWidth, int pHeight, float pUOffset, float pVOffset, int pUWidth, int pVHeight, int pTextureWidth, int pTextureHeight) {
blit(pX, pX + pWidth, pY, pY + pHeight, 0, pUWidth, pVHeight, pUOffset, pVOffset, pTextureWidth, pTextureHeight);
}


public static void blit(int pX1, int pX2, int pY1, int pY2, int pBlitOffset, int pUWidth, int pVHeight, float pUOffset, float pVOffset, int pTextureWidth, int pTextureHeight) {
innerBlit(pX1, pX2, pY1, pY2, pBlitOffset, (pUOffset + 0.0F) / (float) pTextureWidth, (pUOffset + (float) pUWidth) / (float) pTextureWidth, (pVOffset + 0.0F) / (float) pTextureHeight, (pVOffset + (float) pVHeight) / (float) pTextureHeight);
}

public static void innerBlit(int pX1, int pX2, int pY1, int pY2, int pBlitOffset, float pMinU, float pMaxU, float pMinV, float pMaxV) {
BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer();
bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX);
bufferbuilder.pos((float) pX1, (float) pY1, (float) pBlitOffset).tex(pMinU, pMinV).endVertex();
bufferbuilder.pos((float) pX1, (float) pY2, (float) pBlitOffset).tex(pMinU, pMaxV).endVertex();
bufferbuilder.pos((float) pX2, (float) pY2, (float) pBlitOffset).tex(pMaxU, pMaxV).endVertex();
bufferbuilder.pos((float) pX2, (float) pY1, (float) pBlitOffset).tex(pMaxU, pMinV).endVertex();
Tessellator.getInstance().draw();
}

}
39 changes: 28 additions & 11 deletions src/main/java/mekanism/client/render/HUDRenderer.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,23 @@
package mekanism.client.render;

import mekanism.api.energy.IEnergizedItem;
import mekanism.client.gui.element.GuiUtils;
import mekanism.common.config.MekanismConfig;
import mekanism.common.item.armor.ItemMekaSuitArmor;
import mekanism.common.util.LangUtils;
import mekanism.common.util.MekanismUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;

import static mekanism.client.render.hud.MekaSuitEnergyLevel.blit;
import java.util.function.Predicate;

public class HUDRenderer {

Expand All @@ -26,6 +29,7 @@ public class HUDRenderer {
MekanismUtils.getResource(MekanismUtils.ResourceType.GUI_HUD, "hud_mekasuit_chest.png"),
MekanismUtils.getResource(MekanismUtils.ResourceType.GUI_HUD, "hud_mekasuit_leggings.png"),
MekanismUtils.getResource(MekanismUtils.ResourceType.GUI_HUD, "hud_mekasuit_boots.png")};

private static final ResourceLocation TOOL_ICON = MekanismUtils.getResource(MekanismUtils.ResourceType.GUI_HUD, "hud_mekatool.png");

private static final ResourceLocation COMPASS = MekanismUtils.getResource(MekanismUtils.ResourceType.GUI, "Compass.png");
Expand All @@ -48,9 +52,9 @@ public void renderHUD(Minecraft minecraft, FontRenderer font, float partialTick,
GlStateManager.translate(yawJitter, pitchJitter, 0);
if (MekanismConfig.current().client.hudCompassEnabled.val()) {
renderCompass(player, font, partialTick, screenWidth, screenHeight, maxTextHeight, reverseHud, color);
minecraft.renderEngine.bindTexture(Gui.ICONS);

}
// renderMekaSuitEnergyIcons(player, font, color);
renderMekaSuitEnergyIcons(player, font, color);
GlStateManager.popMatrix();
}

Expand All @@ -74,7 +78,7 @@ private static float absSqrt(float val) {
return val < 0 ? -ret : ret;
}

/*

public static final EntityEquipmentSlot[] ARMOR_SLOTS = {EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET};
public static final EntityEquipmentSlot[] HAND_SLOTS = {EntityEquipmentSlot.MAINHAND, EntityEquipmentSlot.OFFHAND};

Expand All @@ -85,7 +89,7 @@ private void renderMekaSuitEnergyIcons(EntityPlayer player, FontRenderer font, i
int posX = 0;
Predicate<Item> showArmorPercent = item -> item instanceof ItemMekaSuitArmor;
for (int i = 0; i < ARMOR_SLOTS.length; i++) {
posX += renderEnergyIcon(player, font, posX, color, ARMOR_ICONS[i],ARMOR_SLOTS[i], showArmorPercent);
posX += renderEnergyIcon(player, font, posX, color, ARMOR_ICONS[i], ARMOR_SLOTS[i], showArmorPercent);
}
Predicate<Item> showToolPercent = item -> item instanceof ItemMekTool;
for (EntityEquipmentSlot hand : HAND_SLOTS) {
Expand All @@ -95,7 +99,6 @@ private void renderMekaSuitEnergyIcons(EntityPlayer player, FontRenderer font, i
}


private int renderEnergyIcon(EntityPlayer player, FontRenderer font, int posX, int color, ResourceLocation icon, EntityEquipmentSlot slot,
Predicate<Item> showPercent) {
ItemStack stack = player.getItemStackFromSlot(slot);
Expand All @@ -105,7 +108,17 @@ private int renderEnergyIcon(EntityPlayer player, FontRenderer font, int posX, i
}
return 0;
}
*/

private void renderHUDElement(FontRenderer font, int x, int y, ResourceLocation icon, String energy, int color, boolean iconRight) {
GlStateManager.enableBlend();
GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
MekanismRenderer.color(color);
font.drawString(energy, iconRight ? x : x + 18, y + 5, color, false);
Minecraft.getMinecraft().renderEngine.bindTexture(icon);
GuiUtils.blit(iconRight ? x + font.getStringWidth(energy) + 2 : x, y, 0, 0, 16, 16, 16, 16);
MekanismRenderer.resetColor();
}


private void renderCompass(EntityPlayer player, FontRenderer font, float partialTick, int screenWidth, int screenHeight, int maxTextHeight, boolean reverseHud,
int color) {
Expand All @@ -115,25 +128,29 @@ private void renderCompass(EntityPlayer player, FontRenderer font, float partial
int posY = Math.min(screenHeight - 20, maxTextHeight) - 80;
GlStateManager.pushMatrix();
GlStateManager.translate(posX + 50, posY + 50, 0);
GlStateManager.pushMatrix();

GlStateManager.pushMatrix();
GlStateManager.scale(0.7F, 0.7F, 0.7F);
BlockPos pos = new BlockPos(player.posX, player.posY, player.posZ);
String coords = LangUtils.localize("x: " + pos.getX() + ",y: " + pos.getY() + ",z: " + pos.getZ());
String coords = LangUtils.localize(pos.getX() + " " + pos.getY() + " " + pos.getZ());
font.drawString(coords, -font.getStringWidth(coords) / 2F, -4, color, false);
GlStateManager.popMatrix();

float angle = 180 - getViewYRot(player, partialTick);
GlStateManager.rotate(-60, 1, 0, 0);
GlStateManager.rotate(angle, 0, 0, 1);
GlStateManager.enableBlend();
GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
MekanismRenderer.color(color);
blit(COMPASS, -50, -50, 100, 100, 0, 0, 256, 256, 256, 256);
rotateStr(font, LangUtils.localize("direction.north.short"), angle, 0, color);
rotateStr(font, LangUtils.localize("direction.east.short"), angle, 90, color);
rotateStr(font, LangUtils.localize("direction.south.short"), angle, 180, color);
rotateStr(font, LangUtils.localize("direction.west.short"), angle, 270, color);
Minecraft.getMinecraft().renderEngine.bindTexture(COMPASS);
GuiUtils.blit(-50, -50, 100, 100, 0, 0, 256, 256, 256, 256);
MekanismRenderer.resetColor();
;
GlStateManager.popMatrix();
GlStateManager.popMatrix();
}

Expand Down
31 changes: 7 additions & 24 deletions src/main/java/mekanism/client/render/hud/MekaSuitEnergyLevel.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package mekanism.client.render.hud;

import mekanism.client.gui.element.GuiUtils;
import mekanism.common.config.MekanismConfig;
import mekanism.common.item.armor.ItemMekaSuitArmor;
import mekanism.common.util.MekanismUtils;
import net.minecraft.client.Minecraft;
Expand All @@ -11,6 +12,7 @@
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.GuiIngameForge;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
Expand All @@ -21,7 +23,7 @@ public class MekaSuitEnergyLevel {
private static final ResourceLocation BAR = MekanismUtils.getResource(MekanismUtils.ResourceType.GUI_BAR, "Base2.png");
private static final ResourceLocation POWER_BAR = MekanismUtils.getResource(MekanismUtils.ResourceType.GUI_BAR, "horizontal_power_long.png");

public static void onDrawScreenPre(RenderGameOverlayEvent.Pre event) {
public static void onDrawScreenPre(RenderGameOverlayEvent.Post event) {
Minecraft mc = Minecraft.getMinecraft();
if (event.getType() == RenderGameOverlayEvent.ElementType.ARMOR) {
double capacity = 0, stored = 0;
Expand All @@ -33,37 +35,18 @@ public static void onDrawScreenPre(RenderGameOverlayEvent.Pre event) {
}
if (capacity != 0) {
int x = event.getResolution().getScaledWidth() / 2 - 91;
int y = event.getResolution().getScaledHeight() - 59;
int y = event.getResolution().getScaledHeight() - GuiIngameForge.left_height + 2;;
int length = (int) Math.round((stored / capacity) * 79);
GuiUtils.renderExtendedTexture(BAR, 2, 2, x, y, 81, 6);
blit(POWER_BAR, x + 1, y + 1, length, 4, 0, 0, length, 4, 79, 4);
mc.renderEngine.bindTexture(POWER_BAR);
GuiUtils.blit(x + 1, y + 1, length, 4, 0, 0, length, 4, 79, 4);
mc.renderEngine.bindTexture(Gui.ICONS);
GuiIngameForge.left_height += 8;
}
}
}

public static void blit(ResourceLocation pAtlasLocation, int pX, int pY, int pWidth, int pHeight, float pUOffset, float pVOffset, int pUWidth, int pVHeight, int pTextureWidth, int pTextureHeight) {
blit(pAtlasLocation, pX, pX + pWidth, pY, pY + pHeight, 0, pUWidth, pVHeight, pUOffset, pVOffset, pTextureWidth, pTextureHeight);
}


public static void blit(ResourceLocation pAtlasLocation, int pX1, int pX2, int pY1, int pY2, int pBlitOffset, int pUWidth, int pVHeight, float pUOffset, float pVOffset, int pTextureWidth, int pTextureHeight) {
innerBlit(pAtlasLocation, pX1, pX2, pY1, pY2, pBlitOffset, (pUOffset + 0.0F) / (float) pTextureWidth, (pUOffset + (float) pUWidth) / (float) pTextureWidth, (pVOffset + 0.0F) / (float) pTextureHeight, (pVOffset + (float) pVHeight) / (float) pTextureHeight);
}

public static void innerBlit(ResourceLocation pAtlasLocation, int pX1, int pX2, int pY1, int pY2, int pBlitOffset, float pMinU, float pMaxU, float pMinV, float pMaxV) {
Minecraft mc = Minecraft.getMinecraft();
mc.renderEngine.bindTexture(pAtlasLocation);
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder bufferbuilder = tessellator.getBuffer();
bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX);
bufferbuilder.pos((float) pX1, (float) pY1, (float) pBlitOffset).tex(pMinU, pMinV).endVertex();
bufferbuilder.pos((float) pX1, (float) pY2, (float) pBlitOffset).tex(pMinU, pMaxV).endVertex();
bufferbuilder.pos((float) pX2, (float) pY2, (float) pBlitOffset).tex(pMaxU, pMaxV).endVertex();
bufferbuilder.pos((float) pX2, (float) pY1, (float) pBlitOffset).tex(pMaxU, pMinV).endVertex();
tessellator.draw();
GlStateManager.enableAlpha();
}


}
32 changes: 14 additions & 18 deletions src/main/java/mekanism/client/render/hud/MekanismHUD.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,37 +3,42 @@
import baubles.api.BaublesApi;
import mekanism.client.gui.element.GuiUtils;
import mekanism.client.render.HUDRenderer;
import mekanism.client.render.MekanismRenderer;
import mekanism.common.Mekanism;
import mekanism.common.config.MekanismConfig;
import mekanism.common.integration.MekanismHooks;
import mekanism.common.item.armor.ItemMekAsuitHeadArmour;
import mekanism.common.item.interfaces.IItemHUDProvider;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.fml.client.SplashProgress;
import net.minecraftforge.fml.common.Optional;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraftforge.items.IItemHandler;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;



@SideOnly(Side.CLIENT)
public class MekanismHUD {


private static final EntityEquipmentSlot[] EQUIPMENT_ORDER = {EntityEquipmentSlot.OFFHAND, EntityEquipmentSlot.MAINHAND, EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS,
EntityEquipmentSlot.FEET};

private static final HUDRenderer hudRenderer = new HUDRenderer();

public static void onDrawScreenPre(RenderGameOverlayEvent.Post event) {
if (event.getType() == RenderGameOverlayEvent.ElementType.ALL) {
Minecraft minecraft = Minecraft.getMinecraft();
Minecraft minecraft = Minecraft.getMinecraft();
if (event.getType() == RenderGameOverlayEvent.ElementType.HOTBAR) {
EntityPlayer player = minecraft.player;
if (!minecraft.gameSettings.hideGUI && player != null && !player.isSpectator() && MekanismConfig.current().client.enableHUD.val()) {
int count = 0;
Expand All @@ -59,24 +64,13 @@ public static void onDrawScreenPre(RenderGameOverlayEvent.Post event) {
maxTextHeight = (int) (y * hudScale);
GlStateManager.pushMatrix();
GlStateManager.scale(hudScale, hudScale, hudScale);
int maxTextWidth = 0;
for (List<String> group : renderStrings) {
for (String text : group) {
int textWidth = font.getStringWidth(text);
if (textWidth > maxTextWidth) {
maxTextWidth = textWidth;
}
}
}
int x = reverseHud ? xScale - maxTextWidth - 2 : 2;
GuiUtils.drawBackdrop(Minecraft.getMinecraft(), x, y, maxTextWidth, maxTextHeight, 0xFFFFFFFF);

for (List<String> group : renderStrings) {
for (String text : group) {
int textWidth = font.getStringWidth(text);
//Align text to right if hud is reversed, otherwise align to the left
//Note: that we always offset by 2 pixels from the edge of the screen regardless of how it is aligned
x = reverseHud ? xScale - textWidth - 2 : 2;
int x = reverseHud ? xScale - textWidth - 2 : 2;
font.drawStringWithShadow(text, MekanismConfig.current().client.hudX.val() + x, MekanismConfig.current().client.hudY.val() + y, 0xFFC8C8C8);
y += 9;
}
Expand All @@ -86,13 +80,15 @@ public static void onDrawScreenPre(RenderGameOverlayEvent.Post event) {
}

if (player.getItemStackFromSlot(EntityEquipmentSlot.HEAD).getItem() instanceof ItemMekAsuitHeadArmour) {
hudRenderer.renderHUD(minecraft, font, Minecraft.getMinecraft().getRenderPartialTicks(), event.getResolution().getScaledWidth(), event.getResolution().getScaledHeight(), maxTextHeight, reverseHud);
hudRenderer.renderHUD(minecraft, font, event.getPartialTicks(), event.getResolution().getScaledWidth(), event.getResolution().getScaledHeight(), maxTextHeight, reverseHud);
}
minecraft.renderEngine.bindTexture(Gui.ICONS);
MekanismRenderer.resetColor();
}
}

}


@Optional.Method(modid = MekanismHooks.Baubles_MOD_ID)
public static int Baubles(EntityPlayer player, List<List<String>> renderStrings) {
IItemHandler baubles = BaublesApi.getBaublesHandler(player);
Expand Down
7 changes: 2 additions & 5 deletions src/main/java/mekanism/common/Mekanism.java
Original file line number Diff line number Diff line change
Expand Up @@ -709,12 +709,9 @@ public void onWorldUnload(WorldEvent.Unload event) {
}

@SubscribeEvent
public static void onDrawScreenPre(RenderGameOverlayEvent.Pre event) {
public void onDrawScreenPre(RenderGameOverlayEvent.Post event) {
MekaSuitEnergyLevel.onDrawScreenPre(event);
}

@SubscribeEvent
public static void onDrawScreenPost(RenderGameOverlayEvent.Post event) {
MekanismHUD.onDrawScreenPre(event);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ public void onUpdate() {
} else if (entity instanceof EntityPlayer player) {
double prevEnergy = getEnergy();
List<ItemStack> stacks = new ArrayList<>();
stacks.addAll(player.inventory.offHandInventory);
stacks.addAll(player.inventory.mainInventory);
stacks.addAll(player.inventory.armorInventory);
if (Mekanism.hooks.Baubles){
Expand Down

0 comments on commit c873c84

Please sign in to comment.