package shedar.mods.ic2.nuclearcontrol.gui; import ic2.api.network.NetworkHelper; import ic2.core.IC2; import ic2.core.network.NetworkManager; import java.util.List; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; 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.IC2NuclearControl; import shedar.mods.ic2.nuclearcontrol.api.IAdvancedCardSettings; import shedar.mods.ic2.nuclearcontrol.api.ICardGui; import shedar.mods.ic2.nuclearcontrol.api.ICardSettingsWrapper; import shedar.mods.ic2.nuclearcontrol.api.ICardWrapper; import shedar.mods.ic2.nuclearcontrol.api.IPanelDataSource; import shedar.mods.ic2.nuclearcontrol.api.IPanelMultiCard; import shedar.mods.ic2.nuclearcontrol.api.PanelSetting; import shedar.mods.ic2.nuclearcontrol.gui.controls.GuiInfoPanelCheckBox; import shedar.mods.ic2.nuclearcontrol.gui.controls.IconButton; import shedar.mods.ic2.nuclearcontrol.panel.CardSettingsWrapperImpl; import shedar.mods.ic2.nuclearcontrol.panel.CardWrapperImpl; import shedar.mods.ic2.nuclearcontrol.tileentities.TileEntityAdvancedInfoPanel; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class GuiAdvancedInfoPanel extends GuiInfoPanel{ private static final String TEXTURE_FILE = "nuclearcontrol:textures/gui/GUIAdvancedInfoPanel.png"; private static final ResourceLocation TEXTURE_LOCATION = new ResourceLocation(TEXTURE_FILE); private static final int ID_LABELS = 1; private static final int ID_SLOPE = 2; private static final int ID_COLORS = 3; private static final int ID_POWER = 4; private static final int ID_SETTINGS = 5; private byte activeTab; private boolean initialized; public GuiAdvancedInfoPanel(Container container){ super(container); ySize = 212; activeTab = 0; initialized = false; name = StatCollector.translateToLocal("tile.blockAdvancedInfoPanel.name"); isColored = this.container.panel.getColored(); } @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); drawTexturedModalRect(left + 24, top + 62 + activeTab * 14, 182, 0, 1, 15); } @Override protected void drawGuiContainerForegroundLayer(int par1, int par2) { super.drawGuiContainerForegroundLayer(par1, par2); } @SuppressWarnings("unchecked") @Override protected void initControls() { ItemStack card = getActiveCard(); if ((card == null && prevCard == null && initialized) || (card!=null && card.equals(prevCard))) return; initialized = true; int h = fontRendererObj.FONT_HEIGHT + 1; buttonList.clear(); prevCard = card; //labels buttonList.add(new IconButton(ID_LABELS, guiLeft + 83 , guiTop + 42, 16, 16, TEXTURE_LOCATION, 192-16, getIconLabelsTopOffset(container.panel.getShowLabels()))); //slope buttonList.add(new IconButton(ID_SLOPE, guiLeft + 83 + 17*1, guiTop + 42, 16, 16, TEXTURE_LOCATION, 192, 15)); //colors buttonList.add(new IconButton(ID_COLORS, guiLeft + 83 + 17*2, guiTop + 42, 16, 16, TEXTURE_LOCATION, 192, 15 + 16)); //power buttonList.add(new IconButton(ID_POWER, guiLeft + 83 + 17*3, guiTop + 42, 16, 16, TEXTURE_LOCATION, 192-16, getIconPowerTopOffset(((TileEntityAdvancedInfoPanel)container.panel).getPowerMode()))); if (card != null && card.getItem() instanceof IPanelDataSource) { byte slot = container.panel.getIndexOfCard(card); IPanelDataSource source = (IPanelDataSource)card.getItem(); if (source instanceof IAdvancedCardSettings) { //settings buttonList.add(new IconButton(ID_SETTINGS, guiLeft + 83 + 17*4, guiTop + 42, 16, 16, TEXTURE_LOCATION, 192, 15 + 16*2)); } int row = 0; List<PanelSetting> settingsList = null; if (card.getItem() instanceof IPanelMultiCard) { settingsList = ((IPanelMultiCard)source).getSettingsList(new CardWrapperImpl(card, activeTab)); } else { settingsList = source.getSettingsList(); } if (settingsList != null) for (PanelSetting panelSetting : settingsList) { buttonList.add(new GuiInfoPanelCheckBox(0, guiLeft + 32, guiTop + 60 + h*row, panelSetting, container.panel, slot, fontRendererObj)); row++; } if (!modified) { textboxTitle = new GuiTextField(fontRendererObj, 7, 16, 162, 18); textboxTitle.setFocused(true); textboxTitle.setText(new CardWrapperImpl(card, activeTab).getTitle()); } } else { modified = false; textboxTitle = null; } } @Override protected ItemStack getActiveCard() { return container.panel.getCards().get(activeTab); } @Override public void setWorldAndResolution(net.minecraft.client.Minecraft par1Minecraft, int par2, int par3) { initialized = false; super.setWorldAndResolution(par1Minecraft, par2, par3); } private int getIconLabelsTopOffset(boolean checked) { return checked?15:31; } private int getIconPowerTopOffset(byte mode) { switch (mode) { case TileEntityAdvancedInfoPanel.POWER_REDSTONE: return 15 + 16*2; case TileEntityAdvancedInfoPanel.POWER_INVERTED: return 15 + 16*3; case TileEntityAdvancedInfoPanel.POWER_ON: return 15 + 16*4; case TileEntityAdvancedInfoPanel.POWER_OFF: return 15 + 16*5; } return 15 + 16*2; } @Override protected void actionPerformed(GuiButton button){ switch(button.id){ case ID_COLORS: GuiScreen colorGui = new GuiScreenColor(this, container.panel); mc.displayGuiScreen(colorGui); break; case ID_SETTINGS: ItemStack card = getActiveCard(); if (card == null) return; if (card != null && card.getItem() instanceof IAdvancedCardSettings){ ICardWrapper helper = new CardWrapperImpl(card, activeTab); Object guiObject = ((IAdvancedCardSettings)card.getItem()).getSettingsScreen(helper); if (!(guiObject instanceof GuiScreen)){ IC2NuclearControl.logger.warn("Invalid card, getSettingsScreen method should return GuiScreen object"); return; } GuiScreen gui = (GuiScreen)guiObject; ICardSettingsWrapper wrapper = new CardSettingsWrapperImpl(card, container.panel, this, activeTab); ((ICardGui)gui).setCardSettingsHelper(wrapper); mc.displayGuiScreen(gui); } break; case ID_LABELS: boolean checked = !container.panel.getShowLabels(); if (button instanceof IconButton){ IconButton iButton = (IconButton)button; iButton.textureTop = getIconLabelsTopOffset(checked); } int value = checked ? -1 : -2; container.panel.setShowLabels(checked); ((NetworkManager)IC2.network.get()).initiateClientTileEntityEvent(container.panel, value); break; case ID_POWER: byte mode = ((TileEntityAdvancedInfoPanel)container.panel).getNextPowerMode(); if(button instanceof IconButton){ IconButton iButton = (IconButton)button; iButton.textureTop = getIconPowerTopOffset(mode); } ((NetworkManager)IC2.network.get()).initiateClientTileEntityEvent(container.panel, mode); break; case ID_SLOPE: GuiPanelSlope slopeGui = new GuiPanelSlope(this, (TileEntityAdvancedInfoPanel)container.panel); mc.displayGuiScreen(slopeGui); break; } } @Override protected void mouseClicked(int x, int y, int par3) { super.mouseClicked(x, y, par3); if (x >= guiLeft+7 && x <= guiLeft + 24 && y >= guiTop + 62 && y <= guiTop + 104) { byte newTab = (byte) ((y - guiTop - 62) / 14); if (newTab > 2) newTab = 2; if (newTab != activeTab && modified) updateTitle(); activeTab = newTab; } } }