package shedar.mods.ic2.nuclearcontrol.gui;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StatCollector;
import org.lwjgl.opengl.GL11;
import shedar.mods.ic2.nuclearcontrol.containers.ContainerRangeTrigger;
import shedar.mods.ic2.nuclearcontrol.gui.controls.CompactButton;
import shedar.mods.ic2.nuclearcontrol.gui.controls.GuiRangeTriggerInvertRedstone;
import shedar.mods.ic2.nuclearcontrol.tileentities.TileEntityRangeTrigger;
import shedar.mods.ic2.nuclearcontrol.utils.NuclearNetworkHelper;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiRangeTrigger extends GuiContainer {
private static final String TEXTURE_FILE = "nuclearcontrol:textures/gui/GUIRangeTrigger.png";
private static final ResourceLocation TEXTURE_LOCATION = new ResourceLocation(TEXTURE_FILE);
private String name;
private ContainerRangeTrigger container;
private ItemStack prevCard;
public GuiRangeTrigger(Container container){
super(container);
ySize = 190;
this.container = (ContainerRangeTrigger) container;
name = StatCollector.translateToLocal("tile.blockRangeTrigger.name");
}
@SuppressWarnings("unchecked")
private void initControls() {
ItemStack card = container.getSlot(TileEntityRangeTrigger.SLOT_CARD).getStack();
if (card != null && card.equals(prevCard))
return;
buttonList.clear();
prevCard = card;
// ten digits, up to 10 billions
for (int i = 0; i < 10; i++) {
buttonList.add(new CompactButton(i * 10, guiLeft + 30 + i * 12 + (i + 2) / 3 * 6, guiTop + 20, 12, 12, "-"));
buttonList.add(new CompactButton(i * 10 + 1, guiLeft + 30 + i * 12 + (i + 2) / 3 * 6, guiTop + 42, 12, 12, "+"));
}
for (int i = 0; i < 10; i++) {
buttonList.add(new CompactButton(100 + i * 10, guiLeft + 30 + i * 12 + (i + 2) / 3 * 6, guiTop + 57, 12, 12, "-"));
buttonList.add(new CompactButton(100 + i * 10 + 1, guiLeft + 30 + i * 12 + (i + 2) / 3 * 6, guiTop + 79, 12, 12, "+"));
}
buttonList.add(new GuiRangeTriggerInvertRedstone(10, guiLeft + 8, guiTop + 62, container.trigger));
}
@Override
public void initGui(){
super.initGui();
initControls();
}
private void renderValue(double value, int x, int y){
x += 114;
for (int i = 0; i < 10; i++) {
byte digit = (byte) (value % 10);
String str = Byte.toString(digit);
fontRendererObj.drawString(str, x - 12 * i - fontRendererObj.getCharWidth(str.charAt(0)) / 2 + (9 - i + 2) / 3 * 6, y, 0x404040);
value /= 10;
}
}
@Override
protected void actionPerformed(GuiButton button) {
int id = button.id;
boolean isPlus = id % 2 == 1;
id /= 10;
int power = 9 - (id % 10);
id /= 10;
boolean isEnd = id % 2 == 1;
double initValue = isEnd ? container.trigger.levelEnd : container.trigger.levelStart;
double newValue = initValue;
double delta = (long) Math.pow(10, power);
double digit = (initValue / delta) % 10;
if (isPlus && digit < 9)
newValue += delta;
else if (!isPlus && digit > 0)
newValue -= delta;
if (newValue != initValue) {
TileEntityRangeTrigger trigger = container.trigger;
NuclearNetworkHelper.setRangeTrigger(trigger.xCoord, trigger.yCoord, trigger.zCoord, newValue, isEnd);
if (isEnd)
trigger.setLevelEnd(newValue);
else
trigger.setLevelStart(newValue);
}
}
@Override
protected void drawGuiContainerForegroundLayer(int par1, int par2) {
fontRendererObj.drawString(name, (xSize - fontRendererObj.getStringWidth(name)) / 2, 6, 0x404040);
fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, (ySize - 96) + 2, 0x404040);
renderValue(container.trigger.levelStart, 30, 33);
renderValue(container.trigger.levelEnd, 30, 70);
}
@Override
protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
mc.renderEngine.bindTexture(TEXTURE_LOCATION);
int left = (width - xSize) / 2;
int top = (height - ySize) / 2;
drawTexturedModalRect(left, top, 0, 0, xSize, ySize);
}
}