From a06fff46ba7983179626124b3e5df215a6df305c Mon Sep 17 00:00:00 2001 From: Vaern Date: Sat, 1 Jan 2022 10:36:15 -0800 Subject: [PATCH] seven segment displays work! --- .../hbm/inventory/gui/GUIReactorResearch.java | 6 +- .../hbm/inventory/gui/GuiInfoContainer.java | 125 ++++++++++++------ .../hbm/textures/gui/gauges/seven_segment.png | Bin 656 -> 0 bytes 3 files changed, 87 insertions(+), 44 deletions(-) delete mode 100644 src/main/resources/assets/hbm/textures/gui/gauges/seven_segment.png diff --git a/src/main/java/com/hbm/inventory/gui/GUIReactorResearch.java b/src/main/java/com/hbm/inventory/gui/GUIReactorResearch.java index 9949cdebf..72fac911b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIReactorResearch.java +++ b/src/main/java/com/hbm/inventory/gui/GUIReactorResearch.java @@ -34,9 +34,9 @@ public class GUIReactorResearch extends GuiInfoContainer { reactor = te; this.xSize = 176; this.ySize = 222; - displays[0] = new NumberDisplay(14, 25).setDigitLength(4); - displays[1] = new NumberDisplay(12, 63).setDigitLength(3); - displays[2] = new NumberDisplay(5, 101).setDigitLength(3); + displays[0] = new NumberDisplay(14, 25, 0x08FF00).setDigitLength(4); + displays[1] = new NumberDisplay(12, 63, 0x08FF00).setDigitLength(3); + displays[2] = new NumberDisplay(5, 101, 0x08FF00).setDigitLength(3); } @Override diff --git a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java index 9cb2b6be9..73a28534d 100644 --- a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java +++ b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java @@ -1,11 +1,14 @@ package com.hbm.inventory.gui; +import java.awt.Color; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Arrays; import javax.annotation.Nonnegative; +import org.lwjgl.opengl.GL11; + import com.google.common.annotations.Beta; import com.hbm.lib.Library; import com.hbm.lib.RefStrings; @@ -21,7 +24,6 @@ import net.minecraft.util.ResourceLocation; public abstract class GuiInfoContainer extends GuiContainer { static final ResourceLocation guiUtil = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_utility.png"); - protected static final ResourceLocation numDisplays = new ResourceLocation(RefStrings.MODID, "textures/gui/gauges/seven_segment.pn"); public GuiInfoContainer(Container p_i1072_1_) { super(p_i1072_1_); @@ -103,10 +105,8 @@ public abstract class GuiInfoContainer extends GuiContainer { private int displayX; /** The display's Y coordinate **/ private int displayY; - /** The X coordinate of the reference **/ - private int referenceX = 10; - /** The Y coordinate of the reference **/ - private int referenceY = 18; + /** The display's color, in hexadecimal **/ + private int color; /** The amount of padding between digits, default 3 **/ @Nonnegative private byte padding = 3; @@ -134,12 +134,23 @@ public abstract class GuiInfoContainer extends GuiContainer { * Construct a new number display * @param dX X coordinate of the display * @param dY Y coordinate of the display - * @param c Color to use, invalid enums will default to yellow + * @param c Enum Color to use, invalid enums will default to yellow */ public NumberDisplay(int x, int y, EnumChatFormatting c) { this(x, y); - setupColor(c); + setColor(enumToColor(c)); + } + /** + * Construct a new number display + * @param x X coordinate of the display + * @param y Y coordinate of the display + * @param color Color to use, valid hexadecimal value required + */ + public NumberDisplay(int x, int y, int color) + { + this(x, y); + setColor(color); } /** * Construct a new number display, color is yellow @@ -150,26 +161,62 @@ public abstract class GuiInfoContainer extends GuiContainer { { displayX = x; displayY = y; + setColor(0xFFFF55); } - public void setupColor(EnumChatFormatting c) + /** + * Returns a hexadecimal from EnumChatFormatting + * @param c Color to use + * @return + */ + private int enumToColor(EnumChatFormatting c) { - byte row = 4, column = 3; - switch (c) - { - case OBFUSCATED: - case RESET: - case STRIKETHROUGH: - case UNDERLINE: - break; - default: - column = (byte) (c.ordinal() % 4); - row = (byte) Math.floorDiv(c.ordinal(), 4); - break; - } -// System.out.println(column); -// System.out.println(row); - referenceY = 6 * row; - referenceX = 5 * column; + int hex; + if(c.isColor()) + switch(c) + { + case AQUA: + return 0x55FFFF; + case BLACK: + return 0x000000; + case BLUE: + return 0x5555FF; + case DARK_AQUA: + return 0x00AAAA; + case DARK_BLUE: + return 0x0000AA; + case DARK_GRAY: + return 0x555555; + case DARK_GREEN: + return 0x00AA00; + case DARK_PURPLE: + return 0xAA00AA; + case DARK_RED: + return 0xAA0000; + case GOLD: + return 0xFFAA00; + case GRAY: + return 0xAAAAAA; + case GREEN: + return 0x55FF55; + case LIGHT_PURPLE: + return 0xFF55FF; + case RED: + return 0xFF5555; + case WHITE: + return 0xFFFFFF; + case YELLOW: + return 0xFFFF55; + default: + } + + return 0xFFFF55; + } + /** + * Sets color + * @param color - The color in hexadecimal + **/ + public void setColor(int color) { + this.color = color; } /** * Draw custom number @@ -194,10 +241,6 @@ public abstract class GuiInfoContainer extends GuiContainer { /** Draw the previously provided number **/ public void drawNumber() { -// System.out.println(referenceX); -// System.out.println(referenceY); - mc.getTextureManager().bindTexture(numDisplays); - if (isFloat) formatForFloat(); drawNumber(toDisp); @@ -221,7 +264,6 @@ public abstract class GuiInfoContainer extends GuiContainer { /** Draw a single character (requires dispOffset to be set) **/ public void drawChar(char num) { -// System.out.println(num); switch (num) { case '1': @@ -313,40 +355,41 @@ public abstract class GuiInfoContainer extends GuiContainer { private void drawHorizontal(int pos) { byte offset = (byte) (pos * 6); - renderSegment(guiLeft + displayX + dispOffset + 1, guiTop + displayY + offset, referenceX + 1, referenceY, 4, 1); - //System.out.println(referenceX + 1 + ", " + referenceY + ", " + pos); + renderSegment(guiLeft + displayX + dispOffset + 1, guiTop + displayY + offset, 4, 1); } private void drawPeriod() { - renderSegment(guiLeft + displayX + dispOffset + padding - (int) Math.ceil(padding / 2) + 5, guiTop + displayY + 12, referenceX + 1, referenceY, 1, 1); + renderSegment(guiLeft + displayX + dispOffset + padding - (int) Math.ceil(padding / 2) + 5, guiTop + displayY + 12, 1, 1); } private void drawVertical(int posX, int posY) { byte offsetX = (byte) (posX * 5); byte offsetY = (byte) (posY * 6); - renderSegment(guiLeft + displayX + offsetX + dispOffset, guiTop + displayY + offsetY + 1, referenceX, referenceY + 1, 1, 5); + renderSegment(guiLeft + displayX + offsetX + dispOffset, guiTop + displayY + offsetY + 1, 1, 5); } /** * drawTexturedModalRect() for cool kids * @param renX X coordinate to render the part * @param renY Y coordinate to render the part - * @param refX X coordinate of the reference - * @param refY Y coordinate of the reference * @param width Relevant for horizontals * @param height Relevant for verticals */ - private void renderSegment(int renX, int renY, int refX, int refY, int width, int height) + private void renderSegment(int renX, int renY, int width, int height) { final Tessellator tess = Tessellator.instance; final float z = GuiInfoContainer.this.zLevel; + + GL11.glDisable(GL11.GL_TEXTURE_2D); tess.startDrawingQuads(); - tess.addVertexWithUV(renX, renY + height, z, refX, (refY + height)); - tess.addVertexWithUV(renX + width, renY + height, z, (refX + width), (refY + height)); - tess.addVertexWithUV(renX + width, renY + 0, z, (refX + width), refY); - tess.addVertexWithUV(renX, renY, z, refX, refY); + tess.setColorOpaque_I(color); + tess.addVertex(renX, renY + height, z); + tess.addVertex(renX + width, renY + height, z); + tess.addVertex(renX + width, renY + 0, z); + tess.addVertex(renX, renY, z); tess.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); } public void setNumber(Number num) diff --git a/src/main/resources/assets/hbm/textures/gui/gauges/seven_segment.png b/src/main/resources/assets/hbm/textures/gui/gauges/seven_segment.png deleted file mode 100644 index a43f80efbd16d47afa55d3e22bc06ea355f9c5da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 656 zcmV;B0&o3^P)EX>4Tx04R}tkv&MmKpe$iQ>CI62P=w-WT;LSL`5963Pq?8YK2xEOfLNpnlvOS zE{=k0!NHHks)LKOt`4q(Aou~|=H{g6A|?K>DYS_3;J6>}?mh0_0Yas~G^=F{&~)2O z#G+yd?N7-GfbO!op@@~ zHaPDShge=#iO-2gO}ZfQBi9v|-#F)LEbz>bnM}+Phls^o6Dv*3@}@>SNgP%+o$`g0 z%PQwB&RU_w>i6U?3}*D@C9cyPL<|d9gai=^O4vXFHX^j@q*zGMe$>O?U-L`kQpmLd zMvi$Dp+TxQQ60hc>K-;*Jma!vBn6tY?1{fxdT4RqfE?W=BY^?jT^07>d9eghmF z0wX!fUh{Z&TXS#!o~ifu1BAqKt~o-9I{*Lx24YJ`L;(K)RRI5VQhy}?000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2jvSD7bz_Dz3|Wg004|hL_t(I%k9d$C$13)P| z+C$nyDg_n7WvBwBPN%|u5bFv1BT$wlQPxWk<-KzZ=NNE|0hq=<`0@M0L9To62Ty=y zFo~oLh6$F#)Sz60vIgaP%J-BbVmoekGeVY;A?vXj+Iz>?%5-KLdeT$Ar7VMCH)Swv qQnJ5HP!6L(S%b2Vt?Vh^82kdLH&~m2r_mw+0000