package crazypants.enderio.conduit.gui.item;
import java.awt.Rectangle;
import java.util.List;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.item.ItemStack;
import org.lwjgl.opengl.GL11;
import com.enderio.core.api.client.gui.IGuiOverlay;
import com.enderio.core.api.client.gui.IGuiScreen;
import com.enderio.core.client.gui.button.IconButton;
import com.enderio.core.client.gui.button.ToggleButton;
import com.enderio.core.client.render.RenderUtil;
import com.enderio.core.common.vecmath.Vector4f;
import crazypants.enderio.EnderIO;
import crazypants.enderio.conduit.gui.GuiExternalConnection;
import crazypants.enderio.conduit.item.IItemConduit;
import crazypants.enderio.conduit.item.filter.ExistingItemFilter;
import crazypants.enderio.conduit.packet.PacketItemConduitFilter;
import crazypants.enderio.gui.IconEIO;
import crazypants.enderio.network.PacketHandler;
public class ExistingItemFilterGui implements IItemFilterGui {
private static final int ID_NBT = GuiExternalConnection.nextButtonId();
private static final int ID_META = GuiExternalConnection.nextButtonId();
private static final int ID_ORE_DICT = GuiExternalConnection.nextButtonId();
private static final int ID_STICKY = GuiExternalConnection.nextButtonId();
private static final int ID_SNAPSHOT = GuiExternalConnection.nextButtonId();
private static final int ID_CLEAR = GuiExternalConnection.nextButtonId();
private static final int ID_SHOW = GuiExternalConnection.nextButtonId();
private static final int ID_MERGE = GuiExternalConnection.nextButtonId();
private IItemConduit itemConduit;
private GuiExternalConnection gui;
private ToggleButton useMetaB;
private ToggleButton useNbtB;
private ToggleButton useOreDictB;
private ToggleButton stickyB;
private final IconButton whiteListB;
private GuiButton snapshotB;
private GuiButton clearB;
private GuiButton showB;
private GuiButton mergeB;
private SnapshotOverlay snapshotOverlay;
boolean isInput;
private ExistingItemFilter filter;
public ExistingItemFilterGui(GuiExternalConnection gui, IItemConduit itemConduit, boolean isInput) {
this.gui = gui;
this.itemConduit = itemConduit;
this.isInput = isInput;
if(isInput) {
filter = (ExistingItemFilter) itemConduit.getInputFilter(gui.getDir());
} else {
filter = (ExistingItemFilter) itemConduit.getOutputFilter(gui.getDir());
}
int butLeft = 37;
int x = butLeft;
int y = 68;
useMetaB = new ToggleButton(gui, ID_META, x, y, IconEIO.FILTER_META_OFF, IconEIO.FILTER_META);
useMetaB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.matchMetaData"));
useMetaB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.ignoreMetaData"));
useMetaB.setPaintSelectedBorder(false);
x += 20;
stickyB = new ToggleButton(gui, ID_STICKY, x, y, IconEIO.FILTER_STICKY_OFF, IconEIO.FILTER_STICKY);
String[] lines = EnderIO.lang.localizeList("gui.conduit.item.stickyEnabled");
stickyB.setSelectedToolTip(lines);
stickyB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.stickyDisbaled"));
stickyB.setPaintSelectedBorder(false);
y += 20;
x = butLeft;
x += 20;
useNbtB = new ToggleButton(gui, ID_NBT, x, y, IconEIO.FILTER_NBT_OFF, IconEIO.FILTER_NBT);
useNbtB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.matchNBT"));
useNbtB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.ignoreNBT"));
useNbtB.setPaintSelectedBorder(false);
x = butLeft;
useOreDictB = new ToggleButton(gui, ID_ORE_DICT, x, y, IconEIO.FILTER_ORE_DICT_OFF, IconEIO.FILTER_ORE_DICT);
useOreDictB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.oreDicEnabled"));
useOreDictB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.oreDicDisabled"));
useOreDictB.setPaintSelectedBorder(false);
snapshotB = new GuiButton(ID_SNAPSHOT, 0, 0, 60, 20, EnderIO.lang.localize("gui.conduit.button.snap"));
mergeB = new GuiButton(ID_MERGE, 0, 0, 40, 20, EnderIO.lang.localize("gui.conduit.button.merge"));
clearB = new GuiButton(ID_CLEAR, 0, 0, 60, 20, EnderIO.lang.localize("gui.conduit.button.clear"));
showB = new GuiButton(ID_SHOW, 0, 0, 40, 20, EnderIO.lang.localize("gui.conduit.button.show"));
x -= 20;
whiteListB = new IconButton(gui, -1, x, y, IconEIO.FILTER_WHITELIST);
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist"));
snapshotOverlay = new SnapshotOverlay();
gui.addOverlay(snapshotOverlay);
}
@Override
public void mouseClicked(int x, int y, int par3) {
}
@Override
public void updateButtons() {
ExistingItemFilter activeFilter = filter;
useNbtB.onGuiInit();
useNbtB.setSelected(activeFilter.isMatchNBT());
useOreDictB.onGuiInit();
useOreDictB.setSelected(activeFilter.isUseOreDict());
if(!isInput) {
stickyB.onGuiInit();
stickyB.setSelected(activeFilter.isSticky());
}
useMetaB.onGuiInit();
useMetaB.setSelected(activeFilter.isMatchMeta());
whiteListB.onGuiInit();
if (filter.isBlacklist()) {
whiteListB.setIcon(IconEIO.FILTER_BLACKLIST);
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.blacklist"));
} else {
whiteListB.setIcon(IconEIO.FILTER_WHITELIST);
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist"));
}
int x0 = gui.getGuiLeft() + 80;
int y0 = gui.getGuiTop() + 65;
int x1 = x0 + 65;
int y1 = y0 + 22;
snapshotB.xPosition = x0;
snapshotB.yPosition = y0;
mergeB.xPosition = x1;
mergeB.yPosition = y0;
clearB.xPosition = x0;
clearB.yPosition = y1;
showB.xPosition = x1;
showB.yPosition = y1;
clearB.enabled = filter.getSnapshot() != null;
showB.enabled = clearB.enabled;
mergeB.enabled = filter.getSnapshot() != null;
gui.addButton(snapshotB);
gui.addButton(clearB);
gui.addButton(showB);
gui.addButton(mergeB);
}
@Override
public void actionPerformed(GuiButton guiButton) {
if(guiButton.id == ID_META) {
filter.setMatchMeta(useMetaB.isSelected());
sendFilterChange();
} else if(guiButton.id == ID_NBT) {
filter.setMatchNBT(useNbtB.isSelected());
sendFilterChange();
} else if(guiButton.id == ID_STICKY) {
filter.setSticky(stickyB.isSelected());
sendFilterChange();
} else if(guiButton.id == ID_ORE_DICT) {
filter.setUseOreDict(useOreDictB.isSelected());
sendFilterChange();
} else if(guiButton.id == ID_SNAPSHOT) {
sendSnapshotPacket(PacketExistingItemFilterSnapshot.Opcode.SET);
} else if(guiButton.id == ID_CLEAR) {
sendSnapshotPacket(PacketExistingItemFilterSnapshot.Opcode.CLEAR);
} else if(guiButton.id == ID_MERGE) {
sendSnapshotPacket(PacketExistingItemFilterSnapshot.Opcode.MERGE);
} else if(guiButton.id == ID_SHOW) {
showSnapshotOverlay();
} else if (guiButton == whiteListB) {
filter.setBlacklist(!filter.isBlacklist());
sendSnapshotPacket(filter.isBlacklist() ? PacketExistingItemFilterSnapshot.Opcode.SET_BLACK
: PacketExistingItemFilterSnapshot.Opcode.UNSET_BLACK);
}
}
private void showSnapshotOverlay() {
snapshotOverlay.setVisible(true);
}
private void sendSnapshotPacket(PacketExistingItemFilterSnapshot.Opcode opcode) {
PacketHandler.INSTANCE.sendToServer(new PacketExistingItemFilterSnapshot(itemConduit, gui.getDir(),isInput,opcode));
}
private void sendFilterChange() {
updateButtons();
PacketHandler.INSTANCE.sendToServer(new PacketItemConduitFilter(itemConduit, gui.getDir()));
}
@Override
public void deactivate() {
useNbtB.detach();
useMetaB.detach();
useOreDictB.detach();
stickyB.detach();
whiteListB.detach();
gui.removeButton(snapshotB);
gui.removeButton(clearB);
gui.removeButton(showB);
gui.removeButton(mergeB);
}
@Override
public void renderCustomOptions(int top, float par1, int par2, int par3) {
// GL11.glColor3f(1, 1, 1);
// RenderUtil.bindTexture("enderio:textures/gui/itemFilter.png");
// gui.drawTexturedModalRect(gui.getGuiLeft() + 32, gui.getGuiTop() + 68, 0, 238, 18 * 5, 18);
// if(filter.isAdvanced()) {
// gui.drawTexturedModalRect(gui.getGuiLeft() + 32, gui.getGuiTop() + 86, 0, 238, 18 * 5, 18);
// }
}
class SnapshotOverlay implements IGuiOverlay {
boolean visible;
@Override
public void init(IGuiScreen screen) {
}
@Override
public Rectangle getBounds() {
return new Rectangle(0,0,gui.width,gui.height);
}
@Override
public void draw(int mouseX, int mouseY, float partialTick) {
RenderHelper.enableGUIStandardItemLighting();
GL11.glEnable(GL11.GL_BLEND);
RenderUtil.renderQuad2D(4, 4, 0, gui.getXSize() - 9, gui.getYSize() - 8, new Vector4f(0,0,0,1));
RenderUtil.renderQuad2D(6, 6, 0, gui.getXSize() - 13, gui.getYSize() - 12, new Vector4f(0.6,0.6,0.6,1));
Minecraft mc = Minecraft.getMinecraft();
RenderItem itemRenderer = new RenderItem();
GL11.glEnable(GL11.GL_DEPTH_TEST);
List<ItemStack> snapshot = filter.getSnapshot();
int x = 15;
int y = 10;
int count = 0;
for(ItemStack st : snapshot) {
if(st != null) {
itemRenderer.renderItemAndEffectIntoGUI(mc.fontRenderer, mc.getTextureManager(), st, x, y);
//itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, mc.getTextureManager(), st, x, y, s);
}
x += 20;
count++;
if(count % 9 == 0) {
x = 15;
y += 20;
}
}
}
@Override
public void setVisible(boolean visible) {
this.visible = visible;
}
@Override
public boolean isVisible() {
return visible;
}
@Override
public boolean handleMouseInput(int x, int y, int b) {
return true;
}
@Override
public boolean isMouseInBounds(int mouseX, int mouseY) {
return getBounds().contains(mouseX, mouseY);
}
}
}