package pneumaticCraft.client.gui;
import java.awt.Point;
import java.util.List;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;
import pneumaticCraft.api.item.IPressurizable;
import pneumaticCraft.common.inventory.ContainerChargingStation;
import pneumaticCraft.common.item.IChargingStationGUIHolderItem;
import pneumaticCraft.common.tileentity.TileEntityChargingStation;
import pneumaticCraft.common.util.PneumaticCraftUtils;
import pneumaticCraft.lib.GuiConstants;
import pneumaticCraft.lib.PneumaticValues;
import pneumaticCraft.lib.Textures;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiChargingStation extends GuiPneumaticContainerBase<TileEntityChargingStation>{
private GuiButton guiSelectButton;
public GuiChargingStation(InventoryPlayer player, TileEntityChargingStation te){
super(new ContainerChargingStation(player, te), te, Textures.GUI_CHARGING_STATION_LOCATION);
}
@Override
public void initGui(){
super.initGui();
int xStart = (width - xSize) / 2;
int yStart = (height - ySize) / 2;
guiSelectButton = new GuiButton(1, xStart + 90, yStart + 15, 25, 20, "inv.");
buttonList.add(guiSelectButton);
}
@Override
protected void drawGuiContainerForegroundLayer(int x, int y){
super.drawGuiContainerForegroundLayer(x, y);
fontRendererObj.drawString("Upgr.", 46, 19, 4210752);
}
@Override
protected Point getInvTextOffset(){
return new Point(20, 0);
}
@Override
public String getRedstoneButtonText(int mode){
switch(mode){
case 0:
return "gui.tab.redstoneBehaviour.button.never";
case 1:
return "gui.tab.redstoneBehaviour.chargingStation.button.doneDischarging";
case 2:
return "gui.tab.redstoneBehaviour.chargingStation.button.charging";
case 3:
return "gui.tab.redstoneBehaviour.chargingStation.button.discharging";
}
return "<ERROR>";
}
@Override
protected void drawGuiContainerBackgroundLayer(float opacity, int x, int y){
super.drawGuiContainerBackgroundLayer(opacity, x, y);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
renderAir();
}
@Override
public void updateScreen(){
super.updateScreen();
guiSelectButton.enabled = te.getStackInSlot(TileEntityChargingStation.CHARGE_INVENTORY_INDEX) != null && te.getStackInSlot(TileEntityChargingStation.CHARGE_INVENTORY_INDEX).getItem() instanceof IChargingStationGUIHolderItem;
}
@Override
protected Point getGaugeLocation(){
int xStart = (width - xSize) / 2;
int yStart = (height - ySize) / 2;
return new Point(xStart + xSize * 3 / 4 + 10, yStart + ySize * 1 / 4 + 4);
}
@Override
protected void addPressureStatInfo(List<String> pressureStatText){
super.addPressureStatInfo(pressureStatText);
if(te.charging || te.disCharging) {
pressureStatText.add("\u00a77" + (te.charging ? "C" : "Disc") + "harging at");
pressureStatText.add("\u00a70" + (double)Math.round(PneumaticValues.CHARGING_STATION_CHARGE_RATE * te.getSpeedMultiplierFromUpgrades(te.getUpgradeSlots())) + "mL/tick");
}
}
@Override
protected void addProblems(List<String> textList){
super.addProblems(textList);
if(te.getStackInSlot(TileEntityChargingStation.CHARGE_INVENTORY_INDEX) == null) {
textList.add("\u00a77No items to (dis)charge");
textList.addAll(PneumaticCraftUtils.convertStringIntoList("\u00a70Put a pneumatic item in the charge slot.", GuiConstants.maxCharPerLineLeft));
} else if(!(te.getStackInSlot(TileEntityChargingStation.CHARGE_INVENTORY_INDEX).getItem() instanceof IPressurizable)) {
textList.addAll(PneumaticCraftUtils.convertStringIntoList("\u00a77The put in item can't be (dis)charged", GuiConstants.maxCharPerLineLeft));
textList.addAll(PneumaticCraftUtils.convertStringIntoList("\u00a70Put a pneumatic item in the charge slot.", GuiConstants.maxCharPerLineLeft));
} else {
ItemStack chargeStack = te.getStackInSlot(TileEntityChargingStation.CHARGE_INVENTORY_INDEX);
IPressurizable chargeItem = (IPressurizable)chargeStack.getItem();
if(chargeItem.getPressure(chargeStack) > te.getPressure(ForgeDirection.UNKNOWN) + 0.01F && chargeItem.getPressure(chargeStack) <= 0) {
textList.addAll(PneumaticCraftUtils.convertStringIntoList("\u00a77The put in item can't be discharged", GuiConstants.maxCharPerLineLeft));
textList.add("\u00a70The item is empty.");
} else if(chargeItem.getPressure(chargeStack) < te.getPressure(ForgeDirection.UNKNOWN) - 0.01F && chargeItem.getPressure(chargeStack) >= chargeItem.maxPressure(chargeStack)) {
textList.addAll(PneumaticCraftUtils.convertStringIntoList("\u00a77The put in item can't be charged", GuiConstants.maxCharPerLineLeft));
textList.add("\u00a70The item is full.");
} else if(!te.charging && !te.disCharging) {
textList.addAll(PneumaticCraftUtils.convertStringIntoList("\u00a77The put in item can't be (dis)charged", GuiConstants.maxCharPerLineLeft));
textList.add("\u00a70The pressures have equalized.");
}
}
}
private void renderAir(){
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glColor4d(1, 1, 1, 1);
GL11.glLineWidth(2.0F);
int particles = 10;
for(int i = 0; i < particles; i++) {
renderAirParticle(te.renderAirProgress % (1F / particles) + (float)i / particles);
}
GL11.glEnable(GL11.GL_TEXTURE_2D);
}
private void renderAirParticle(float particleProgress){
int xStart = (width - xSize) / 2;
int yStart = (height - ySize) / 2;
float x = xStart + 117F;
float y = yStart + 50.5F;
if(particleProgress < 0.5F) {
y += particleProgress * 56;
} else if(particleProgress < 0.7F) {
y += 28F;
x -= (particleProgress - 0.5F) * 90;
} else {
y += 28F;
x -= 18;
y -= (particleProgress - 0.7F) * 70;
}
Tessellator tess = Tessellator.instance;
tess.startDrawing(GL11.GL_LINES);
tess.addVertex(x, y, zLevel);
tess.addVertex(x, y + 1D, zLevel);
tess.draw();
}
}