package buildcraftAdditions.client.gui; import buildcraftAdditions.api.configurableOutput.IConfigurableOutput; import buildcraftAdditions.client.gui.widgets.WidgetBase; import buildcraftAdditions.client.gui.widgets.WidgetButtonText; import buildcraftAdditions.client.gui.widgets.WidgetImage; import buildcraftAdditions.inventories.containers.ContainerMachineConfigurator; import buildcraftAdditions.networking.MessageConfiguration; import buildcraftAdditions.networking.PacketHandler; import buildcraftAdditions.reference.enums.EnumMachineUpgrades; import buildcraftAdditions.tileEntities.interfaces.IUpgradableMachine; import buildcraftAdditions.utils.Utils; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.ForgeDirection; /** * Copyright (c) 2014-2015, AEnterprise * http://buildcraftadditions.wordpress.com/ * Buildcraft Additions is distributed under the terms of GNU GPL v3.0 * Please check the contents of the license located in * http://buildcraftadditions.wordpress.com/wiki/licensing-stuff/ */ @SideOnly(Side.CLIENT) public class GuiMachineConfigurator extends GuiBase { private static final ResourceLocation texture = new ResourceLocation("bcadditions:textures/gui/guiMachineConfigurator.png"); private final IConfigurableOutput configurableOutput; private final IUpgradableMachine upgradableMachine; private final boolean configurable, upgradable; private WidgetButtonText northConfiguration, eastConfiguration, southConfiguration, westConfiguration, upConfiguration, downConfiguration; private WidgetButtonText northPriority, eastPriority, southPriority, westPriority, upPriority, downPriority, toggleMode; private WidgetImage upgrades[]; private boolean configurationMode; public GuiMachineConfigurator(EntityPlayer player, TileEntity entity) { super(new ContainerMachineConfigurator(player, entity)); if (entity instanceof IConfigurableOutput) { configurableOutput = (IConfigurableOutput) entity; configurable = true; } else { configurableOutput = null; configurable = false; } if (entity instanceof IUpgradableMachine) { upgradableMachine = (IUpgradableMachine) entity; upgradable = true; } else { upgradableMachine = null; upgradable = false; } configurationMode = configurable; setCenterTitle(true); } @Override public ResourceLocation texture() { return texture; } @Override public int getXSize() { return 224; } @Override public int getYSize() { return 165; } @Override public String getInventoryName() { return "machineConfigurator"; } @Override public void initialize() { toggleMode = new WidgetButtonText(30, guiLeft + 40, guiTop + 145, 140, 15, this).setText(configurationMode ? Utils.localize("gui.configureIO") : Utils.localize("gui.showUpgrades")); if (configurationMode) { northConfiguration = new WidgetButtonText(2, guiLeft + 45, guiTop + 26, 60, 15, this); eastConfiguration = new WidgetButtonText(5, guiLeft + 45, guiTop + 46, 60, 15, this); southConfiguration = new WidgetButtonText(3, guiLeft + 45, guiTop + 66, 60, 15, this); westConfiguration = new WidgetButtonText(4, guiLeft + 45, guiTop + 86, 60, 15, this); upConfiguration = new WidgetButtonText(1, guiLeft + 45, guiTop + 106, 60, 15, this); downConfiguration = new WidgetButtonText(0, guiLeft + 45, guiTop + 126, 60, 15, this); northPriority = new WidgetButtonText(8, guiLeft + 158, guiTop + 26, 62, 15, this); eastPriority = new WidgetButtonText(11, guiLeft + 158, guiTop + 46, 62, 15, this); southPriority = new WidgetButtonText(9, guiLeft + 158, guiTop + 66, 62, 15, this); westPriority = new WidgetButtonText(10, guiLeft + 158, guiTop + 86, 62, 15, this); upPriority = new WidgetButtonText(7, guiLeft + 158, guiTop + 106, 62, 15, this); downPriority = new WidgetButtonText(6, guiLeft + 158, guiTop + 126, 62, 15, this); addWidget(downConfiguration); addWidget(upConfiguration); addWidget(northConfiguration); addWidget(southConfiguration); addWidget(westConfiguration); addWidget(eastConfiguration); addWidget(downPriority); addWidget(upPriority); addWidget(northPriority); addWidget(southPriority); addWidget(westPriority); addWidget(eastPriority); } else { int t = 1; for (EnumMachineUpgrades upgrade : upgradableMachine.getInstalledUpgrades()) { addWidget(new WidgetImage(14 + t, guiLeft + (25 * t), guiTop + 50, 20, 20, this, upgrade.getTexture(), Utils.localize("item.upgrade." + upgrade.getTag() + ".name"))); t++; } } if (upgradable && configurable) addWidget(toggleMode); updateButtons(); } @Override protected void drawGuiContainerBackgroundLayer(float f, int x, int y) { super.drawGuiContainerBackgroundLayer(f, x, y); if (configurationMode) { drawString(Utils.localize("gui.north") + ":", guiLeft + 10, guiTop + 30); drawString(Utils.localize("gui.east") + ": ", guiLeft + 10, guiTop + 50); drawString(Utils.localize("gui.south") + ": ", guiLeft + 10, guiTop + 70); drawString(Utils.localize("gui.west") + ": ", guiLeft + 10, guiTop + 90); drawString(Utils.localize("gui.up") + ": ", guiLeft + 10, guiTop + 110); drawString(Utils.localize("gui.down") + ": ", guiLeft + 10, guiTop + 130); if (configurableOutput.getStatus(ForgeDirection.NORTH).hasPriority()) drawString(Utils.localize("gui.priority") + ": ", guiLeft + 110, guiTop + 30); if (configurableOutput.getStatus(ForgeDirection.EAST).hasPriority()) drawString(Utils.localize("gui.priority") + ": ", guiLeft + 110, guiTop + 50); if (configurableOutput.getStatus(ForgeDirection.SOUTH).hasPriority()) drawString(Utils.localize("gui.priority") + ": ", guiLeft + 110, guiTop + 70); if (configurableOutput.getStatus(ForgeDirection.WEST).hasPriority()) drawString(Utils.localize("gui.priority") + ": ", guiLeft + 110, guiTop + 90); if (configurableOutput.getStatus(ForgeDirection.UP).hasPriority()) drawString(Utils.localize("gui.priority") + ": ", guiLeft + 110, guiTop + 110); if (configurableOutput.getStatus(ForgeDirection.DOWN).hasPriority()) drawString(Utils.localize("gui.priority") + ": ", guiLeft + 110, guiTop + 130); } else { drawString(Utils.localize("gui.installedUpgrades"), guiLeft + 20, guiTop + 25); } } @Override public void widgetActionPerformed(WidgetBase widget) { if (widget.id < 6) configurableOutput.changeStatus(ForgeDirection.getOrientation(widget.id)); else if (widget.id < 14) configurableOutput.changePriority(ForgeDirection.getOrientation(widget.id - 6)); else if (widget.id == 30) configurationMode = !configurationMode; if (configurableOutput != null) PacketHandler.instance.sendToServer(new MessageConfiguration(configurableOutput)); } @Override protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); redraw(); updateButtons(); } private void updateButtons() { if (!configurationMode) return; WidgetButtonText button; for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { button = ((WidgetButtonText) widgets.get(direction.ordinal())); button.setText(configurableOutput.getStatus(direction).getName()); button.setColor(configurableOutput.getStatus(direction).getColor()); button = ((WidgetButtonText) widgets.get(direction.ordinal() + 6)); button.setText(configurableOutput.getPriority(direction).getName()); button.setColor(configurableOutput.getPriority(direction).getColor()); button.setShouldRender(configurableOutput.getStatus(direction).hasPriority()); } } }