package crazypants.enderio.machine.generator.stirling;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.text.MessageFormat;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.util.EnumChatFormatting;
import org.lwjgl.opengl.GL11;
import com.enderio.core.client.gui.widget.GuiToolTip;
import com.enderio.core.client.render.ColorUtil;
import com.enderio.core.client.render.RenderUtil;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.EnderIO;
import crazypants.enderio.config.Config;
import crazypants.enderio.machine.gui.GuiPoweredMachineBase;
import crazypants.enderio.machine.power.PowerDisplayUtil;
import crazypants.enderio.power.Capacitors;
@SideOnly(Side.CLIENT)
public class GuiStirlingGenerator extends GuiPoweredMachineBase<TileEntityStirlingGenerator> {
public GuiStirlingGenerator(InventoryPlayer par1InventoryPlayer, TileEntityStirlingGenerator te) {
super(te, new StirlingGeneratorContainer(par1InventoryPlayer, te), "stirlingGenerator");
final StirlingGeneratorContainer c = (StirlingGeneratorContainer)inventorySlots;
Rectangle r = new Rectangle(c.getUpgradeOffset(), new Dimension(16, 16));
MessageFormat fmt = new MessageFormat(EnderIO.lang.localize("stirlingGenerator.upgrades"));
ttMan.addToolTip(new GuiToolTip(r,
EnderIO.lang.localize("stirlingGenerator.upgradeslot"),
formatUpgrade(fmt, Capacitors.ACTIVATED_CAPACITOR),
formatUpgrade(fmt, Capacitors.ENDER_CAPACITOR)) {
@Override
public boolean shouldDraw() {
return !c.getUpgradeSlot().getHasStack() && super.shouldDraw();
}
});
addProgressTooltip(80, 52, 14, 14);
}
private static float getFactor(Capacitors upgrade) {
return TileEntityStirlingGenerator.getEnergyMultiplier(upgrade) *
TileEntityStirlingGenerator.getBurnTimeMultiplier(upgrade);
}
private static String formatUpgrade(MessageFormat fmt, Capacitors upgrade) {
float efficiency = getFactor(upgrade) / getFactor(Capacitors.BASIC_CAPACITOR);
Object[] args = new Object[] {
EnderIO.lang.localizeExact(upgrade.unlocalisedName.concat(".name")),
efficiency,
EnumChatFormatting.WHITE,
EnumChatFormatting.GRAY
};
return fmt.format(args, new StringBuffer(), null).toString();
}
@Override
protected boolean showRecipeButton() {
return false;
}
@Override
protected String formatProgressTooltip(int scaledProgress, float remaining) {
int totalBurnTime = getTileEntity().totalBurnTime;
int remainingTicks = (int)(remaining * totalBurnTime);
int remainingSecs = remainingTicks / 20;
int remainingRF = getTileEntity().getPowerUsePerTick() * remainingTicks;
return MessageFormat.format(EnderIO.lang.localize("stirlingGenerator.remaining"),
remaining, remainingSecs / 60, remainingSecs % 60, remainingRF);
}
@Override
protected int scaleProgressForTooltip(float progress) {
int totalBurnTime = getTileEntity().totalBurnTime;
int scale = Math.max(100, (totalBurnTime+19)/20);
return (int)(progress * scale);
}
@Override
protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
bindGuiTexture();
int sx = (width - xSize) / 2;
int sy = (height - ySize) / 2;
drawTexturedModalRect(sx, sy, 0, 0, this.xSize, this.ySize);
int scaled;
if(shouldRenderProgress()) {
scaled = getProgressScaled(12);
drawTexturedModalRect(sx + 80, sy + 64 - scaled, 176, 12 - scaled, 14, scaled + 2);
}
super.drawGuiContainerBackgroundLayer(par1, par2, par3);
FontRenderer fr = getFontRenderer();
int y = guiTop + fr.FONT_HEIGHT / 2 + 3;
int output = 0;
if(getTileEntity().isActive()) {
output = getTileEntity().getPowerUsePerTick();
}
String txt = EnderIO.lang.localize("stirlingGenerator.output") + " " + PowerDisplayUtil.formatPower(output) + " " + PowerDisplayUtil.abrevation()
+ PowerDisplayUtil.perTickStr();
int sw = fr.getStringWidth(txt);
fr.drawStringWithShadow(txt, guiLeft + xSize / 2 - sw / 2, y, ColorUtil.getRGB(Color.WHITE));
txt = String.format("%s %d%%", EnderIO.lang.localize("stirlingGenerator.burnRate"),
Math.round(getTileEntity().getBurnTimeMultiplier() / Config.stirlingGeneratorBurnTimeMultiplierT1 * 100));
sw = fr.getStringWidth(txt);
y += fr.FONT_HEIGHT + 3;
fr.drawStringWithShadow(txt, guiLeft + xSize / 2 - sw / 2, y, ColorUtil.getRGB(Color.WHITE));
}
}