package malte0811.industrialWires.client.gui; import blusunrize.immersiveengineering.client.ClientUtils; import blusunrize.immersiveengineering.client.gui.elements.GuiButtonCheckbox; import blusunrize.immersiveengineering.client.gui.elements.GuiSliderIE; import com.google.common.collect.ImmutableList; import malte0811.industrialWires.IndustrialWires; import malte0811.industrialWires.client.gui.elements.GuiChannelPicker; import malte0811.industrialWires.client.gui.elements.GuiChannelPickerSmall; import malte0811.industrialWires.client.gui.elements.GuiIntChooser; import malte0811.industrialWires.containers.ContainerPanelComponent; import malte0811.industrialWires.controlpanel.IConfigurableComponent; import malte0811.industrialWires.controlpanel.PanelComponent; import malte0811.industrialWires.items.ItemPanelComponent; import malte0811.industrialWires.network.MessageItemSync; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import org.lwjgl.input.Keyboard; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class GuiPanelComponent extends GuiContainer { private PanelComponent component; private IConfigurableComponent confComp; private ContainerPanelComponent container; private List boolButtons = new ArrayList<>(); private List stringTexts = new ArrayList<>(); private List rsChannelChoosers = new ArrayList<>(); private List intChoosers = new ArrayList<>(); private List floatSliders = new ArrayList<>(); public GuiPanelComponent(EnumHand h, PanelComponent pc) { super(new ContainerPanelComponent(h)); container = (ContainerPanelComponent) inventorySlots; component = pc; } @Override public void initGui() { super.initGui(); xSize = 150; ySize = 150; Keyboard.enableRepeatEvents(true); if (component instanceof IConfigurableComponent) { confComp = (IConfigurableComponent) component; IConfigurableComponent.BoolConfig[] bools = confComp.getBooleanOptions(); boolButtons.clear(); int componentLeft = this.guiLeft + 5; int componentTop = this.guiTop + 5; for (int i = 0; i < bools.length; i++) { IConfigurableComponent.BoolConfig bc = bools[i]; boolButtons.add(new GuiButtonCheckbox(0, componentLeft + bc.x, componentTop + bc.y, confComp.fomatConfigName(IConfigurableComponent.ConfigType.BOOL, i), bc.value)); } IConfigurableComponent.StringConfig[] strings = confComp.getStringOptions(); stringTexts.clear(); for (IConfigurableComponent.StringConfig sc : strings) { GuiTextField toAdd = new GuiTextField(0, mc.fontRendererObj, componentLeft + sc.x, componentTop + sc.y, 58, 12); toAdd.setText(sc.value); stringTexts.add(toAdd); } IConfigurableComponent.RSChannelConfig[] rs = confComp.getRSChannelOptions(); rsChannelChoosers.clear(); for (IConfigurableComponent.RSChannelConfig rc : rs) { if (rc.small) { rsChannelChoosers.add(new GuiChannelPickerSmall(0, componentLeft + rc.x, componentTop + rc.y, 10, 40, rc.value)); } else { rsChannelChoosers.add(new GuiChannelPicker(0, componentLeft + rc.x, componentTop + rc.y, 40, rc.value)); } } intChoosers.clear(); IConfigurableComponent.IntConfig[] is = confComp.getIntegerOptions(); for (IConfigurableComponent.IntConfig ic : is) { intChoosers.add(new GuiIntChooser(componentLeft + ic.x, componentTop + ic.y, ic.allowNegative, ic.value, ic.digits)); } floatSliders.clear(); IConfigurableComponent.FloatConfig[] fs = confComp.getFloatOptions(); for (int i = 0; i < fs.length; i++) { IConfigurableComponent.FloatConfig fc = fs[i]; floatSliders.add(new GuiSliderIE(0, componentLeft + fc.x, componentTop + fc.y, fc.width, confComp.fomatConfigName(IConfigurableComponent.ConfigType.FLOAT, i), fc.value)); } } } private ResourceLocation textureLoc = new ResourceLocation(IndustrialWires.MODID, "textures/gui/panel_component.png"); @Override protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { GlStateManager.color(1, 1, 1, 1); mc.getTextureManager().bindTexture(textureLoc); Gui.drawModalRectWithCustomSizedTexture(guiLeft, guiTop, 0, 0, xSize, ySize, 150, 150); } @Override public void onGuiClosed() { super.onGuiClosed(); Keyboard.enableRepeatEvents(false); syncAll(); } @Override protected void keyTyped(char typedChar, int keyCode) throws IOException { boolean superCall = true; for (int i = 0; i < stringTexts.size(); i++) { GuiTextField field = stringTexts.get(i); if (field.isFocused() && keyCode == 28) { sync(i, field.getText()); superCall = false; } else if (field.textboxKeyTyped(typedChar, keyCode)) { superCall = false; } } if (superCall) { super.keyTyped(typedChar, keyCode); } } @Override protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { super.mouseClicked(mouseX, mouseY, mouseButton); for (int i = 0; i < rsChannelChoosers.size(); i++) { GuiChannelPicker picker = rsChannelChoosers.get(i); int old = picker.getSelected(); boolean stopNow = picker.click(mouseX, mouseY); if (old != picker.getSelected()) { sync(i, picker.getSelected()); } if (stopNow) { return; } } for (int i = 0; i < stringTexts.size(); i++) { GuiTextField field = stringTexts.get(i); boolean focus = field.isFocused(); field.mouseClicked(mouseX, mouseY, mouseButton); if (focus && !field.isFocused()) { sync(i, field.getText()); } } for (int i = 0; i < boolButtons.size(); i++) { GuiButtonCheckbox box = boolButtons.get(i); boolean on = box.state; box.mousePressed(mc, mouseX, mouseY); if (on != box.state) { sync(i, box.state); } } for (int i = 0; i < intChoosers.size(); i++) { GuiIntChooser chooser = intChoosers.get(i); int oldV = chooser.getValue(); chooser.click(mouseX, mouseY); if (oldV != chooser.getValue()) { sync(i, chooser.getValue()); } } for (int i = 0; i < floatSliders.size(); i++) { GuiSliderIE slider = floatSliders.get(i); double oldV = slider.getValue(); slider.mousePressed(mc, mouseX, mouseY); if (oldV != slider.getValue()) { sync(i, (float) slider.getValue()); } } } @Override protected void mouseReleased(int mouseX, int mouseY, int state) { super.mouseReleased(mouseX, mouseY, state); for (int i = 0; i < floatSliders.size(); i++) { GuiSliderIE slider = floatSliders.get(i); double oldV = slider.getValue(); slider.mouseReleased(mouseX, mouseY); if (oldV != slider.getValue()) { sync(i, (float) slider.getValue()); } } } @Override public void drawScreen(int mouseX, int mouseY, float partialTicks) { super.drawScreen(mouseX, mouseY, partialTicks); GlStateManager.color(1, 1, 1, 1); RenderHelper.disableStandardItemLighting(); for (GuiChannelPicker pick : rsChannelChoosers) { pick.drawButton(mc, mouseX, mouseY); } for (GuiButtonCheckbox box : boolButtons) { box.drawButton(mc, mouseX, mouseY); } for (GuiTextField field : stringTexts) { field.drawTextBox(); } for (GuiIntChooser choose : intChoosers) { choose.drawChooser(); } for (GuiSliderIE choose : floatSliders) { choose.drawButton(mc, mouseX, mouseY); } //TOOLTIPS for (int i = 0; i < rsChannelChoosers.size(); i++) { GuiChannelPicker pick = rsChannelChoosers.get(i); String tooltip = confComp.fomatConfigDescription(IConfigurableComponent.ConfigType.RS_CHANNEL, i); if (tooltip != null && pick.isHovered(mouseX, mouseY)) { ClientUtils.drawHoveringText(ImmutableList.of(tooltip), mouseX, mouseY, mc.fontRendererObj); } } for (int i = 0; i < boolButtons.size(); i++) { GuiButtonCheckbox box = boolButtons.get(i); String tooltip = confComp.fomatConfigDescription(IConfigurableComponent.ConfigType.BOOL, i); if (tooltip!=null&&box.isMouseOver()) { ClientUtils.drawHoveringText(ImmutableList.of(tooltip), mouseX, mouseY, mc.fontRendererObj); } } for (int i = 0; i < stringTexts.size(); i++) { GuiTextField field = stringTexts.get(i); String tooltip = confComp.fomatConfigDescription(IConfigurableComponent.ConfigType.STRING, i); if (tooltip!=null&&mouseX>=field.xPosition&&mouseX=field.yPosition&&mouseY