From ea217756a07ef40d3e74f12f92fcc4fece6e0770 Mon Sep 17 00:00:00 2001 From: Alexmaster75 Date: Thu, 16 Jul 2026 17:44:58 +0200 Subject: [PATCH 1/2] doom commit? who knows - smooth texture gauge - smooth linear gauge - updated zirnox, ccgt and watz gui (gauges) --- .../inventory/gui/GUIMachineTurbineGas.java | 207 +++++++++--------- .../hbm/inventory/gui/GUIReactorZirnox.java | 25 +-- .../java/com/hbm/inventory/gui/GUIWatz.java | 14 +- .../inventory/gui/element/GUIElements.java | 160 +++++++++++++- .../gui/generators/gui_turbinegas.png | Bin 4560 -> 8156 bytes .../hbm/textures/gui/reactors/gui_zirnox.png | Bin 7726 -> 4825 bytes 6 files changed, 268 insertions(+), 138 deletions(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java index 66a3b7152..2e21214ca 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java @@ -3,6 +3,7 @@ package com.hbm.inventory.gui; import java.util.ArrayList; import java.util.List; +import com.hbm.inventory.gui.element.GUIElements; import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineTurbineGas; @@ -25,96 +26,96 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; public class GUIMachineTurbineGas extends GuiInfoContainer { - + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/generators/gui_turbinegas.png"); private static ResourceLocation gauge_tex = new ResourceLocation(RefStrings.MODID + ":textures/gui/gauges/button_big.png"); private TileEntityMachineTurbineGas turbinegas; - + int yStart; int slidStart; - + public GUIMachineTurbineGas(InventoryPlayer invPlayer, TileEntityMachineTurbineGas te) { super(new ContainerMachineTurbineGas(invPlayer, te)); turbinegas = te; - + this.xSize = 176; this.ySize = 223; } - + //@Override protected void mouseClicked(int x, int y, int i) { - + super.mouseClicked(x, y, i); - + slidStart = turbinegas.powerSliderPos; yStart = y; - + if(Math.sqrt(Math.pow((x - guiLeft - 88), 2) + Math.pow((y - guiTop - 40), 2)) <= 8) { //start-stop circular button - + if(turbinegas.counter == 0 || turbinegas.counter == 579) { - + int state = turbinegas.state - 1; //offline(0) to startup(-1), online(1) to offline(0) - + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); - + NBTTagCompound data = new NBTTagCompound(); data.setInteger("state", state); PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, turbinegas.xCoord, turbinegas.yCoord, turbinegas.zCoord)); } - else + else return; - } - + } + if(turbinegas.state == 1 && x > guiLeft + 74 && x <= guiLeft + 74 + 29 && y >= guiTop + 86 && y < guiTop + 86 + 13) { //auto mode button - + boolean automode = !turbinegas.autoMode; mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); - + NBTTagCompound data = new NBTTagCompound(); data.setBoolean("autoMode", automode); PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, turbinegas.xCoord, turbinegas.yCoord, turbinegas.zCoord)); } - + if(turbinegas.state == 1 && (guiTop + 97 - slidStart) <= yStart && (guiTop + 103 - slidStart) > yStart && guiLeft + 36 < x && guiLeft + 52 >= x) { //power slider - + NBTTagCompound data = new NBTTagCompound(); data.setBoolean("autoMode", false); //if you click the slider with automode on, turns off automode PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, turbinegas.xCoord, turbinegas.yCoord, turbinegas.zCoord)); mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); } } - + @Override protected void mouseClickMove(int x, int y, int p_146273_3_, long p_146273_4_) { - + super.mouseClickMove(x, y, p_146273_3_, p_146273_4_); - + int slidPos = turbinegas.powerSliderPos; - + if(!turbinegas.autoMode && turbinegas.state == 1 && guiLeft + 36 < x && guiLeft + 52 >= x && guiTop + 37 < y && guiTop + 103 >= y) { //area in which the slider can move - + if((guiTop + 97 - slidStart) <= yStart && (guiTop + 103 - slidStart) > yStart) { slidPos = guiTop + 100 - y; - - if(slidPos > 60) + + if(slidPos > 60) slidPos = 60; else if(slidPos < 0) slidPos = 0; - + NBTTagCompound data = new NBTTagCompound(); data.setDouble("slidPos", slidPos); PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, turbinegas.xCoord, turbinegas.yCoord, turbinegas.zCoord)); } } } - + @Override public void drawScreen(int mouseX, int mouseY, float f) { - + super.drawScreen(mouseX, mouseY, f); this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 26, guiTop + 108, 142, 16, turbinegas.power, turbinegas.getMaxPower()); - + if(turbinegas.state == 1) { double consumption = turbinegas.fuelMaxCons.containsKey(turbinegas.tanks[0].getTankType()) ? turbinegas.fuelMaxCons.get(turbinegas.tanks[0].getTankType()) : 5D; this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {"Fuel consumption: " + 20 * (consumption * 0.05D + consumption * turbinegas.throttle / 100) + " mb/s"}); @@ -122,20 +123,20 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { else { this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {"Generator offline"}); } - + if(turbinegas.temp >= 20) this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: " + (turbinegas.temp) + "°C"}); else this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: 20°C"}); - + turbinegas.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 16, 16, 48); turbinegas.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 70, 16, 32); turbinegas.tanks[2].renderTankInfo(this, mouseX, mouseY, guiLeft + 147, guiTop + 61, 16, 36); turbinegas.tanks[3].renderTankInfo(this, mouseX, mouseY, guiLeft + 147, guiTop + 21, 16, 36); - + String[] info = I18nUtil.resolveKeyArray("desc.gui.turbinegas.automode"); this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 34, 16, 16, guiLeft - 8, guiTop + 44 + 16, info); - + List fuels = new ArrayList(); fuels.add(I18nUtil.resolveKey("desc.gui.turbinegas.fuels")); for(FluidType type : Fluids.getInNiceOrder()) { @@ -144,25 +145,25 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { } } this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 34 + 16, 16, 16, guiLeft - 8, guiTop + 44 + 16, fuels); - + String[] warning = I18nUtil.resolveKeyArray("desc.gui.turbinegas.warning"); if(turbinegas.tanks[0].getFill() < 5000 || turbinegas.tanks[1].getFill() < 1000) this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 34 + 32, 16, 16, guiLeft - 8, guiTop + 44 + 16, warning); } - + @Override protected void drawGuiContainerBackgroundLayer(float iinterpolation, int x, int y) { - + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); //the main thing - + if(turbinegas.autoMode) drawTexturedModalRect(guiLeft + 74, guiTop + 86, 194, 11, 29, 13); //auto mode button else drawTexturedModalRect(guiLeft + 74, guiTop + 86, 194, 24, 29, 13); - + switch(turbinegas.state) { case 0: drawTexturedModalRect(guiLeft + 80, guiTop + 32, 178, 38, 16, 16); //red button @@ -178,36 +179,36 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { default: break; } - + drawTexturedModalRect(guiLeft + 36, guiTop + 97 - turbinegas.powerSliderPos, 178, 0, 16, 6); //power slider - + int power = (int) (turbinegas.power * 142 / turbinegas.maxPower); //power storage drawTexturedModalRect(guiLeft + 26, guiTop + 109, 0, 223, power, 16); - - drawRPMGauge(turbinegas.rpm); + + GUIElements.drawSmoothTextureModalCircle(guiLeft + 64, guiTop + 16, this.zLevel, 176, 64, 48, 48, (double) turbinegas.rpm / 100); drawThermometer(turbinegas.temp); - + this.drawInfoPanel(guiLeft - 16, guiTop + 34, 16, 16, 3); //info this.drawInfoPanel(guiLeft - 16, guiTop + 34 + 16, 16, 16, 2); //fuels if((turbinegas.tanks[0].getFill()) < 5000 || turbinegas.tanks[1].getFill() < 1000) this.drawInfoPanel(guiLeft - 16, guiTop + 34 + 32, 16, 16, 7); if(turbinegas.tanks[0].getFill() == 0 || turbinegas.tanks[1].getFill() == 0) this.drawInfoPanel(guiLeft - 16, guiTop + 34 + 32, 16, 16, 6); - + turbinegas.tanks[0].renderTank(guiLeft + 8, guiTop + 65, this.zLevel, 16, 48); turbinegas.tanks[1].renderTank(guiLeft + 8, guiTop + 103, this.zLevel, 16, 32); turbinegas.tanks[2].renderTank(guiLeft + 147, guiTop + 98, this.zLevel, 16, 36); turbinegas.tanks[3].renderTank(guiLeft + 147, guiTop + 58, this.zLevel, 16, 36); } - + int numberToDisplay = 0; //for startup - int digitNumber = 0; + int digitNumber = 0; int exponent = 0; - + public void displayStartup() { - + if(numberToDisplay < 8888888 && turbinegas.counter < 60) { //48 frames needed to complete - + digitNumber++; if(digitNumber == 9) { digitNumber = 1; @@ -215,66 +216,66 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { } numberToDisplay += Math.pow(10, exponent); } - + if(turbinegas.counter > 50) numberToDisplay = 0; - + drawPowerMeterDisplay(numberToDisplay); } - + protected void drawPowerMeterDisplay(int number) { //display code - + int firstDigitX = 65; int firstDigitY = 62; - + int[] digit = new int[7]; - + for(int i = 6; i >= 0; i--) { //creates an array of digits that represent the numbers - + digit[i] = (int) (number % 10); - + number = number / 10; - + drawTexturedModalRect(guiLeft + firstDigitX + i * 7, guiTop + 9 + firstDigitY, 194 + digit[i] * 5, 0, 5, 11); } - + int uselessZeros = 0; - + for(int i = 0; i < 6; i++) { //counts how much zeros there are before the number, to display 57 instead of 000057 - + if(digit[i] == 0) uselessZeros++; else break; } - + for(int i = 0; i < uselessZeros; i++) { //turns off the useless zeros - + drawTexturedModalRect(guiLeft + firstDigitX + i * 7, guiTop + 9 + firstDigitY, 244, 0, 5, 11); } } - + protected void drawThermometer(int temp) { - + int xPos = guiLeft + 136; int yPos = guiTop + 28; - + int width = 2; int height = 64; - + int maxTemp = 800; - + double uMin = (176D / 256D); double uMax = (178D / 256D); double vMin = ((64D - 64 * temp / maxTemp) / 256D); double vMax = (64D / 256D); - + GL11.glEnable(GL11.GL_BLEND); - + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); - + Tessellator tessellator = Tessellator.instance; - + tessellator.startDrawingQuads(); tessellator.addVertexWithUV(xPos, yPos + height, this.zLevel, uMin, vMax); tessellator.addVertexWithUV(xPos + width, yPos + height, this.zLevel, uMax, vMax); @@ -284,41 +285,41 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { GL11.glDisable(GL11.GL_BLEND); } - - protected void drawRPMGauge(int position) { - - int xPos = guiLeft + 64; - int yPos = guiTop + 16; - - int squareSideLenght = 48; - - double uMin = (48D / 4848D) * position; - double uMax = (48D / 4848D) * (position + 1); - double vMin = 0D; - double vMax = 1D; - - GL11.glEnable(GL11.GL_BLEND); - - Minecraft.getMinecraft().getTextureManager().bindTexture(gauge_tex); //long boi - - Tessellator tessellator = Tessellator.instance; - - tessellator.startDrawingQuads(); - tessellator.addVertexWithUV(xPos, yPos + squareSideLenght, this.zLevel, uMin, vMax); - tessellator.addVertexWithUV(xPos + squareSideLenght, yPos + squareSideLenght, this.zLevel, uMax, vMax); - tessellator.addVertexWithUV(xPos + squareSideLenght, yPos, this.zLevel,uMax, vMin); - tessellator.addVertexWithUV(xPos, yPos, this.zLevel, uMin, vMin); - tessellator.draw(); - GL11.glDisable(GL11.GL_BLEND); - } - +// protected void drawRPMGauge(int position) { +// +// int xPos = guiLeft + 64; +// int yPos = guiTop + 16; +// +// int squareSideLenght = 48; +// +// double uMin = (48D / 4848D) * position; +// double uMax = (48D / 4848D) * (position + 1); +// double vMin = 0D; +// double vMax = 1D; +// +// GL11.glEnable(GL11.GL_BLEND); +// +// Minecraft.getMinecraft().getTextureManager().bindTexture(gauge_tex); //long boi +// +// Tessellator tessellator = Tessellator.instance; +// +// tessellator.startDrawingQuads(); +// tessellator.addVertexWithUV(xPos, yPos + squareSideLenght, this.zLevel, uMin, vMax); +// tessellator.addVertexWithUV(xPos + squareSideLenght, yPos + squareSideLenght, this.zLevel, uMax, vMax); +// tessellator.addVertexWithUV(xPos + squareSideLenght, yPos, this.zLevel,uMax, vMin); +// tessellator.addVertexWithUV(xPos, yPos, this.zLevel, uMin, vMin); +// tessellator.draw(); +// +// GL11.glDisable(GL11.GL_BLEND); +// } + @Override protected void drawGuiContainerForegroundLayer(int i, int j) { //useless piece of shit, at least for now String name = this.turbinegas.hasCustomInventoryName() ? this.turbinegas.getInventoryName() : I18n.format(this.turbinegas.getInventoryName()); - + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 94, 4210752); } -} \ No newline at end of file +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIReactorZirnox.java b/src/main/java/com/hbm/inventory/gui/GUIReactorZirnox.java index 25072180d..aa0948990 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIReactorZirnox.java +++ b/src/main/java/com/hbm/inventory/gui/GUIReactorZirnox.java @@ -1,5 +1,6 @@ package com.hbm.inventory.gui; +import com.hbm.inventory.gui.element.GUIElements; import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerReactorZirnox; @@ -39,10 +40,10 @@ public class GUIReactorZirnox extends GuiInfoContainer { zirnox.water.renderTankInfo(this, mouseX, mouseY, guiLeft + 178, guiTop + 108, 18, 12); this.drawCustomInfo(this, mouseX, mouseY, guiLeft + 160, guiTop + 33, 18, 17, new String[] { "Temperature:", " " + Math.round((zirnox.heat) * 0.00001 * 780 + 20) + "°C" }); this.drawCustomInfo(this, mouseX, mouseY, guiLeft + 178, guiTop + 33, 18, 17, new String[] { "Pressure:", " " + Math.round((zirnox.pressure) * 0.00001 * 30) + " bar" }); - + String[] coolantText = I18nUtil.resolveKeyArray("desc.gui.zirnox.coolant"); this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, coolantText); - + String[] pressureText = I18nUtil.resolveKeyArray("desc.gui.zirnox.pressure"); this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16 + 16, pressureText); @@ -92,20 +93,12 @@ public class GUIReactorZirnox extends GuiInfoContainer { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - int s = zirnox.getGaugeScaled(6, 0); - drawTexturedModalRect(guiLeft + 160, guiTop + 108, 238, 0 + 12 * s, 18, 12); + GUIElements.drawSmoothLinearGauge(guiLeft + 162, guiTop + 114, this.zLevel, (double) zirnox.steam.getFill() / zirnox.steam.getMaxFill(), 2, 5, 0.75, 14, 0, 0x7F0000); + GUIElements.drawSmoothLinearGauge(guiLeft + 144, guiTop + 114, this.zLevel, (double) zirnox.carbonDioxide.getFill() / zirnox.carbonDioxide.getMaxFill(), 2, 5, 0.75, 14, 0, 0x7F0000); + GUIElements.drawSmoothLinearGauge(guiLeft + 180, guiTop + 114, this.zLevel, (double) zirnox.water.getFill() / zirnox.water.getMaxFill(), 2, 5, 0.75, 14, 0, 0x7F0000); - int c = zirnox.getGaugeScaled(6, 1); - drawTexturedModalRect(guiLeft + 142, guiTop + 108, 238, 0 + 12 * c, 18, 12); - - int w = zirnox.getGaugeScaled(6, 2); - drawTexturedModalRect(guiLeft + 178, guiTop + 108, 238, 0 + 12 * w, 18, 12); - - int h = zirnox.getGaugeScaled(12, 3); - drawTexturedModalRect(guiLeft + 160, guiTop + 33, 220, 0 + 18 * h, 18, 17); - - int p = zirnox.getGaugeScaled(12, 4); - drawTexturedModalRect(guiLeft + 178, guiTop + 33, 220, 0 + 18 * p, 18, 17); + GUIElements.drawSmoothGauge(guiLeft + 169, guiTop + 42, this.zLevel, (double) zirnox.heat/100000, 5, 2, 1, 0x7F0000); + GUIElements.drawSmoothGauge(guiLeft + 187, guiTop + 42, this.zLevel, (double) zirnox.pressure/100000, 5, 2, 1, 0x7F0000); if(zirnox.isOn) { for(int x = 0; x < 4; x++) @@ -127,4 +120,4 @@ public class GUIReactorZirnox extends GuiInfoContainer { this.drawInfoPanel(guiLeft - 16, guiTop + 36 + 32 + 16, 16, 16, 6); } -} \ No newline at end of file +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIWatz.java b/src/main/java/com/hbm/inventory/gui/GUIWatz.java index 835c84f4d..e83437036 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIWatz.java +++ b/src/main/java/com/hbm/inventory/gui/GUIWatz.java @@ -28,11 +28,11 @@ public class GUIWatz extends GuiInfoContainer { public GUIWatz(InventoryPlayer invPlayer, TileEntityWatz watz) { super(new ContainerWatz(invPlayer, watz)); this.watz = watz; - + this.xSize = 176; this.ySize = 229; } - + @Override public void drawScreen(int x, int y, float interp) { super.drawScreen(x, y, interp); @@ -44,11 +44,11 @@ public class GUIWatz extends GuiInfoContainer { watz.tanks[1].renderTankInfo(this, x, y, guiLeft + 148, guiTop + 23, 6, 45); watz.tanks[2].renderTankInfo(this, x, y, guiLeft + 154, guiTop + 23, 6, 45); } - + @Override protected void drawGuiContainerForegroundLayer(int i, int j) { this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 93, 4210752); - + double scale = 1.25; String flux = String.format(Locale.US, "%,.1f", watz.fluxDisplay); GL11.glScaled(1 / scale, 1 / scale, 1); @@ -76,7 +76,7 @@ public class GUIWatz extends GuiInfoContainer { GL11.glColor4f(1.0F, col, col, 1.0F); drawTexturedModalRect(guiLeft, guiTop, 0, 0, 131, 122); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - + drawTexturedModalRect(guiLeft + 131, guiTop, 131, 0, 36, 122); drawTexturedModalRect(guiLeft, guiTop + 130, 0, 130, xSize, 99); drawTexturedModalRect(guiLeft + 126, guiTop + 31, 176, 31, 9, 60); @@ -85,8 +85,8 @@ public class GUIWatz extends GuiInfoContainer { if(watz.isOn) drawTexturedModalRect(guiLeft + 147, guiTop + 8, 176, 0, 8, 8); if(watz.isLocked) drawTexturedModalRect(guiLeft + 142, guiTop + 70, 210, 0, 18, 18); - - GUIElements.renderGauge(Gauge.ROUND_SMALL, guiLeft + 13, guiTop + 100, this.zLevel, 1 - col); + + GUIElements.drawSmoothGauge(guiLeft + 22, guiTop + 109, this.zLevel, (double) 1 - col, 5, 2, 1, 0x7F0000); watz.tanks[0].renderTank(guiLeft + 143, guiTop + 69, this.zLevel, 4, 43); watz.tanks[1].renderTank(guiLeft + 149, guiTop + 69, this.zLevel, 4, 43); diff --git a/src/main/java/com/hbm/inventory/gui/element/GUIElements.java b/src/main/java/com/hbm/inventory/gui/element/GUIElements.java index c30aa81c4..cb0416455 100644 --- a/src/main/java/com/hbm/inventory/gui/element/GUIElements.java +++ b/src/main/java/com/hbm/inventory/gui/element/GUIElements.java @@ -21,7 +21,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; public class GUIElements { - + @Deprecated public static enum Gauge { ROUND_SMALL("small_round", 18, 18, 13); ResourceLocation texture; @@ -33,7 +33,7 @@ public class GUIElements { this.count = count; } } - + @Deprecated public static void renderGauge(Gauge gauge, double x, double y, double z, double progress) { Minecraft.getMinecraft().renderEngine.bindTexture(gauge.texture); int frameNum = (int) Math.round((gauge.count - 1) * progress); @@ -47,7 +47,7 @@ public class GUIElements { tess.addVertexWithUV(x, y, z, 0, frameOffset); tess.draw(); } - + public static void drawSmoothGauge(int x, int y, double z, double progress, double tipLength, double backLength, double backSide, int color) { drawSmoothGauge(x, y, z, progress, tipLength, backLength, backSide, color, 0x000000); } @@ -55,12 +55,12 @@ public class GUIElements { private static Vec3NT tip = new Vec3NT(); private static Vec3NT left = new Vec3NT(); private static Vec3NT right = new Vec3NT(); - + public static void drawSmoothGauge(int x, int y, double z, double progress, double tipLength, double backLength, double backSide, int color, int colorOuter) { GL11.glDisable(GL11.GL_TEXTURE_2D); - + progress = MathHelper.clamp_double(progress, 0, 1); - + float angle = (float) Math.toRadians(-progress * 270 - 45); tip.setComponents(0, tipLength, 0); left.setComponents(backSide, -backLength, 0); @@ -69,7 +69,7 @@ public class GUIElements { tip.rotateAroundZ(angle); left.rotateAroundZ(angle); right.rotateAroundZ(angle); - + Tessellator tess = Tessellator.instance; tess.startDrawing(GL11.GL_TRIANGLES); tess.setColorOpaque_I(colorOuter); @@ -82,11 +82,147 @@ public class GUIElements { tess.addVertex(x + left.xCoord, y + left.yCoord, z); tess.addVertex(x + right.xCoord, y + right.yCoord, z); tess.draw(); - + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glEnable(GL11.GL_TEXTURE_2D); } + public static void drawSmoothLinearGauge(int x, int y, double z, double progress, double tipLength, double backLength, double backSide, double scale, float rotation, int color) { + drawSmoothLinearGauge(x, y, z, progress, tipLength, backLength, backSide, scale, rotation, color, 0x000000); + } + + private static Vec3NT Bleft = new Vec3NT(); + private static Vec3NT Bright = new Vec3NT(); + + public static void drawSmoothLinearGauge(int x, int y, double z, double progress, double tipLength, double backLength, double backSide, double scale, float rotation, int color, int colorOuter) { + GL11.glDisable(GL11.GL_TEXTURE_2D); + + scale = Math.max(scale, 1); + progress = MathHelper.clamp_double(progress, 0, 1) * scale; + + tip.setComponents(0, -tipLength, 0); + right.setComponents(-backSide, 0, 0); + Bright.setComponents(-backSide, backLength, 0); + Bleft.setComponents(backSide, backLength, 0); + left.setComponents(backSide, 0, 0); + + float angle = (float) Math.toRadians(-rotation); + + tip.rotateAroundZ(angle); + right.rotateAroundZ(angle); + Bright.rotateAroundZ(angle); + Bleft.rotateAroundZ(angle); + left.rotateAroundZ(angle); + + double deltaX = progress * MathHelper.cos(angle); + double deltaY = progress * MathHelper.sin(angle); + + Tessellator tess = Tessellator.instance; + tess.startDrawing(GL11.GL_POLYGON); + tess.setColorOpaque_I(colorOuter); + double mult = 1.5; + tess.addVertex(x + deltaX + tip.xCoord * mult, y + deltaY + tip.yCoord * mult, z); + tess.addVertex(x + deltaX + right.xCoord * mult, y + deltaY + right.yCoord * mult, z); + tess.addVertex(x + deltaX + Bright.xCoord * mult, y + deltaY + Bright.yCoord, z); + tess.addVertex(x + deltaX + Bleft.xCoord * mult, y + deltaY + Bleft.yCoord, z); + tess.addVertex(x + deltaX + left.xCoord * mult, y + deltaY + left.yCoord * mult, z); + tess.draw(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + tess.startDrawing(GL11.GL_POLYGON); + tess.setColorOpaque_I(color); + tess.addVertex(x + deltaX + tip.xCoord, y + deltaY + tip.yCoord, z); + tess.addVertex(x + deltaX + right.xCoord, y + deltaY + right.yCoord, z); + tess.addVertex(x + deltaX + Bright.xCoord, y + deltaY + Bright.yCoord, z); + tess.addVertex(x + deltaX + Bleft.xCoord, y + deltaY + Bleft.yCoord, z); + tess.addVertex(x + deltaX + left.xCoord, y + deltaY + left.yCoord, z); + tess.draw(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + public static void drawSmoothTextureModalCircle(int xDraw, int yDraw, float zDraw, int xStart, int yStart, int xDelta, int yDelta, double progress) { + float var7 = 0.00390625F; + float var8 = 0.00390625F; + + progress = MathHelper.clamp_double(progress, 0, 1); + float angle = (float) (-progress * 270.0); + double theta = Math.toRadians(angle - 135); + int addons = 0; + double xTarget = 0; + double yTarget = 0; + + // addons is just a numeric flag for how many fixed point to add, to generate the triangles + if (angle >= -180 && angle < -90) { + addons = 1; + } else if (angle >= -270 && angle < -180) { + addons = 2; + } + + // the abysmal control under here is responsible for the positioning of the last point + // basically this whole function makes this shape: + // + - - - - - - - - - - - + + // | \ * * * * * * * * * / | + // | * \ * * * * * * * / * | + // | * * \ * * * * * / * * | + // | * * * \ * * * / * * * | + // | * * * * \ * / * * * * | + // | * * * * * + * * * * * | + // | * * * * / \ * * * * | + // | * * * / \ * * * | + // | * * / \ * * | + // | * / \ * | + // | / \ | + // + - - - - - - - - - - - + + // the "/, \" are the sides, "+" points and "*" rendered part (lower triangle isn't shown) + if (angle >= -90) { + xTarget = -1; + yTarget = -Math.tan(theta); + } else if (angle > -135 && angle < -90) { + xTarget = Math.tan(Math.PI/2 - theta); + yTarget = 1; + } else if (angle > -180 && angle < -135) { + xTarget = Math.tan(Math.PI/2 - theta); + yTarget = 1; + } else if (angle <= -180) { + xTarget = 1; + yTarget = Math.tan(theta); + } else if (angle == -135) { + xTarget = 0; + yTarget = 1; + } + + double xMid = (double) xDelta / 2; + double yMid = (double) yDelta / 2; + + xTarget *= xMid; + yTarget *= yMid; + + Tessellator tess = Tessellator.instance; + + tess.startDrawing(GL11.GL_TRIANGLES); // i should've used GL_POLYGON yes i know, too bad im either too retarded to understand it or OpenGL makes it funky, i already tried + tess.addVertexWithUV((double) (xDraw), (double) (yDraw + yDelta), (double) zDraw, (double) ((float) (xStart) * var7), (double) ((float) (yStart + yDelta) * var8)); + tess.addVertexWithUV((double) (xDraw + xMid), (double) (yDraw + yMid), (double) zDraw, (double) ((float) (xStart + xMid) * var7), (double) ((float) (yStart + yMid) * var8)); + if (addons == 2 || addons == 1) { + tess.addVertexWithUV((double) (xDraw), (double) (yDraw), (double) zDraw, (double) ((float) (xStart) * var7), (double) ((float) (yStart) * var8)); + tess.draw(); + tess.startDrawing(GL11.GL_TRIANGLES); + tess.addVertexWithUV((double) (xDraw), (double) (yDraw), (double) zDraw, (double) ((float) (xStart) * var7), (double) ((float) (yStart) * var8)); + tess.addVertexWithUV((double) (xDraw + xMid), (double) (yDraw + yMid), (double) zDraw, (double) ((float) (xStart + xMid) * var7), (double) ((float) (yStart + yMid) * var8)); + } + if (addons == 2) { + tess.addVertexWithUV((double) (xDraw + xDelta), (double) (yDraw), (double) zDraw, (double) ((float) (xStart + xDelta) * var7), (double) ((float) (yStart) * var8)); + tess.draw(); + tess.startDrawing(GL11.GL_TRIANGLES); + tess.addVertexWithUV((double) (xDraw + xDelta), (double) (yDraw), (double) zDraw, (double) ((float) (xStart + xDelta) * var7), (double) ((float) (yStart) * var8)); + tess.addVertexWithUV((double) (xDraw + xMid), (double) (yDraw + yMid), (double) zDraw, (double) ((float) (xStart + xMid) * var7), (double) ((float) (yStart + yMid) * var8)); + } + tess.addVertexWithUV((double) (xDraw + xTarget + xMid), (double) (yDraw - yTarget + yMid), (double) zDraw, (double) ((float) (xStart + xTarget + xMid) * var7), (double) ((float) (yStart - yTarget + yMid) * var8)); + tess.draw(); + } + public static final int STANDARD_COLOR_BACKGROUND = -0xFEFFFF0; public static final int STANDARD_COLOR_LINE0 = 0x505000FF; public static final int STANDARD_COLOR_LINE1 = (STANDARD_COLOR_LINE0 & 0xFEFEFE) >> 1 | STANDARD_COLOR_LINE0 & -0xFEFEFE; @@ -114,7 +250,7 @@ public class GUIElements { } public static void drawHoveringText(List lines, int x, int y, FontRenderer font, RenderItem itemRender, int guiWidth, int guiHeight, int headerOffset, int lineDist, int colBG0, int colBG1, int colLine0, int colLine1) { - + if(!lines.isEmpty()) { GL11.glDisable(GL12.GL_RESCALE_NORMAL); RenderHelper.disableStandardItemLighting(); @@ -154,7 +290,7 @@ public class GUIElements { drawGradientRect(boundX - 3, boundY - 3, boundX + width + 3, boundY + height + 3, colBG0, colBG1); drawGradientRect(boundX - 4, boundY - 3, boundX - 3, boundY + height + 3, colBG0, colBG1); drawGradientRect(boundX + width + 3, boundY - 3, boundX + width + 4, boundY + height + 3, colBG0, colBG1); - + drawGradientRect(boundX - 3, boundY - 3 + 1, boundX - 3 + 1, boundY + height + 3 - 1, colLine0, colLine1); drawGradientRect(boundX + width + 2, boundY - 3 + 1, boundX + width + 3, boundY + height + 3 - 1, colLine0, colLine1); drawGradientRect(boundX - 3, boundY - 3, boundX + width + 3, boundY - 3 + 1, colLine0, colLine0); @@ -163,7 +299,7 @@ public class GUIElements { for(int i = 0; i < lines.size(); ++i) { String line = (String) lines.get(i); font.drawStringWithShadow(line, boundX, boundY, -1); - + if(i == 0) boundY += headerOffset; boundY += lineDist; } @@ -175,7 +311,7 @@ public class GUIElements { GL11.glEnable(GL12.GL_RESCALE_NORMAL); } } - + /** Colors don't use the RGBA, but rather ARGB (evil route) */ protected static void drawGradientRect(int x0, int y0, int x1, int y1, int col0, int col1) { float a0 = (float) (col0 >> 24 & 255) / 255F; diff --git a/src/main/resources/assets/hbm/textures/gui/generators/gui_turbinegas.png b/src/main/resources/assets/hbm/textures/gui/generators/gui_turbinegas.png index ce95196166cb449669d4b407743fe88459332a2a..b8f12a72e84adef8b2417d9b41de14decdcb401e 100644 GIT binary patch literal 8156 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 Date: Thu, 16 Jul 2026 17:50:44 +0200 Subject: [PATCH 2/2] removed redundand shit --- .../java/com/hbm/inventory/gui/GUIWatz.java | 1 - .../hbm/inventory/gui/element/GUIElements.java | 18 +++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIWatz.java b/src/main/java/com/hbm/inventory/gui/GUIWatz.java index e83437036..c7d4dfd3d 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIWatz.java +++ b/src/main/java/com/hbm/inventory/gui/GUIWatz.java @@ -6,7 +6,6 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerWatz; import com.hbm.inventory.gui.element.GUIElements; -import com.hbm.inventory.gui.element.GUIElements.Gauge; import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; diff --git a/src/main/java/com/hbm/inventory/gui/element/GUIElements.java b/src/main/java/com/hbm/inventory/gui/element/GUIElements.java index cb0416455..721d8d68f 100644 --- a/src/main/java/com/hbm/inventory/gui/element/GUIElements.java +++ b/src/main/java/com/hbm/inventory/gui/element/GUIElements.java @@ -203,23 +203,23 @@ public class GUIElements { Tessellator tess = Tessellator.instance; tess.startDrawing(GL11.GL_TRIANGLES); // i should've used GL_POLYGON yes i know, too bad im either too retarded to understand it or OpenGL makes it funky, i already tried - tess.addVertexWithUV((double) (xDraw), (double) (yDraw + yDelta), (double) zDraw, (double) ((float) (xStart) * var7), (double) ((float) (yStart + yDelta) * var8)); - tess.addVertexWithUV((double) (xDraw + xMid), (double) (yDraw + yMid), (double) zDraw, (double) ((float) (xStart + xMid) * var7), (double) ((float) (yStart + yMid) * var8)); + tess.addVertexWithUV(xDraw, yDraw + yDelta, zDraw, ((float) (xStart) * var7), ((float) (yStart + yDelta) * var8)); + tess.addVertexWithUV(xDraw + xMid, yDraw + yMid, zDraw, (float) (xStart + xMid) * var7, (float) (yStart + yMid) * var8); if (addons == 2 || addons == 1) { - tess.addVertexWithUV((double) (xDraw), (double) (yDraw), (double) zDraw, (double) ((float) (xStart) * var7), (double) ((float) (yStart) * var8)); + tess.addVertexWithUV(xDraw, yDraw, zDraw, (float) (xStart) * var7, (float) (yStart) * var8); tess.draw(); tess.startDrawing(GL11.GL_TRIANGLES); - tess.addVertexWithUV((double) (xDraw), (double) (yDraw), (double) zDraw, (double) ((float) (xStart) * var7), (double) ((float) (yStart) * var8)); - tess.addVertexWithUV((double) (xDraw + xMid), (double) (yDraw + yMid), (double) zDraw, (double) ((float) (xStart + xMid) * var7), (double) ((float) (yStart + yMid) * var8)); + tess.addVertexWithUV(xDraw, yDraw, zDraw, (float) (xStart) * var7, (float) (yStart) * var8); + tess.addVertexWithUV(xDraw + xMid, yDraw + yMid, zDraw, (float) (xStart + xMid) * var7, (float) (yStart + yMid) * var8); } if (addons == 2) { - tess.addVertexWithUV((double) (xDraw + xDelta), (double) (yDraw), (double) zDraw, (double) ((float) (xStart + xDelta) * var7), (double) ((float) (yStart) * var8)); + tess.addVertexWithUV(xDraw + xDelta, yDraw, zDraw, (float) (xStart + xDelta) * var7, (float) (yStart) * var8); tess.draw(); tess.startDrawing(GL11.GL_TRIANGLES); - tess.addVertexWithUV((double) (xDraw + xDelta), (double) (yDraw), (double) zDraw, (double) ((float) (xStart + xDelta) * var7), (double) ((float) (yStart) * var8)); - tess.addVertexWithUV((double) (xDraw + xMid), (double) (yDraw + yMid), (double) zDraw, (double) ((float) (xStart + xMid) * var7), (double) ((float) (yStart + yMid) * var8)); + tess.addVertexWithUV(xDraw + xDelta, yDraw, (double) zDraw, (float) (xStart + xDelta) * var7, (float) (yStart) * var8); + tess.addVertexWithUV(xDraw + xMid, yDraw + yMid, zDraw, (float) (xStart + xMid) * var7, (float) (yStart + yMid) * var8); } - tess.addVertexWithUV((double) (xDraw + xTarget + xMid), (double) (yDraw - yTarget + yMid), (double) zDraw, (double) ((float) (xStart + xTarget + xMid) * var7), (double) ((float) (yStart - yTarget + yMid) * var8)); + tess.addVertexWithUV(xDraw + xTarget + xMid, yDraw - yTarget + yMid, zDraw, (float) (xStart + xTarget + xMid) * var7, (float) (yStart - yTarget + yMid) * var8); tess.draw(); }