package mekanism.client.gui.element; import mekanism.api.EnumColor; import mekanism.api.transmitters.TransmissionType; import mekanism.client.gui.GuiMekanism; import mekanism.client.gui.IGuiWrapper; import mekanism.client.render.MekanismRenderer; import mekanism.common.SideData; import mekanism.common.base.ISideConfiguration; import mekanism.common.item.ItemConfigurator; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; public abstract class GuiGauge<T> extends GuiElement { protected int xLocation; protected int yLocation; protected int texX; protected int texY; protected int width; protected int height; public EnumColor color; protected int number; protected boolean dummy; protected T dummyType; public GuiGauge(Type type, IGuiWrapper gui, ResourceLocation def, int x, int y) { super(MekanismUtils.getResource(ResourceType.GUI_ELEMENT, type.textureLocation), gui, def); xLocation = x; yLocation = y; width = type.width; height = type.height; texX = type.texX; texY = type.texY; color = type.color; number = type.number; } public abstract int getScaledLevel(); public abstract TextureAtlasSprite getIcon(); public abstract String getTooltipText(); public int getRenderColor() { return -1; } @Override public void renderBackground(int xAxis, int yAxis, int guiWidth, int guiHeight) { mc.renderEngine.bindTexture(RESOURCE); guiObj.drawTexturedRect(guiWidth + xLocation, guiHeight + yLocation, texX, texY, width, height); if(!dummy) { renderScale(xAxis, yAxis, guiWidth, guiHeight); } mc.renderEngine.bindTexture(defaultLocation); } public void renderScale(int xAxis, int yAxis, int guiWidth, int guiHeight) { if(getScaledLevel() == 0 || getIcon() == null) { guiObj.drawTexturedRect(guiWidth + xLocation, guiHeight + yLocation, width, 0, width, height); return; } int scale = getScaledLevel(); int start = 0; while(scale > 0) { int renderRemaining = 0; if(scale > 16) { renderRemaining = 16; scale -= 16; } else { renderRemaining = scale; scale = 0; } mc.renderEngine.bindTexture(MekanismRenderer.getBlocksTexture()); if(getRenderColor() != -1) { MekanismRenderer.color(getRenderColor()); } for(int i = 0; i < number; i++) { guiObj.drawTexturedRectFromIcon(guiWidth + xLocation + 16*i + 1, guiHeight + yLocation + height - renderRemaining - start - 1, getIcon(), 16, renderRemaining); } MekanismRenderer.resetColor(); start+=16; if(renderRemaining == 0 || scale == 0) { break; } } mc.renderEngine.bindTexture(RESOURCE); guiObj.drawTexturedRect(guiWidth + xLocation, guiHeight + yLocation, width, 0, width, height); } @Override public void renderForeground(int xAxis, int yAxis) { if(xAxis >= xLocation + 1 && xAxis <= xLocation + width - 1 && yAxis >= yLocation + 1 && yAxis <= yLocation + height - 1) { ItemStack stack = mc.thePlayer.inventory.getItemStack(); if(stack != null && stack.getItem() instanceof ItemConfigurator && color != null) { if(guiObj instanceof GuiMekanism && ((GuiMekanism)guiObj).getTileEntity() != null) { TileEntity tile = ((GuiMekanism)guiObj).getTileEntity(); if(tile instanceof ISideConfiguration && getTransmission() != null) { SideData data = null; for(SideData iterData : ((ISideConfiguration)tile).getConfig().getOutputs(getTransmission())) { if(iterData.color == color) { data = iterData; break; } } guiObj.displayTooltip(color + data.localize() + " (" + color.getColoredName() + ")", xAxis, yAxis); } } } else { guiObj.displayTooltip(getTooltipText(), xAxis, yAxis); } } } @Override public void preMouseClicked(int xAxis, int yAxis, int button) { } @Override public void mouseClicked(int xAxis, int yAxis, int button) { } public abstract TransmissionType getTransmission(); public void setDummyType(T type) { dummyType = type; } @Override public Rectangle4i getBounds(int guiWidth, int guiHeight) { return new Rectangle4i(guiWidth + xLocation, guiHeight + yLocation, width, height); } public static enum Type { STANDARD(null, 18, 60, 0, 0, 1, "GuiGaugeStandard.png"), STANDARD_YELLOW(EnumColor.YELLOW, 18, 60, 0, 60, 1, "GuiGaugeStandard.png"), STANDARD_RED(EnumColor.DARK_RED, 18, 60, 0, 120, 1, "GuiGaugeStandard.png"), STANDARD_ORANGE(EnumColor.ORANGE, 18, 60, 0, 180, 1, "GuiGaugeStandard.png"), STANDARD_BLUE(EnumColor.DARK_BLUE, 18, 60, 0, 240, 1, "GuiGaugeStandard.png"), WIDE(null, 66, 50, 0, 0, 4, "GuiGaugeWide.png"), WIDE_YELLOW(EnumColor.YELLOW, 66, 50, 0, 50, 4, "GuiGaugeWide.png"), WIDE_RED(EnumColor.DARK_RED, 66, 50, 0, 100, 4, "GuiGaugeWide.png"), WIDE_ORANGE(EnumColor.ORANGE, 66, 50, 0, 150, 4, "GuiGaugeWide.png"), WIDE_BLUE(EnumColor.DARK_BLUE, 66, 50, 0, 200, 4, "GuiGaugeWide.png"), SMALL(null, 18, 30, 0, 0, 1, "GuiGaugeSmall.png"), SMALL_YELLOW(EnumColor.YELLOW, 18, 30, 0, 30, 1, "GuiGaugeSmall.png"), SMALL_RED(EnumColor.DARK_RED, 18, 30, 0, 60, 1, "GuiGaugeSmall.png"), SMALL_ORANGE(EnumColor.ORANGE, 18, 30, 0, 90, 1, "GuiGaugeSmall.png"), SMALL_BLUE(EnumColor.DARK_BLUE, 18, 30, 0, 120, 1, "GuiGaugeSmall.png"); public EnumColor color; public int width; public int height; public int texX; public int texY; public int number; public String textureLocation; private Type(EnumColor c, int w, int h, int tx, int ty, int n, String t) { color = c; width = w; height = h; texX = tx; texY = ty; number = n; textureLocation = t; } } }