package pneumaticCraft.client.gui.tubemodule; import java.awt.Rectangle; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import pneumaticCraft.client.gui.widget.GuiAnimatedStat; import pneumaticCraft.client.gui.widget.GuiCheckBox; import pneumaticCraft.client.gui.widget.IGuiWidget; import pneumaticCraft.client.gui.widget.WidgetTooltipArea; import pneumaticCraft.common.block.tubes.TubeModule; import pneumaticCraft.common.block.tubes.TubeModuleRedstoneReceiving; import pneumaticCraft.common.network.NetworkHandler; import pneumaticCraft.common.network.PacketUpdatePressureModule; import pneumaticCraft.common.util.PneumaticCraftUtils; import pneumaticCraft.lib.Textures; import cpw.mods.fml.client.FMLClientHandler; public class GuiPressureModule extends GuiTubeModule{ private GuiTextField lowerBoundField; private GuiTextField higherBoundField; private GuiCheckBox advancedMode; private int graphLowY; private int graphHighY; private int graphLeft; private int graphRight; private boolean waitTillRelease = true; public GuiPressureModule(EntityPlayer player, int x, int y, int z){ super(player, x, y, z); ySize = 191; } public GuiPressureModule(TubeModule module){ super(module); ySize = 191; } @Override public void initGui(){ super.initGui(); int xStart = (width - xSize) / 2; int yStart = (height - ySize) / 2; addLabel("lower", guiLeft + 10, guiTop + 30); addLabel("bar", guiLeft + 45, guiTop + 42); addLabel("higher", guiLeft + 140, guiTop + 30); String title = I18n.format("item." + module.getType() + ".name"); addLabel(title, width / 2 - fontRendererObj.getStringWidth(title) / 2, guiTop + 5); lowerBoundField = new GuiTextField(fontRendererObj, xStart + 10, yStart + 41, 30, 10); lowerBoundField.setText(PneumaticCraftUtils.roundNumberTo(module.lowerBound, 1)); higherBoundField = new GuiTextField(fontRendererObj, xStart + 140, yStart + 41, 30, 10); higherBoundField.setText(PneumaticCraftUtils.roundNumberTo(module.higherBound, 1)); graphLowY = guiTop + 153; graphHighY = guiTop + 93; graphLeft = guiLeft + 22; graphRight = guiLeft + 172; addWidget(new WidgetTooltipArea(graphLeft - 20, graphHighY, 25, graphLowY - graphHighY, "gui.redstone")); addWidget(new WidgetTooltipArea(graphLeft, graphLowY - 5, graphRight - graphLeft, 25, "gui.threshold")); addWidget((IGuiWidget)new GuiAnimatedStat(this, "gui.tab.info", Textures.GUI_INFO_LOCATION, xStart, yStart + 5, 0xFF8888FF, null, true).setText("gui.tab.info.tubeModule")); advancedMode = new GuiCheckBox(0, guiLeft + 6, guiTop + 15, 0xFF000000, "gui.tubeModule.advancedConfig").setTooltip(I18n.format("gui.tubeModule.advancedConfig.tooltip")); advancedMode.checked = true; addWidget(advancedMode); } @Override protected ResourceLocation getTexture(){ return Textures.GUI_TUBE_MODULE; } @Override public void drawScreen(int mouseX, int mouseY, float partialTicks){ super.drawScreen(mouseX, mouseY, partialTicks); GL11.glDisable(GL11.GL_LIGHTING); if(!lowerBoundField.isFocused()) lowerBoundField.setText(PneumaticCraftUtils.roundNumberTo(module.lowerBound, 1)); if(!higherBoundField.isFocused()) higherBoundField.setText(PneumaticCraftUtils.roundNumberTo(module.higherBound, 1)); FMLClientHandler.instance().getClient().getTextureManager().bindTexture(getTexture()); int scrollbarLowerBoundX = (int)(guiLeft + 16 + (158 - 11) * (module.lowerBound / (module.maxValue + 1))); int scrollbarHigherBoundX = (int)(guiLeft + 16 + (158 - 11) * (module.higherBound / (module.maxValue + 1))); if(!Mouse.isButtonDown(0)) waitTillRelease = false; if(!waitTillRelease && Mouse.isButtonDown(0)) { if(new Rectangle(guiLeft + 11, guiTop + 59, 158, 15).contains(mouseX, mouseY)) { module.higherBound = (float)(mouseX - 6 - (guiLeft + 11)) / (158 - 11) * module.maxValue; if(module.higherBound < -1) module.higherBound = -1; if(module.higherBound > module.maxValue) module.higherBound = module.maxValue; //higherBoundField.setText(PneumaticCraftUtils.roundNumberTo(module.higherBound, 1)); NetworkHandler.sendToServer(new PacketUpdatePressureModule(module, 1, module.higherBound)); } else if(new Rectangle(guiLeft + 11, guiTop + 73, 158, 15).contains(mouseX, mouseY)) { module.lowerBound = (float)(mouseX - 6 - (guiLeft + 11)) / (158 - 11) * module.maxValue; if(module.lowerBound < -1) module.lowerBound = -1; if(module.lowerBound > module.maxValue) module.lowerBound = module.maxValue; // lowerBoundField.setText(PneumaticCraftUtils.roundNumberTo(module.lowerBound, 1)); NetworkHandler.sendToServer(new PacketUpdatePressureModule(module, 0, module.lowerBound)); } } drawTexturedModalRect(scrollbarLowerBoundX, guiTop + 73, 183, 0, 15, 12); drawTexturedModalRect(scrollbarHigherBoundX, guiTop + 59, 183, 0, 15, 12); lowerBoundField.drawTextBox(); higherBoundField.drawTextBox(); /* * Draw graph */ drawVerticalLine(graphLeft, graphHighY, graphLowY, 0xFF000000); for(int i = 0; i < 16; i++) { boolean longer = i % 5 == 0; if(longer) { fontRendererObj.drawString(i + "", graphLeft - 5 - fontRendererObj.getStringWidth(i + ""), graphHighY + (graphLowY - graphHighY) * (15 - i) / 15 - 3, 0xFF000000); drawHorizontalLine(graphLeft + 4, graphRight, graphHighY + (graphLowY - graphHighY) * (15 - i) / 15, i == 0 ? 0xFF000000 : 0x33000000); } drawHorizontalLine(graphLeft - (longer ? 5 : 3), graphLeft + 3, graphHighY + (graphLowY - graphHighY) * (15 - i) / 15, 0xFF000000); } for(int i = 0; i < 31; i++) { boolean longer = i % 5 == 0; if(longer) { fontRendererObj.drawString(i + "", graphLeft + (graphRight - graphLeft) * i / 30 - fontRendererObj.getStringWidth(i + "") / 2 + 1, graphLowY + 6, 0xFF000000); drawVerticalLine(graphLeft + (graphRight - graphLeft) * i / 30, graphHighY, graphLowY - 2, 0x33000000); } drawVerticalLine(graphLeft + (graphRight - graphLeft) * i / 30, graphLowY - 3, graphLowY + (longer ? 5 : 3), 0xFF000000); } /* * Draw the current redstone strength */ if(module instanceof TubeModuleRedstoneReceiving) { ((TubeModuleRedstoneReceiving)module).onNeighborBlockUpdate(); drawHorizontalLine(graphLeft + 4, graphRight, graphHighY + (graphLowY - graphHighY) * (15 - ((TubeModuleRedstoneReceiving)module).getReceivingRedstoneLevel()) / 15, 0xFFFF0000); String status = "Current threshold: " + PneumaticCraftUtils.roundNumberTo(((TubeModuleRedstoneReceiving)module).getThreshold(), 1) + " bar"; fontRendererObj.drawString(status, guiLeft + xSize / 2 - fontRendererObj.getStringWidth(status) / 2, guiTop + 173, 0xFF000000); } /* * Draw the data in the graph */ double zLevel = 90; GL11.glDisable(GL11.GL_TEXTURE_2D); Tessellator t = Tessellator.instance; t.startDrawing(GL11.GL_LINE_STRIP); t.setColorOpaque_I(0); for(int i = 0; i < 16; i++) { double y = graphHighY + (graphLowY - graphHighY) * (15 - i) / 15; double x = graphLeft + (graphRight - graphLeft) * module.getThreshold(i) / 30; t.addVertex(x, y, zLevel); } t.draw(); GL11.glEnable(GL11.GL_TEXTURE_2D); } @Override protected void mouseClicked(int par1, int par2, int par3){ super.mouseClicked(par1, par2, par3); boolean wasFocused = lowerBoundField.isFocused(); lowerBoundField.mouseClicked(par1, par2, par3); if(wasFocused && !lowerBoundField.isFocused()) { try { module.lowerBound = Float.parseFloat(lowerBoundField.getText()); if(module.lowerBound < -1) module.lowerBound = -1; if(module.lowerBound > 30) module.lowerBound = 30; // lowerBoundField.setText(module.lowerBound + ""); NetworkHandler.sendToServer(new PacketUpdatePressureModule(module, 0, module.lowerBound)); } catch(Exception e) {} } wasFocused = higherBoundField.isFocused(); higherBoundField.mouseClicked(par1, par2, par3); if(wasFocused && !higherBoundField.isFocused()) { try { module.higherBound = Float.parseFloat(higherBoundField.getText()); if(module.higherBound < -1) module.higherBound = -1; if(module.higherBound > 30) module.higherBound = 30; // higherBoundField.setText(module.higherBound + ""); NetworkHandler.sendToServer(new PacketUpdatePressureModule(module, 1, module.higherBound)); } catch(Exception e) {} } } @Override protected void keyTyped(char par1, int par2){ if(lowerBoundField.isFocused() && par2 != 1) { lowerBoundField.textboxKeyTyped(par1, par2); // NetworkHandler.sendToServer(new PacketUpdateTextfield(te, 0)); } else if(higherBoundField.isFocused() && par2 != 1) { higherBoundField.textboxKeyTyped(par1, par2); } else { super.keyTyped(par1, par2); } } @Override public void actionPerformed(IGuiWidget widget){ super.actionPerformed(widget); if(widget.getID() == 0) { module.advancedConfig = ((GuiCheckBox)widget).checked; NetworkHandler.sendToServer(new PacketUpdatePressureModule(module, 2, module.advancedConfig ? 1 : 0)); } } @Override public void updateScreen(){ super.updateScreen(); if(!module.advancedConfig) mc.displayGuiScreen(new GuiPressureModuleSimple(module)); } }