/** * @author zmaster587 * */ package zmaster587.advancedRocketry.inventory; import java.util.LinkedList; import org.lwjgl.input.Keyboard; import zmaster587.advancedRocketry.tile.multiblock.TileSpaceLaser; import zmaster587.libVulpes.LibVulpes; import zmaster587.libVulpes.gui.GuiImageButton; import zmaster587.libVulpes.network.PacketHandler; import zmaster587.libVulpes.network.PacketMachine; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.ForgeDirection; public class GuiSpaceLaser extends GuiContainer { private ResourceLocation backdrop = new ResourceLocation("advancedrocketry", "textures/gui/LaserTile.png"); private TileSpaceLaser laserTile; private int prevX, prevZ; GuiTextField xbox,ybox; GuiImageButton modeUp, modeDown; public GuiSpaceLaser(InventoryPlayer inventoryPlayer, TileSpaceLaser tile) { super(new ContainerSpaceLaser(inventoryPlayer, tile)); laserTile = tile; } //TODO: enter button @Override public void initGui() { super.initGui(); int x = (width - xSize) / 2; int y = (height - ySize) / 2; //Create and setup the textboxes xbox = new GuiTextField(this.fontRendererObj, x + 113, y + 31, 50, 10); ybox = new GuiTextField(this.fontRendererObj, x + 113, y + 41, 50, 10); xbox.setMaxStringLength(15); xbox.setEnableBackgroundDrawing(true); xbox.setFocused(true); xbox.setCanLoseFocus(true); xbox.setEnabled(true); ybox.setMaxStringLength(15); ybox.setEnableBackgroundDrawing(true); ybox.setFocused(false); ybox.setCanLoseFocus(true); ybox.setEnabled(true); modeDown = new GuiImageButton(0, x + 103, y + 20, 5, 8, zmaster587.libVulpes.inventory.TextureResources.buttonLeft); modeUp = new GuiImageButton(1, x + 157, y + 20, 5, 8, zmaster587.libVulpes.inventory.TextureResources.buttonRight); this.buttonList.add(modeUp); this.buttonList.add(modeDown); this.buttonList.add(new GuiButton(2, x + 103, y + 62, 34,20, "Reset")); } @Override protected void keyTyped(char par1, int par2) { //Don't let players change the coords while the machine is running if(!laserTile.isRunning()) { if(Character.isDigit(par1) || par1 == '-' || par2 == Keyboard.KEY_BACK || par2 == Keyboard.KEY_DELETE || par2 == Keyboard.KEY_LEFT || par2 == Keyboard.KEY_RIGHT) { if(xbox.isFocused() && (par1 != '-' || (xbox.getCursorPosition() == 0 && !xbox.getText().startsWith("-")))) { xbox.textboxKeyTyped(par1, par2); if(!xbox.getText().isEmpty() && !xbox.getText().contentEquals("-")) laserTile.laserX = Integer.parseInt(xbox.getText()); PacketHandler.sendToServer(new PacketMachine(laserTile,(byte) 0)); } else if(ybox.isFocused() && (par1 != '-' || (ybox.getCursorPosition() == 0 && !ybox.getText().startsWith("-")))){ ybox.textboxKeyTyped(par1, par2); if(!ybox.getText().isEmpty() && !ybox.getText().contentEquals("-")) laserTile.laserZ = Integer.parseInt(ybox.getText()); PacketHandler.sendToServer(new PacketMachine(laserTile,(byte) 1)); } } } if(par2 == Keyboard.KEY_TAB) { if(xbox.isFocused()) { xbox.setFocused(false); ybox.setFocused(true); } else if(ybox.isFocused()) { xbox.setFocused(true); ybox.setFocused(false); } } super.keyTyped(par1, par2); } //Overridden so the mouse works properly @Override protected void actionPerformed(GuiButton guiButton) { //TODO: debug if(guiButton.id == 0){ laserTile.decrementMode(); } else if(guiButton.id == 1) { laserTile.incrementMode(); } else if(guiButton.id == 2) { PacketHandler.sendToServer(new PacketMachine(laserTile, (byte)4)); return; } else return; if(!laserTile.isRunning()) PacketHandler.sendToServer(new PacketMachine(laserTile, (byte)3)); } @Override public void drawScreen(int a, int b, float c){ super.drawScreen(a,b,c); //Don't bother updating unless somthing has changed if(laserTile.laserX != prevX) { xbox.setText(String.valueOf(laserTile.laserX)); prevX = laserTile.laserX; } if(laserTile.laserZ != prevZ) { ybox.setText(String.valueOf(laserTile.laserZ)); prevZ = laserTile.laserZ; } xbox.drawTextBox(); ybox.drawTextBox(); int x = (width - xSize) / 2, y = (height - ySize) / 2; if(a > x + 11 && a < x + 27 && b < y + 85 && b > y + 43) { LinkedList<String> text = new LinkedList<String>(); text.add(laserTile.getBatteries().getEnergyStored() + " / " + laserTile.getBatteries().getMaxEnergyStored() + " RF"); this.drawHoveringText(text, a, b, this.fontRendererObj); } //Buttons don't need to be drawn because that is taken care of by super } /** * Args: x, y, buttonClicked */ @Override public void mouseClicked(int xPos, int yPos, int par3) { //Make sure we can focus the textboxes int x = (width - xSize) / 2, y = (height - ySize) / 2; if(!xbox.isFocused() && yPos < y + 40 && yPos > y + 31 && xPos < x + 163 && xPos > x + 113) { xbox.setFocused(true); ybox.setFocused(false); } if(!ybox.isFocused() && yPos < y + 50 && yPos > y + 41 && xPos < x + 163 && xPos > x + 113){ ybox.setFocused(true); xbox.setFocused(false); } super.mouseClicked(xPos, yPos, par3); } @Override protected void drawGuiContainerBackgroundLayer(float f, int i, int j) { this.mc.renderEngine.bindTexture(backdrop); //get starting X and Y for the interface int x = (width - xSize) / 2, y = (height - ySize) / 2; this.drawTexturedModalRect(x, y, 0, 0, 176, 171); //Render the energy bar only if energy exists if(laserTile.hasEnergy()) { int offset = laserTile.getEnergyPercentScaled(42); this.drawTexturedModalRect(x + 11, y + 85 - offset, 176, 42 - offset, 16, offset); } //Display status if(laserTile.isFinished() || laserTile.getStackInSlot(0) == null) this.drawTexturedModalRect(x + 145, y + 64, 32, 171, 16, 16); else if(laserTile.isRunning() || laserTile.isJammed()) this.drawTexturedModalRect(x + 145, y + 64, 16, 171, 16, 16); else this.drawTexturedModalRect(x + 145, y + 64, 0, 171, 16, 16); //Draw labels next to the input boxes this.drawString(this.fontRendererObj, "X:", x + 103, y + 31, 0xffffff); this.drawString(this.fontRendererObj, "Y:", x + 103, y + 41, 0xffffff); //Draw jamming indicator if jammed if(laserTile.isJammed()) this.drawString(this.fontRendererObj, "Jam!", x + 143, y + 68, 0xffffff); //Draw mode indicator this.drawCenteredString(this.fontRendererObj, laserTile.getMode().toString(), x + 130, y + 20, 0xffffff); } }