package flaxbeard.cyberware.client.gui.hud; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.EntityPlayer; import org.lwjgl.opengl.GL11; import flaxbeard.cyberware.api.CyberwareAPI; import flaxbeard.cyberware.api.ICyberwareUserData; import flaxbeard.cyberware.api.hud.HudElementBase; import flaxbeard.cyberware.api.hud.IHudElement.EnumAnchorHorizontal; import flaxbeard.cyberware.client.ClientUtils; import flaxbeard.cyberware.common.handler.HudHandler; public class PowerDisplay extends HudElementBase { private static int cachedCap = 0; private static int cachedTotal = 0; private static float cachedPercent = 0; private static int cachedProd = 0; private static int cachedCons = 0; public PowerDisplay() { super("cyberware:power"); setDefaultX(5); setDefaultY(5); setHeight(25); setWidth(101); } @Override public void renderElement(int x, int y, EntityPlayer p, ScaledResolution resolution, boolean hudjackAvailable, boolean isConfigOpen, float partialTicks) { if (!isHidden() && hudjackAvailable) { boolean flipHoriz = getHorizontalAnchor() == EnumAnchorHorizontal.RIGHT; float currTime = p.ticksExisted + partialTicks; GL11.glPushMatrix(); GlStateManager.enableBlend(); ICyberwareUserData data = CyberwareAPI.getCapability(p); Minecraft.getMinecraft().getTextureManager().bindTexture(HudHandler.HUD_TEXTURE); FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; if (p.ticksExisted % 20 == 0) { cachedPercent = data.getPercentFull(); cachedCap = data.getCapacity(); cachedTotal = data.getStoredPower(); cachedProd = data.getProduction(); cachedCons = data.getConsumption(); } float[] color = CyberwareAPI.getHUDColor(); int colorHex = CyberwareAPI.getHUDColorHex(); if (cachedPercent != -1) { int amount = Math.round((21F * cachedPercent)); boolean danger = (cachedPercent <= .2F); boolean superDanger = danger && (cachedPercent <= .05F); int xOffset = (danger ? 39 : 0); if (!superDanger || p.ticksExisted % 4 != 0) { int moveX = flipHoriz ? (x + getWidth() - 13) : x; GlStateManager.pushMatrix(); if (!danger) GlStateManager.color(color[0], color[1], color[2]); ClientUtils.drawTexturedModalRect(moveX, y, xOffset, 0, 13, 2 + (21 - amount)); ClientUtils.drawTexturedModalRect(moveX, y + 2 + (21 - amount), 13 + xOffset, 2 + (21 - amount), 13, amount + 2); ClientUtils.drawTexturedModalRect(moveX, y + 2 + (21 - amount), 26 + xOffset, 2 + (21 - amount), 13, amount + 2); GlStateManager.popMatrix(); String output = cachedTotal + " / " + cachedCap; int textX = flipHoriz ? x + getWidth() - 15 - fr.getStringWidth(output) : x + 15; fr.drawStringWithShadow(output, textX, y + 4, danger ? 0xFF0000 : colorHex); output = "-" + cachedCons + " / +" + cachedProd; textX = flipHoriz ? x + getWidth() - 15 - fr.getStringWidth(output) : x + 15; fr.drawStringWithShadow(output, textX, y + 14, danger ? 0xFF0000 : colorHex); } } GL11.glPopMatrix(); } } }