package com.skcraft.playblock.projector; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; import net.minecraft.util.ResourceLocation; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import com.skcraft.playblock.media.MediaResolver; import com.skcraft.playblock.player.MediaPlayer; import com.skcraft.playblock.util.DoubleThresholdRange; import com.skcraft.playblock.util.StringUtils; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; /** * The GUI for the projector. */ @SideOnly(Side.CLIENT) public class GuiProjector extends GuiScreen { public static final int ID = 0; private static final int defaultTextColor = 14737632; // Hardcoded, from the // text box; private static final int xSize = 247; private static final int ySize = 165; private TileEntityProjector tile; private GuiTextField uriField, heightField, widthField, triggerRangeField, fadeRangeField; private GuiButton applyButton; private GuiButton clearUriButton; private float projectorWidth, projectorHeight, triggerRange, fadeRange; private String uri; public GuiProjector(TileEntityProjector tileEntity) { tile = tileEntity; MediaPlayer mediaPlayer = tileEntity.getMediaPlayer(); DoubleThresholdRange range = tileEntity.getRange(); uri = mediaPlayer.getUri(); projectorWidth = mediaPlayer.getWidth(); projectorHeight = mediaPlayer.getHeight(); triggerRange = range.getTriggerRange(); fadeRange = range.getFadeRange(); } /** * Adds the buttons (and other controls) to the screen in question. */ @Override public void initGui() { this.buttonList.clear(); Keyboard.enableRepeatEvents(true); int left = (width - xSize) / 2; int top = (height - ySize) / 2; this.buttonList.add(applyButton = new GuiButton(0, left + 160, top + 125, 80, 20, StringUtils.translate("gui.done"))); this.buttonList.add(clearUriButton = new GuiButton(1, left + 220, top + 14, 17, 20, "X")); uriField = new GuiTextField(this.fontRendererObj, left + 60, top + 17, 157, this.fontRendererObj.FONT_HEIGHT + 5); initTextField(uriField, 100, uri); heightField = new GuiTextField(this.fontRendererObj, left + 130, top + 37, 50, this.fontRendererObj.FONT_HEIGHT + 5); initTextField(heightField, 10, Float.toString(projectorHeight)); widthField = new GuiTextField(this.fontRendererObj, left + 60, top + 37, 50, this.fontRendererObj.FONT_HEIGHT + 5); initTextField(widthField, 10, Float.toString(projectorWidth)); triggerRangeField = new GuiTextField(this.fontRendererObj, left + 60, top + 57, 50, this.fontRendererObj.FONT_HEIGHT + 5); initTextField(triggerRangeField, 10, Float.toString(triggerRange)); fadeRangeField = new GuiTextField(this.fontRendererObj, left + 60, top + 77, 50, this.fontRendererObj.FONT_HEIGHT + 5); initTextField(fadeRangeField, 10, Float.toString(fadeRange)); } /** * Prepare a text field for entry. * * @param field * the field * @param length * the maximum length of the string * @param text * the initial text */ private void initTextField(GuiTextField field, int length, String text) { field.setVisible(true); field.setMaxStringLength(length); field.setEnableBackgroundDrawing(true); field.setCanLoseFocus(true); field.setFocused(false); field.setText(text); } @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @Override public void actionPerformed(GuiButton button) { if (button.id == applyButton.id) { tile.getOptions().sendUpdate(uri, projectorWidth, projectorHeight, triggerRange, fadeRange); this.mc.displayGuiScreen((GuiScreen) null); this.mc.setIngameFocus(); } else if (button.id == clearUriButton.id) { uriField.setText(""); uriField.setFocused(true); uri = uriField.getText(); } } /** * Draws the screen and all the components in it. */ @Override public void drawScreen(int mouseX, int mouseY, float par3) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); mc.renderEngine.bindTexture(new ResourceLocation("playblock:textures/gui/projector_bg.png")); int left = (width - xSize) / 2; int top = (height - ySize) / 2; drawTexturedModalRect(left, top, 0, 0, xSize, ySize); uriField.drawTextBox(); heightField.drawTextBox(); widthField.drawTextBox(); triggerRangeField.drawTextBox(); fadeRangeField.drawTextBox(); fontRendererObj.drawString(StringUtils.translate("options.url"), left + 10, top + 20, 0xff999999); fontRendererObj.drawString(StringUtils.translate("options.screenSize"), left + 10, top + 40, 0xff999999); fontRendererObj.drawString("x", left + 117, top + 40, 0xff999999); fontRendererObj.drawString(StringUtils.translate("options.turnOn"), left + 10, top + 60, 0xff999999); fontRendererObj.drawString(StringUtils.translate("options.blocksAway"), left + 117, top + 60, 0xff999999); fontRendererObj.drawString(StringUtils.translate("options.turnOff"), left + 10, top + 80, 0xff999999); fontRendererObj.drawString(StringUtils.translate("options.blocksAway"), left + 117, top + 80, 0xff999999); fontRendererObj.drawString("TEST VERSION - skcraft.com", left + 10, top + 132, 0xffffffff); super.drawScreen(mouseX, mouseY, par3); } @Override protected void mouseClicked(int x, int y, int buttonClicked) { super.mouseClicked(x, y, buttonClicked); uriField.mouseClicked(x, y, buttonClicked); heightField.mouseClicked(x, y, buttonClicked); widthField.mouseClicked(x, y, buttonClicked); triggerRangeField.mouseClicked(x, y, buttonClicked); fadeRangeField.mouseClicked(x, y, buttonClicked); } @Override protected void keyTyped(char key, int par2) { super.keyTyped(key, par2); if (uriField.isFocused()) { uriField.textboxKeyTyped(key, par2); uri = uriField.getText(); if (MediaResolver.canPlayUri(MediaResolver.cleanUri(uri))) { uriField.setTextColor(defaultTextColor); } else { uriField.setTextColor(0xffff0000); } } if (Character.isDigit(key) || par2 == 14 || par2 == 52 || par2 == 199 || par2 == 203 || par2 == 205 || par2 == 207 || par2 == 211) { if (heightField.isFocused()) { heightField.textboxKeyTyped(key, par2); if (heightField.getText().length() != 0) { try { projectorHeight = Float.parseFloat(heightField.getText()); } catch (NumberFormatException e) { } } } else if (widthField.isFocused()) { widthField.textboxKeyTyped(key, par2); if (widthField.getText().length() != 0) { try { projectorWidth = Float.parseFloat(widthField.getText()); } catch (NumberFormatException e) { } } } else if (triggerRangeField.isFocused()) { triggerRangeField.textboxKeyTyped(key, par2); if (triggerRangeField.getText().length() != 0) { try { triggerRange = Float.parseFloat(triggerRangeField.getText()); } catch (NumberFormatException e) { } } } else if (fadeRangeField.isFocused()) { fadeRangeField.textboxKeyTyped(key, par2); if (fadeRangeField.getText().length() != 0) { try { fadeRange = Float.parseFloat(fadeRangeField.getText()); } catch (NumberFormatException e) { } } } } } @Override public boolean doesGuiPauseGame() { return false; } }