From 948803571dde4abf1045e4ab4c4e0142e49652c3 Mon Sep 17 00:00:00 2001 From: CrushedPixel Date: Mon, 6 Jul 2015 16:39:30 +0200 Subject: [PATCH] GuiAssetAdder now allows to add/remove/edit Assets in a Replay. These Assets are not being saved yet. --- .../replaymod/gui/GuiAssetAdder.java | 179 +++++++++++++++++- .../replaymod/gui/GuiEditKeyframe.java | 17 +- .../replaymod/gui/GuiRenderSettings.java | 13 +- .../gui/elements/GuiAdvancedTextField.java | 2 +- .../replaymod/gui/elements/GuiEntryList.java | 6 +- .../gui/elements/GuiFileChooser.java | 10 +- .../gui/elements/GuiNumberInput.java | 16 +- .../gui/elements/GuiNumberInputWithText.java | 32 ++++ .../replaymod/holders/CustomImageObject.java | 41 ++-- .../replaymod/holders/GuiEntryListEntry.java | 2 +- .../renderer/CustomObjectRenderer.java | 10 +- .../replaymod/replay/ReplayHandler.java | 4 + .../replaymod/utils/RoundUtils.java | 7 + .../assets/replaymod/lang/en_US.lang | 6 +- 14 files changed, 283 insertions(+), 62 deletions(-) create mode 100644 src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiNumberInputWithText.java create mode 100644 src/main/java/eu/crushedpixel/replaymod/utils/RoundUtils.java diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/GuiAssetAdder.java b/src/main/java/eu/crushedpixel/replaymod/gui/GuiAssetAdder.java index d3976095..b6905b92 100644 --- a/src/main/java/eu/crushedpixel/replaymod/gui/GuiAssetAdder.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/GuiAssetAdder.java @@ -1,20 +1,24 @@ package eu.crushedpixel.replaymod.gui; import eu.crushedpixel.replaymod.ReplayMod; -import eu.crushedpixel.replaymod.gui.elements.GuiAdvancedTextField; -import eu.crushedpixel.replaymod.gui.elements.GuiEntryList; -import eu.crushedpixel.replaymod.gui.elements.GuiFileChooser; -import eu.crushedpixel.replaymod.gui.elements.GuiNumberInput; +import eu.crushedpixel.replaymod.gui.elements.*; import eu.crushedpixel.replaymod.gui.elements.listeners.FileChooseListener; +import eu.crushedpixel.replaymod.gui.elements.listeners.SelectionListener; import eu.crushedpixel.replaymod.holders.CustomImageObject; +import eu.crushedpixel.replaymod.holders.Position; +import eu.crushedpixel.replaymod.replay.ReplayHandler; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.resources.I18n; import net.minecraftforge.fml.client.config.GuiCheckBox; import javax.imageio.ImageIO; import java.awt.*; import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; public class GuiAssetAdder extends GuiScreen { @@ -32,6 +36,8 @@ public class GuiAssetAdder extends GuiScreen { private GuiNumberInput xInput, yInput, zInput, yawInput, pitchInput, rollInput, scaleInput; private GuiCheckBox backVisibleCheckBox; + private List textFields = new ArrayList(); + public GuiAssetAdder() { ReplayMod.replaySender.setReplaySpeed(0); } @@ -42,6 +48,12 @@ public class GuiAssetAdder extends GuiScreen { screenTitle = I18n.format("replaymod.gui.assets.title"); objectList = new GuiEntryList(0, fontRendererObj, 0, 0, 0, 0); + objectList.setEmptyMessage(I18n.format("replaymod.gui.assets.emptylist")); + + for(CustomImageObject object : ReplayHandler.getCustomImageObjects()) { + objectList.addElement(object); + } + removeButton = new GuiButton(GuiConstants.ASSET_ADDER_REMOVE_BUTTON, 0, 0, I18n.format("replaymod.gui.remove")); addButton = new GuiFileChooser(1, 0, 0, I18n.format("replaymod.gui.add"), null, ImageIO.getReaderFileSuffixes()) { @@ -51,16 +63,89 @@ public class GuiAssetAdder extends GuiScreen { addButton.registerListener(new FileChooseListener() { @Override public void onFileChosen(File file) { - + try { + objectList.addElement(new CustomImageObject(new Position(mc.getRenderViewEntity()), + I18n.format("replaymod.gui.assets.defaultname"), file, true)); + } catch(IOException e) { + e.printStackTrace(); + } } }); - guiFileChooser = new GuiFileChooser(2, 0, 0, I18n.format("replaymod.gui.assets.filechooser")+": ", null, ImageIO.getReaderFileSuffixes()); + nameInput = new GuiAdvancedTextField(fontRendererObj, 2, 0, 0, 20); + nameInput.hint = I18n.format("replaymod.gui.assets.namehint"); + + xInput = new GuiNumberInput(3, fontRendererObj, 0, 0, 0, null, null, 0d, true); + yInput = new GuiNumberInput(4, fontRendererObj, 0, 0, 0, null, null, 0d, true); + zInput = new GuiNumberInput(5, fontRendererObj, 0, 0, 0, null, null, 0d, true); + + yawInput = new GuiNumberInput(6, fontRendererObj, 0, 0, 0, -360d, 360d, 0d, true); + pitchInput = new GuiNumberInput(7, fontRendererObj, 0, 0, 0, -360d, 360d, 0d, true); + rollInput = new GuiNumberInput(8, fontRendererObj, 0, 0, 0, -360d, 360d, 0d, true); + + scaleInput = new GuiNumberInputWithText(9, fontRendererObj, 0, 0, 0, 0d, 10000d, 100d, true, "%"); + backVisibleCheckBox = new GuiCheckBox(10, 0, 0, I18n.format("replaymod.gui.assets.backvisible"), true); + + guiFileChooser = new GuiFileChooser(3, 0, 0, I18n.format("replaymod.gui.assets.filechooser")+": ", null, ImageIO.getReaderFileSuffixes()); + guiFileChooser.registerListener(new FileChooseListener() { + @Override + public void onFileChosen(File file) { + try { + objectList.getElement(objectList.getSelectionIndex()).setImageFile(file); + } catch(Exception e) { + e.printStackTrace(); + } + } + }); + + guiFileChooser.enabled = false; + + textFields.add(objectList); + textFields.add(nameInput); + textFields.add(xInput); + textFields.add(yInput); + textFields.add(zInput); + textFields.add(pitchInput); + textFields.add(yawInput); + textFields.add(rollInput); + textFields.add(scaleInput); + + objectList.addSelectionListener(new SelectionListener() { + @Override + public void onSelectionChanged(int selectionIndex) { + CustomImageObject object = objectList.getElement(selectionIndex); + if(object == null) { + guiFileChooser.enabled = false; + for(GuiTextField tf : textFields) { + tf.setEnabled(false); + } + return; + } + guiFileChooser.enabled = true; + for(GuiTextField tf : textFields) { + tf.setEnabled(true); + } + + nameInput.setText(object.getName()); + guiFileChooser.setSelectedFile(object.getImageFile()); + xInput.setValue(object.getPosition().getX()); + yInput.setValue(object.getPosition().getY()); + zInput.setValue(object.getPosition().getZ()); + pitchInput.setValue(object.getPosition().getPitch()); + yawInput.setValue(object.getPosition().getYaw()); + rollInput.setValue(object.getPosition().getRoll()); + scaleInput.setValue(object.getPosition().getScale()*100); + } + }); + + if(objectList.getEntryCount() > 0) { + objectList.setSelectionIndex(0); + } } int h = (int)Math.floor(((double)this.height-(45+20+15+20))/14); - objectList.width = guiFileChooser.width = 150; + objectList.width = guiFileChooser.width = nameInput.width = 150; objectList.xPosition = width/2 - objectList.width - 5; objectList.setVisibleElements(h); objectList.yPosition = 45; @@ -70,8 +155,21 @@ public class GuiAssetAdder extends GuiScreen { removeButton.xPosition = addButton.xPosition+addButton.width; addButton.yPosition = removeButton.yPosition = objectList.yPosition + objectList.height + 2; + nameInput.xPosition = this.width/2 + 5; + nameInput.yPosition = 45; + guiFileChooser.xPosition = this.width/2 + 5; - guiFileChooser.yPosition = 45; + guiFileChooser.yPosition = nameInput.yPosition + 20 + 5; + + xInput.yPosition = yInput.yPosition = zInput.yPosition = guiFileChooser.yPosition + 20 + 5 + 15; + yawInput.yPosition = pitchInput.yPosition = rollInput.yPosition = xInput.yPosition + 20 + 5 + 15; + scaleInput.yPosition = yawInput.yPosition + 20 + 5 + 15; + + xInput.xPosition = scaleInput.xPosition = pitchInput.xPosition = this.width/2 + 8; + yInput.xPosition = yawInput.xPosition = xInput.xPosition + 50; + zInput.xPosition = rollInput.xPosition = yInput.xPosition + 50; + + xInput.width = yInput.width = zInput.width = yawInput.width = pitchInput.width = rollInput.width = scaleInput.width = 43; buttonList.add(removeButton); buttonList.add(addButton); @@ -89,13 +187,74 @@ public class GuiAssetAdder extends GuiScreen { drawGradientRect(leftBorder, topBorder, width - leftBorder, this.height - 10, -1072689136, -804253680); - objectList.drawTextBox(); + for(GuiTextField textField : textFields) { + textField.drawTextBox(); + } + drawCenteredString(fontRendererObj, "X", xInput.xPosition + (xInput.width/2), xInput.yPosition - 12, Color.WHITE.getRGB()); + drawCenteredString(fontRendererObj, "Y", yInput.xPosition + (yInput.width/2), yInput.yPosition - 12, Color.WHITE.getRGB()); + drawCenteredString(fontRendererObj, "Z", zInput.xPosition + (zInput.width/2), zInput.yPosition - 12, Color.WHITE.getRGB()); + + drawCenteredString(fontRendererObj, "Yaw", yawInput.xPosition + (yawInput.width/2), yawInput.yPosition - 12, Color.WHITE.getRGB()); + drawCenteredString(fontRendererObj, "Pitch", pitchInput.xPosition + (pitchInput.width/2), pitchInput.yPosition - 12, Color.WHITE.getRGB()); + drawCenteredString(fontRendererObj, "Roll", rollInput.xPosition + (rollInput.width/2), rollInput.yPosition - 12, Color.WHITE.getRGB()); + + drawCenteredString(fontRendererObj, "Scale", scaleInput.xPosition + (scaleInput.width/2), scaleInput.yPosition - 12, Color.WHITE.getRGB()); super.drawScreen(mouseX, mouseY, partialTicks); } @Override public void updateScreen() { - super.updateScreen(); + for(GuiTextField textField : textFields) { + textField.updateCursorCounter(); + } + } + + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { + for(GuiTextField textField : textFields) { + textField.mouseClicked(mouseX, mouseY, mouseButton); + } + super.mouseClicked(mouseX, mouseY, mouseButton); + } + + @Override + protected void keyTyped(char typedChar, int keyCode) throws IOException { + for(GuiTextField textField : textFields) { + textField.textboxKeyTyped(typedChar, keyCode); + } + super.keyTyped(typedChar, keyCode); + + if(guiFileChooser.enabled) { + CustomImageObject current = objectList.getElement(objectList.getSelectionIndex()); + if(current == null) return; + + current.setName(nameInput.getText().trim()); + current.getPosition().setX(xInput.getPreciseValue()); + current.getPosition().setY(yInput.getPreciseValue()); + current.getPosition().setZ(zInput.getPreciseValue()); + current.getPosition().setPitch((float) pitchInput.getPreciseValue()); + current.getPosition().setYaw((float) yawInput.getPreciseValue()); + current.getPosition().setRoll((float) rollInput.getPreciseValue()); + current.getPosition().setScale((float)scaleInput.getPreciseValue()/100f); + } + + } + + @Override + public void onGuiClosed() { + ReplayHandler.setCustomImageObjects(objectList.getCopyOfElements()); + } + + @Override + protected void actionPerformed(GuiButton button) throws IOException { + if(!button.enabled) return; + + if(button.id == GuiConstants.ASSET_ADDER_REMOVE_BUTTON) { + CustomImageObject current = objectList.getElement(objectList.getSelectionIndex()); + if(current == null) return; + + objectList.removeElement(objectList.getSelectionIndex()); + } } } diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/GuiEditKeyframe.java b/src/main/java/eu/crushedpixel/replaymod/gui/GuiEditKeyframe.java index 6390cac5..8fa5101b 100644 --- a/src/main/java/eu/crushedpixel/replaymod/gui/GuiEditKeyframe.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/GuiEditKeyframe.java @@ -7,6 +7,7 @@ import eu.crushedpixel.replaymod.gui.elements.GuiArrowButton; import eu.crushedpixel.replaymod.gui.elements.GuiNumberInput; import eu.crushedpixel.replaymod.holders.*; import eu.crushedpixel.replaymod.replay.ReplayHandler; +import eu.crushedpixel.replaymod.utils.RoundUtils; import eu.crushedpixel.replaymod.utils.TimestampUtils; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; @@ -113,12 +114,12 @@ public class GuiEditKeyframe extends GuiScreen { //Position/Virtual Time Input if(posKeyframe) { Position pos = ((PositionKeyframe)keyframe).getPosition(); - xCoord = new GuiNumberInput(GuiConstants.KEYFRAME_EDITOR_X_INPUT, fontRendererObj, 0, 0, 100, null, null, round(pos.getX()), true); - yCoord = new GuiNumberInput(GuiConstants.KEYFRAME_EDITOR_Y_INPUT, fontRendererObj, 0, 0, 100, null, null, round(pos.getY()), true); - zCoord = new GuiNumberInput(GuiConstants.KEYFRAME_EDITOR_Z_INPUT, fontRendererObj, 0, 0, 100, null, null, round(pos.getZ()), true); - yaw = new GuiNumberInput(GuiConstants.KEYFRAME_EDITOR_YAW_INPUT, fontRendererObj, 0, 0, 100, -90d, 90d, round(pos.getYaw()), true); - pitch = new GuiNumberInput(GuiConstants.KEYFRAME_EDITOR_PITCH_INPUT, fontRendererObj, 0, 0, 100, -180d, 180d, round(pos.getPitch()), true); - roll = new GuiNumberInput(GuiConstants.KEYFRAME_EDITOR_ROLL_INPUT, fontRendererObj, 0, 0, 100, null, null, round(pos.getRoll()), true); + xCoord = new GuiNumberInput(GuiConstants.KEYFRAME_EDITOR_X_INPUT, fontRendererObj, 0, 0, 100, null, null, RoundUtils.round(pos.getX()), true); + yCoord = new GuiNumberInput(GuiConstants.KEYFRAME_EDITOR_Y_INPUT, fontRendererObj, 0, 0, 100, null, null, RoundUtils.round(pos.getY()), true); + zCoord = new GuiNumberInput(GuiConstants.KEYFRAME_EDITOR_Z_INPUT, fontRendererObj, 0, 0, 100, null, null, RoundUtils.round(pos.getZ()), true); + yaw = new GuiNumberInput(GuiConstants.KEYFRAME_EDITOR_YAW_INPUT, fontRendererObj, 0, 0, 100, -90d, 90d, RoundUtils.round(pos.getYaw()), true); + pitch = new GuiNumberInput(GuiConstants.KEYFRAME_EDITOR_PITCH_INPUT, fontRendererObj, 0, 0, 100, -180d, 180d, RoundUtils.round(pos.getPitch()), true); + roll = new GuiNumberInput(GuiConstants.KEYFRAME_EDITOR_ROLL_INPUT, fontRendererObj, 0, 0, 100, null, null, RoundUtils.round(pos.getRoll()), true); posInputs.add(xCoord); posInputs.add(yCoord); @@ -267,10 +268,6 @@ public class GuiEditKeyframe extends GuiScreen { super.drawScreen(mouseX, mouseY, partialTicks); } - private double round(double val) { - return Math.round(val*100.0) / 100.0; - } - @Override protected void actionPerformed(GuiButton button) throws IOException { if(!button.enabled) return; diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/GuiRenderSettings.java b/src/main/java/eu/crushedpixel/replaymod/gui/GuiRenderSettings.java index 231a093a..93bbb7fa 100644 --- a/src/main/java/eu/crushedpixel/replaymod/gui/GuiRenderSettings.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/GuiRenderSettings.java @@ -106,18 +106,7 @@ public class GuiRenderSettings extends GuiScreen { } }; - bitrateInput = new GuiNumberInput(GuiConstants.RENDER_SETTINGS_BITRATE_INPUT, fontRendererObj, 0, 0, 50, 1D, null, 10000D, false) { - @Override - public void drawTextBox() { - int index = getCursorPosition(); - String textBefore = getText(); - setText(textBefore+" kbps"); - setCursorPosition(index); - super.drawTextBox(); - setText(textBefore); - setCursorPosition(index); - } - }; + bitrateInput = new GuiNumberInputWithText(GuiConstants.RENDER_SETTINGS_BITRATE_INPUT, fontRendererObj, 0, 0, 50, 1D, null, 10000D, false, " kbps"); xRes.setEnabled(false); yRes.setEnabled(false); diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiAdvancedTextField.java b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiAdvancedTextField.java index cbf7e3ef..e77f44db 100644 --- a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiAdvancedTextField.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiAdvancedTextField.java @@ -36,7 +36,7 @@ public class GuiAdvancedTextField extends GuiTextField implements GuiElement { @Override public void drawTextBox() { - if (text.isEmpty() && !isFocused()) { + if (text.isEmpty() && !isFocused() && hint.length() > 0) { super.setEnabled(false); super.setDisabledTextColour(hintTextColor); text = hint; diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiEntryList.java b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiEntryList.java index 806a6a41..1541f98d 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiEntryList.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiEntryList.java @@ -120,10 +120,10 @@ public class GuiEntryList extends GuiTextField { } public void addElement(T element) { + if(element == null) return; this.elements.add(element); - if(selectionIndex == -1) { - selectionIndex = 0; - } + selectionIndex = elements.size()-1; + fireSelectionChangeEvent(); } public T getElement(int index) { diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiFileChooser.java b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiFileChooser.java index 22594575..b55bbd92 100644 --- a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiFileChooser.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiFileChooser.java @@ -2,7 +2,6 @@ package eu.crushedpixel.replaymod.gui.elements; import eu.crushedpixel.replaymod.gui.elements.listeners.FileChooseListener; import lombok.Getter; -import lombok.Setter; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; @@ -15,9 +14,13 @@ import java.util.List; public class GuiFileChooser extends GuiButton { @Getter - @Setter private File selectedFile; + public void setSelectedFile(File selectedFile) { + this.selectedFile = selectedFile; + updateDisplayString(); + } + private String baseString; private String[] allowedExtensions = null; @@ -70,8 +73,9 @@ public class GuiFileChooser extends GuiButton { fileDialog.setVisible(true); String filename = fileDialog.getFile(); + String directory = fileDialog.getDirectory(); if(filename != null) { - selectedFile = new File(filename); + selectedFile = new File(directory, filename); updateDisplayString(); diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiNumberInput.java b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiNumberInput.java index 2ca56e4e..20c1514b 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiNumberInput.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiNumberInput.java @@ -15,12 +15,9 @@ public class GuiNumberInput extends GuiTextField { this.minimum = minimum; this.maximum = maximum; this.acceptFloats = acceptFloats; + setCursorPositionZero(); if(defaultValue != null) { - if(acceptFloats) { - setText("" + defaultValue); - } else { - setText("" + (int)Math.round(defaultValue)); - } + setValue(defaultValue); } } @@ -29,6 +26,15 @@ public class GuiNumberInput extends GuiTextField { this(id, fontRenderer, xPos, yPos, width, (double) minimum, (double) maximum, (double) defaultValue, acceptFloats); } + public void setValue(double value) { + if(acceptFloats) { + setText("" + value); + } else { + setText("" + (int)Math.round(value)); + } + setCursorPositionZero(); + } + @Override public void writeText(String text) { String textBefore = getText(); diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiNumberInputWithText.java b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiNumberInputWithText.java new file mode 100644 index 00000000..3185e695 --- /dev/null +++ b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiNumberInputWithText.java @@ -0,0 +1,32 @@ +package eu.crushedpixel.replaymod.gui.elements; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; + +public class GuiNumberInputWithText extends GuiNumberInput { + + private final Minecraft mc = Minecraft.getMinecraft(); + + private String suffix; + + public GuiNumberInputWithText(int id, FontRenderer fontRenderer, + int xPos, int yPos, int width, Double minimum, Double maximum, Double defaultValue, + boolean acceptFloats, String suffix) { + + super(id, fontRenderer, xPos, yPos, width, minimum, maximum, defaultValue, acceptFloats); + if(suffix == null) suffix = ""; + + this.suffix = suffix; + } + + @Override + public void drawTextBox() { + int index = getCursorPosition(); + String textBefore = getText(); + setText(textBefore + suffix); + setCursorPosition(index); + super.drawTextBox(); + setText(textBefore); + setCursorPosition(index); + } +} diff --git a/src/main/java/eu/crushedpixel/replaymod/holders/CustomImageObject.java b/src/main/java/eu/crushedpixel/replaymod/holders/CustomImageObject.java index f55115e0..8c4b4da8 100644 --- a/src/main/java/eu/crushedpixel/replaymod/holders/CustomImageObject.java +++ b/src/main/java/eu/crushedpixel/replaymod/holders/CustomImageObject.java @@ -1,6 +1,7 @@ package eu.crushedpixel.replaymod.holders; import eu.crushedpixel.replaymod.registry.ResourceHelper; +import eu.crushedpixel.replaymod.utils.RoundUtils; import lombok.Getter; import lombok.Setter; import net.minecraft.client.Minecraft; @@ -14,8 +15,25 @@ import java.io.IOException; public class CustomImageObject implements GuiEntryListEntry { - public CustomImageObject(Position position, String name, File imageSource, boolean backVisible) throws IOException { - BufferedImage bufferedImage = ImageIO.read(imageSource); + public CustomImageObject(Position position, String name, final File imageSource, boolean backVisible) throws IOException { + + this.position = new ExtendedPosition(RoundUtils.round(position.getX()), RoundUtils.round(position.getY()), RoundUtils.round(position.getZ()), 0, 0); + + this.name = name; + this.backVisible = backVisible; + + setImageFile(imageSource); + } + + @Getter @Setter private ExtendedPosition position; + @Getter @Setter private String name; + @Getter @Setter private boolean backVisible; + @Getter private File imageFile; + + public void setImageFile(final File imageSource) throws IOException { + this.imageFile = imageSource; + + final BufferedImage bufferedImage = ImageIO.read(imageSource); this.textureWidth = bufferedImage.getWidth(); this.textureHeight = bufferedImage.getHeight(); @@ -31,19 +49,18 @@ public class CustomImageObject implements GuiEntryListEntry { h = 1; } - this.position = new ExtendedPosition(position.getX(), position.getY(), position.getZ(), w, h); - this.name = name; + this.position.setWidth(w); + this.position.setHeight(h); - this.resourceLocation = new ResourceLocation("customImages/"+imageSource.getAbsolutePath()); - this.dynamicTexture = new DynamicTexture(bufferedImage); - - this.backVisible = backVisible; + Minecraft.getMinecraft().addScheduledTask(new Runnable() { + @Override + public void run() { + resourceLocation = new ResourceLocation("customImages/"+imageSource.getAbsolutePath()); + dynamicTexture = new DynamicTexture(bufferedImage); + } + }); } - @Getter @Setter private ExtendedPosition position; - @Getter @Setter private String name; - @Getter @Setter private boolean backVisible; - private ResourceLocation resourceLocation; private DynamicTexture dynamicTexture; diff --git a/src/main/java/eu/crushedpixel/replaymod/holders/GuiEntryListEntry.java b/src/main/java/eu/crushedpixel/replaymod/holders/GuiEntryListEntry.java index 7b015d6f..596ce76b 100644 --- a/src/main/java/eu/crushedpixel/replaymod/holders/GuiEntryListEntry.java +++ b/src/main/java/eu/crushedpixel/replaymod/holders/GuiEntryListEntry.java @@ -3,6 +3,6 @@ package eu.crushedpixel.replaymod.holders; public interface GuiEntryListEntry { - public String getDisplayString(); + String getDisplayString(); } diff --git a/src/main/java/eu/crushedpixel/replaymod/renderer/CustomObjectRenderer.java b/src/main/java/eu/crushedpixel/replaymod/renderer/CustomObjectRenderer.java index e2a59a66..cd15cc7b 100644 --- a/src/main/java/eu/crushedpixel/replaymod/renderer/CustomObjectRenderer.java +++ b/src/main/java/eu/crushedpixel/replaymod/renderer/CustomObjectRenderer.java @@ -95,10 +95,12 @@ public class CustomObjectRenderer { renderer.addVertexWithUV(maxX, maxY, 0, 0, 0); renderer.addVertexWithUV(maxX, minY, 0, 0, 1); - renderer.addVertexWithUV(maxX, maxY, 0, 0, 0); - renderer.addVertexWithUV(minX, maxY, 0, 1, 0); - renderer.addVertexWithUV(minX, minY, 0, 1, 1); - renderer.addVertexWithUV(maxX, minY, 0, 0, 1); + if(customImageObject.isBackVisible()) { + renderer.addVertexWithUV(maxX, maxY, 0, 0, 0); + renderer.addVertexWithUV(minX, maxY, 0, 1, 0); + renderer.addVertexWithUV(minX, minY, 0, 1, 1); + renderer.addVertexWithUV(maxX, minY, 0, 0, 1); + } tessellator.draw(); renderer.setTranslation(0, 0, 0); diff --git a/src/main/java/eu/crushedpixel/replaymod/replay/ReplayHandler.java b/src/main/java/eu/crushedpixel/replaymod/replay/ReplayHandler.java index 62c0bdfe..a971f451 100755 --- a/src/main/java/eu/crushedpixel/replaymod/replay/ReplayHandler.java +++ b/src/main/java/eu/crushedpixel/replaymod/replay/ReplayHandler.java @@ -744,4 +744,8 @@ public class ReplayHandler { public static void addCustomImageObject(CustomImageObject object) { customImageObjects.add(object); } + + public static void setCustomImageObjects(List objects) { + customImageObjects = objects; + } } diff --git a/src/main/java/eu/crushedpixel/replaymod/utils/RoundUtils.java b/src/main/java/eu/crushedpixel/replaymod/utils/RoundUtils.java new file mode 100644 index 00000000..bb4289f0 --- /dev/null +++ b/src/main/java/eu/crushedpixel/replaymod/utils/RoundUtils.java @@ -0,0 +1,7 @@ +package eu.crushedpixel.replaymod.utils; + +public class RoundUtils { + + public static double round(double val) { return Math.round(val*100.0) / 100.0; } + +} diff --git a/src/main/resources/assets/replaymod/lang/en_US.lang b/src/main/resources/assets/replaymod/lang/en_US.lang index dbc6585d..3bbe7e2c 100644 --- a/src/main/resources/assets/replaymod/lang/en_US.lang +++ b/src/main/resources/assets/replaymod/lang/en_US.lang @@ -359,4 +359,8 @@ replaymod.gui.clearcallback.message=This Callback can be disabled in the Replay #Asset Adder Gui replaymod.gui.assets.title=Asset Manager -replaymod.gui.assets.filechooser=Image File \ No newline at end of file +replaymod.gui.assets.filechooser=Image File +replaymod.gui.assets.defaultname=New Asset +replaymod.gui.assets.emptylist=No Assets available +replaymod.gui.assets.namehint=Asset Name +replaymod.gui.assets.backvisible=Visible from behind \ No newline at end of file