Files
ReplayModCinematic/src/main/java/eu/crushedpixel/replaymod/gui/online/GuiReplayInstanceChooser.java
johni0702 f925d56ca2 Split mod into core, recording, replay, render[todo], paths[todo] and extras[wip] modules
Move everything to com.replaymod package
Add KeyBindingRegistry and SettingsRegistry
Recreate settings GUI with new GUI API and dynamically from SettingsRegistry
Use ReplayFile from ReplayStudio
ReplayHandler is now object oriented
Add GuiOverlay, GuiSlider and GuiTexturedButton to GUI API
Rewrite both overlays to use new GUI API
Fix size capping in vertical and horizontal layout
Allow CustomLayouts to have parents
Fix tooltip rendering when close to screen border
Allow changing of columns in GridLayout
2015-10-03 17:36:04 +02:00

168 lines
6.3 KiB
Java

package eu.crushedpixel.replaymod.gui.online;
import com.mojang.realmsclient.gui.ChatFormatting;
import eu.crushedpixel.replaymod.api.replay.holders.FileInfo;
import eu.crushedpixel.replaymod.gui.elements.ComposedElement;
import eu.crushedpixel.replaymod.gui.elements.GuiAdvancedButton;
import eu.crushedpixel.replaymod.gui.elements.GuiDropdown;
import eu.crushedpixel.replaymod.gui.elements.GuiString;
import eu.crushedpixel.replaymod.holders.GuiEntryListValueEntry;
import eu.crushedpixel.replaymod.utils.ReplayFileIO;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.resources.I18n;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class GuiReplayInstanceChooser extends GuiScreen {
private boolean initialized = false;
private GuiString dropdownTitle;
private GuiDropdown<GuiEntryListValueEntry<File>> fileDropdown;
private GuiAdvancedButton chooseButton, cancelButton;
private ComposedElement composedElement;
private List<File> filesToChooseFrom = new ArrayList<File>();
private final String TITLE = I18n.format("replaymod.gui.viewer.chooser.title");
private final String REPLAYFILE = I18n.format("replaymod.gui.editor.replayfile")+":";
private final String MESSAGE;
private final String ORIGINAL = ChatFormatting.GREEN+I18n.format("replaymod.gui.original")+ChatFormatting.RESET;
private final String MODIFIED = ChatFormatting.RED+I18n.format("replaymod.gui.modified")+ChatFormatting.RESET;
public GuiReplayInstanceChooser(final FileInfo fileInfo, File downloadedFile) {
int id = fileInfo.getId();
this.MESSAGE = I18n.format("replaymod.gui.viewer.chooser.message", ChatFormatting.UNDERLINE+fileInfo.getName()+ChatFormatting.RESET);
//gather all applicable replay files
try {
File replayFolder = ReplayFileIO.getReplayFolder();
List<File> chooseableFiles = new ArrayList<File>();
File[] files = replayFolder.listFiles();
if(files != null) {
for(File file : files) {
try {
String extension = FilenameUtils.getExtension(file.getAbsolutePath());
if(!"zip".equals(extension)) continue;
String filename = FilenameUtils.getBaseName(file.getAbsolutePath());
String[] split = filename.split("_");
String first = split[0];
if(StringUtils.isNumeric(first) && Integer.valueOf(first) == id) {
chooseableFiles.add(file);
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
//if no modified versions of the replay were found, start the downloaded one
if(chooseableFiles.isEmpty()) {
// TODO
// ReplayHandler.startReplay(downloadedFile);
return;
}
chooseableFiles.add(0, downloadedFile);
this.filesToChooseFrom = chooseableFiles;
} catch(IOException e) {
e.printStackTrace();
}
}
@Override
public void initGui() {
if(!initialized) {
dropdownTitle = new GuiString(0, 0, Color.WHITE, REPLAYFILE);
fileDropdown = new GuiDropdown<GuiEntryListValueEntry<File>>(fontRendererObj, 0, 0, 0, 5);
int i = 0;
for(File file : filesToChooseFrom) {
String displayName = FilenameUtils.getName(file.getAbsolutePath()) + " (" + (i == 0 ? ORIGINAL : MODIFIED) + ")";
fileDropdown.addElement(new GuiEntryListValueEntry<File>(displayName, file));
i++;
}
chooseButton = new GuiAdvancedButton(0, 0, 100, 20, I18n.format("replaymod.gui.load"), new Runnable() {
@Override
public void run() {
try {
File file = fileDropdown.getElement(fileDropdown.getSelectionIndex()).getValue();
//TODO
// ReplayHandler.startReplay(file);
} catch(Exception e) {
e.printStackTrace();
}
}
}, null);
cancelButton = new GuiAdvancedButton(0, 0, 100, 20, I18n.format("replaymod.gui.cancel"), new Runnable() {
@Override
public void run() {
mc.displayGuiScreen(new GuiReplayCenter());
}
}, null);
composedElement = new ComposedElement(dropdownTitle, fileDropdown, chooseButton, cancelButton);
}
fileDropdown.width = 200;
int strWidth = fontRendererObj.getStringWidth(REPLAYFILE);
int totWidth = strWidth + fileDropdown.width + 5;
dropdownTitle.positionX = (this.width-totWidth)/2;
fileDropdown.xPosition = dropdownTitle.positionX + strWidth + 5;
fileDropdown.yPosition = this.height/2 - 10;
dropdownTitle.positionY = fileDropdown.yPosition + 6;
cancelButton.xPosition = this.width - 100 - 5;
chooseButton.xPosition = cancelButton.xPosition - 100 - 5;
cancelButton.yPosition = chooseButton.yPosition = this.height - 5 - 20;
this.initialized = true;
}
@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
this.drawDefaultBackground();
drawCenteredString(fontRendererObj, ChatFormatting.UNDERLINE+TITLE, this.width / 2, 15, Color.WHITE.getRGB());
String[] lines = eu.crushedpixel.replaymod.utils.StringUtils.splitStringInMultipleRows(MESSAGE, this.width-40);
int i = 0;
for(String line : lines) {
drawString(fontRendererObj, line, 20, 40+(15*i), Color.WHITE.getRGB());
i++;
}
composedElement.draw(mc, mouseX, mouseY);
}
@Override
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
composedElement.mouseClick(mc, mouseX, mouseY, mouseButton);
}
@Override
protected void mouseReleased(int mouseX, int mouseY, int state) {
composedElement.mouseRelease(mc, mouseX, mouseY, state);
}
}