package crazypants.enderio.machine.transceiver.gui; import java.util.ArrayList; import java.util.List; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.player.InventoryPlayer; import org.lwjgl.opengl.GL11; import com.enderio.core.api.client.gui.IGuiOverlay; import com.enderio.core.api.client.gui.ITabPanel; import com.enderio.core.api.client.render.IWidgetIcon; import com.enderio.core.client.render.RenderUtil; import cpw.mods.fml.common.Optional; import crazypants.enderio.config.Config; import crazypants.enderio.gui.IconEIO; import crazypants.enderio.machine.gui.GuiPoweredMachineBase; import crazypants.enderio.machine.transceiver.ChannelType; import crazypants.enderio.machine.transceiver.TileTransceiver; public class GuiTransceiver extends GuiPoweredMachineBase<TileTransceiver> { private static final int TAB_HEIGHT = 24; private int activeTab = 0; private final List<ITabPanel> tabs = new ArrayList<ITabPanel>(); private final int tabYOffset = 4; GeneralTab generalTab; public GuiTransceiver(InventoryPlayer par1InventoryPlayer, TileTransceiver te) { super(te, new ContainerTransceiver(par1InventoryPlayer, te), "transceiver", "itemFilter"); generalTab = new GeneralTab(this); tabs.add(generalTab); FilterTab filterTab = new FilterTab(this); tabs.add(filterTab); tabs.add(new ChannelTab(this, ChannelType.POWER)); tabs.add(new ChannelTab(this, ChannelType.ITEM)); tabs.add(new ChannelTab(this, ChannelType.FLUID)); if(Config.enderRailEnabled) { tabs.add(new ChannelTab(this, ChannelType.RAIL)); } } @Override protected void updatePowerBarTooltip(List<String> text) { generalTab.updatePowerBarTooltip(text); } @Override protected boolean showRecipeButton() { return false; } @Override public int getXSize() { return ContainerTransceiver.GUI_WIDTH; } @Override public void updateScreen() { for (int i = 0; i < tabs.size(); i++) { if(i == activeTab) { tabs.get(i).updateScreen(); return; } } } @Override protected void keyTyped(char par1, int par2) { if(par2 == 1) { for (IGuiOverlay overlay : overlays) { if(overlay.isVisible()) { overlay.setVisible(false); return; } } mc.thePlayer.closeScreen(); } for (int i = 0; i < tabs.size(); i++) { if(i == activeTab) { tabs.get(i).keyTyped(par1, par2); return; } } } @Override public void initGui() { super.initGui(); for (int i = 0; i < tabs.size(); i++) { if(i != activeTab) { tabs.get(i).deactivate(); } } ghostSlots.clear(); for (int i = 0; i < tabs.size(); i++) { if(i == activeTab) { tabs.get(i).onGuiInit(guiLeft + 10, guiTop, xSize - 20, ySize - 20); } } configB.visible = activeTab == 0; redstoneButton.visible = activeTab == 0; } @Override public void renderPowerBar(int k, int l) { //super.renderPowerBar(k, l); } @Override protected boolean renderPowerBar() { return activeTab == 0; } @Override public int getPowerX() { return super.getPowerX() - 4; } @Override public int getPowerHeight() { return 58; } @Override public int getPowerY() { return super.getPowerY(); } @Override public int getPowerWidth() { return POWER_WIDTH; } @Override public int getPowerV() { return 196; } @Override public int getPowerU() { return 246; } @Override public String getPowerOutputLabel() { return super.getPowerOutputLabel(); } @Override public int getPowerOutputValue() { return super.getPowerOutputValue(); } @Override protected void mouseClicked(int x, int y, int par3) { super.mouseClicked(x, y, par3); int tabLeftX = xSize; int tabRightX = tabLeftX + 22; int minY = tabYOffset; int maxY = minY + (tabs.size() * TAB_HEIGHT); x = (x - guiLeft); y = (y - guiTop); if(x > tabLeftX && x < tabRightX + 24) { if(y > minY && y < maxY) { activeTab = (y - minY) / 24; hideOverlays(); initGui(); return; } } tabs.get(activeTab).mouseClicked(x, y, par3); } @Override protected void actionPerformed(GuiButton guiButton) { super.actionPerformed(guiButton); tabs.get(activeTab).actionPerformed(guiButton); } @Override protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); int sx = (width - xSize) / 2; int sy = (height - ySize) / 2; int tabX = sx + xSize - 3; Tessellator tes = Tessellator.instance; tes.startDrawingQuads(); for (int i = 0; i < tabs.size(); i++) { if(i != activeTab) { RenderUtil.bindTexture(IconEIO.TEXTURE); IconEIO.map.render(IconEIO.INACTIVE_TAB, tabX, sy + tabYOffset + (i * 24)); IWidgetIcon icon = tabs.get(i).getIcon(); icon.getMap().render(icon, tabX + 4, sy + tabYOffset + (i * TAB_HEIGHT) + 6, 11, 11, 0, false); } } tes.draw(); bindGuiTexture(); drawTexturedModalRect(sx, sy, 0, 0, xSize, ySize); super.drawGuiContainerBackgroundLayer(par1, par2, par3); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); RenderUtil.bindTexture(IconEIO.TEXTURE); tes.startDrawingQuads(); IconEIO.map.render(IconEIO.ACTIVE_TAB, tabX, sy + tabYOffset + (activeTab * TAB_HEIGHT)); if(tabs.size() > 0) { IWidgetIcon icon = tabs.get(activeTab).getIcon(); icon.getMap().render(icon, tabX - 1, sy + tabYOffset + (activeTab * TAB_HEIGHT) + 4); tes.draw(); tabs.get(activeTab).render(par1, par2, par3); } else { tes.draw(); } } public TileTransceiver getTransciever() { return getTileEntity(); } public ContainerTransceiver getContainer() { return (ContainerTransceiver) inventorySlots; } @Override @Optional.Method(modid = "NotEnoughItems") public boolean hideItemPanelSlot(GuiContainer gc, int x, int y, int w, int h) { if(tabs.size() > 0) { int sx = (width - xSize) / 2; int sy = (height - ySize) / 2; int tabX = sx + xSize - 3; int tabY = sy + tabYOffset; return (x+w) >= tabX && x < (tabX + 14) && (y+h) >= tabY && y < (tabY + tabs.size()*TAB_HEIGHT); } return false; } }