Swap parent relation between render settings and queue
Previously you'd access the render queue from the render settings screen which was arguably the wrong way around (e.g. you weren't able to access the queue when your current keyframes were incorrect even if you only wanted to render those in the queue). Now the render button opens the queue which can open a new settings popup. To save people who don't need the queue from always having to go through it, the queue will immediately open a new settings popup if does not yet have any jobs.
This commit is contained in:
2
jGui
2
jGui
Submodule jGui updated: 7713f2985a...6aeba190a6
@@ -20,6 +20,6 @@ public class AdvancedScreenshots implements Extra {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void takeScreenshot() {
|
private void takeScreenshot() {
|
||||||
ReplayMod.instance.runLater(() -> new GuiCreateScreenshot(mod).display());
|
ReplayMod.instance.runLater(() -> new GuiCreateScreenshot(mod).open());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ public class GuiCreateScreenshot extends GuiRenderSettings implements Loadable {
|
|||||||
private final ReplayMod mod;
|
private final ReplayMod mod;
|
||||||
|
|
||||||
public GuiCreateScreenshot(ReplayMod mod) {
|
public GuiCreateScreenshot(ReplayMod mod) {
|
||||||
super(null, null);
|
super(GuiRenderSettings.createBaseScreen(), null, null);
|
||||||
|
|
||||||
this.mod = mod;
|
this.mod = mod;
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ public class GuiCreateScreenshot extends GuiRenderSettings implements Loadable {
|
|||||||
|
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
error(LOGGER, GuiCreateScreenshot.this, CrashReport.create(t, "Rendering video"), () -> {});
|
error(LOGGER, GuiCreateScreenshot.this, CrashReport.create(t, "Rendering video"), () -> {});
|
||||||
display(); // Re-show the render settings gui and the new error popup
|
getScreen().display(); // Re-show the render settings gui and the new error popup
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -75,6 +75,18 @@ public class GuiCreateScreenshot extends GuiRenderSettings implements Loadable {
|
|||||||
return container;
|
return container;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void open() {
|
||||||
|
super.open();
|
||||||
|
getScreen().display();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() {
|
||||||
|
super.close();
|
||||||
|
getMinecraft().openScreen(null);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load() {
|
public void load() {
|
||||||
// pause replay when opening this gui
|
// pause replay when opening this gui
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import com.google.common.util.concurrent.Futures;
|
|||||||
import com.replaymod.core.ReplayMod;
|
import com.replaymod.core.ReplayMod;
|
||||||
import com.replaymod.core.utils.Utils;
|
import com.replaymod.core.utils.Utils;
|
||||||
import com.replaymod.core.versions.MCVer;
|
import com.replaymod.core.versions.MCVer;
|
||||||
|
import com.replaymod.render.RenderSettings;
|
||||||
import com.replaymod.render.ReplayModRender;
|
import com.replaymod.render.ReplayModRender;
|
||||||
import com.replaymod.render.VideoWriter;
|
import com.replaymod.render.VideoWriter;
|
||||||
import com.replaymod.render.rendering.VideoRenderer;
|
import com.replaymod.render.rendering.VideoRenderer;
|
||||||
@@ -41,6 +42,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import static com.replaymod.render.ReplayModRender.LOGGER;
|
import static com.replaymod.render.ReplayModRender.LOGGER;
|
||||||
|
|
||||||
@@ -77,9 +79,11 @@ public class GuiRenderQueue extends AbstractGuiPopup<GuiRenderQueue> implements
|
|||||||
renameButton, removeButton),
|
renameButton, removeButton),
|
||||||
closeButton);
|
closeButton);
|
||||||
|
|
||||||
private final AbstractGuiScreen container;
|
private final AbstractGuiScreen<?> container;
|
||||||
private final ReplayHandler replayHandler;
|
private final ReplayHandler replayHandler;
|
||||||
private final Set<Entry> selectedEntries = new HashSet<>();
|
private final Set<Entry> selectedEntries = new HashSet<>();
|
||||||
|
private final Supplier<Timeline> timelineSupplier;
|
||||||
|
private boolean opened;
|
||||||
|
|
||||||
{
|
{
|
||||||
popup.setLayout(new CustomLayout<GuiPanel>() {
|
popup.setLayout(new CustomLayout<GuiPanel>() {
|
||||||
@@ -100,64 +104,23 @@ public class GuiRenderQueue extends AbstractGuiPopup<GuiRenderQueue> implements
|
|||||||
}).addElements(null, title, list, buttonPanel);
|
}).addElements(null, title, list, buttonPanel);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GuiRenderQueue(AbstractGuiScreen container, GuiRenderSettings guiRenderSettings, ReplayHandler replayHandler, Timeline timeline) {
|
private final List<RenderJob> jobs = ReplayModRender.instance.getRenderQueue();
|
||||||
|
|
||||||
|
public GuiRenderQueue(AbstractGuiScreen<?> container, ReplayHandler replayHandler, Supplier<Timeline> timelineSupplier) {
|
||||||
super(container);
|
super(container);
|
||||||
this.container = container;
|
this.container = container;
|
||||||
this.replayHandler = replayHandler;
|
this.replayHandler = replayHandler;
|
||||||
|
this.timelineSupplier = timelineSupplier;
|
||||||
LOGGER.trace("Opening render queue popup");
|
LOGGER.trace("Opening render queue popup");
|
||||||
|
|
||||||
setBackgroundColor(Colors.DARK_TRANSPARENT);
|
setBackgroundColor(Colors.DARK_TRANSPARENT);
|
||||||
|
|
||||||
List<RenderJob> queue = ReplayModRender.instance.getRenderQueue();
|
for (RenderJob renderJob : jobs) {
|
||||||
|
|
||||||
for (RenderJob renderJob : queue) {
|
|
||||||
LOGGER.trace("Adding {} to job queue list", renderJob);
|
LOGGER.trace("Adding {} to job queue list", renderJob);
|
||||||
list.getListPanel().addElements(null, new Entry(renderJob));
|
list.getListPanel().addElements(null, new Entry(renderJob));
|
||||||
}
|
}
|
||||||
|
|
||||||
addButton.onClick(() -> {
|
addButton.onClick(this::addButtonClicked);
|
||||||
LOGGER.trace("Add button clicked");
|
|
||||||
// Open popup
|
|
||||||
GuiYesNoPopup popup = GuiYesNoPopup.open(container)
|
|
||||||
.setYesI18nLabel("replaymod.gui.add").setNoI18nLabel("replaymod.gui.cancel");
|
|
||||||
popup.getInfo().setLayout(new HorizontalLayout(HorizontalLayout.Alignment.CENTER).setSpacing(5));
|
|
||||||
// Add content
|
|
||||||
GuiLabel label = new GuiLabel().setI18nText("replaymod.gui.renderqueue.jobname").setColor(Colors.BLACK);
|
|
||||||
GuiTextField nameField = new GuiTextField().setSize(150, 20).setFocused(true);
|
|
||||||
nameField.setText(guiRenderSettings.getOutputFile().getName());
|
|
||||||
popup.getInfo().addElements(new HorizontalLayout.Data(0.5), label, nameField);
|
|
||||||
// Disable "Yes" button while name is empty
|
|
||||||
nameField.onTextChanged(old -> popup.getYesButton().setEnabled(!nameField.getText().isEmpty())).onEnter(() -> {
|
|
||||||
if (popup.getYesButton().isEnabled()) {
|
|
||||||
popup.getYesButton().onClick();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// Register callback
|
|
||||||
Futures.addCallback(popup.getFuture(), new FutureCallback<Boolean>() {
|
|
||||||
@Override
|
|
||||||
public void onSuccess(@Nullable Boolean result) {
|
|
||||||
if (result == Boolean.TRUE) {
|
|
||||||
RenderJob newJob = new RenderJob();
|
|
||||||
newJob.setName(nameField.getText());
|
|
||||||
newJob.setSettings(guiRenderSettings.save(false));
|
|
||||||
newJob.setTimeline(timeline);
|
|
||||||
LOGGER.trace("Adding new job: {}", newJob);
|
|
||||||
queue.add(newJob);
|
|
||||||
list.getListPanel().addElements(null, new Entry(newJob));
|
|
||||||
} else {
|
|
||||||
LOGGER.trace("Adding cancelled");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFailure(Throwable t) {
|
|
||||||
LOGGER.error("Add Job popup:", t);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
if (guiRenderSettings != null) {
|
|
||||||
addButton.setEnabled(guiRenderSettings.renderButton.isEnabled());
|
|
||||||
}
|
|
||||||
|
|
||||||
renameButton.onClick(() -> {
|
renameButton.onClick(() -> {
|
||||||
Entry selectedEntry = selectedEntries.iterator().next();
|
Entry selectedEntry = selectedEntries.iterator().next();
|
||||||
@@ -200,7 +163,7 @@ public class GuiRenderQueue extends AbstractGuiPopup<GuiRenderQueue> implements
|
|||||||
for (Entry entry : selectedEntries) {
|
for (Entry entry : selectedEntries) {
|
||||||
LOGGER.trace("Remove button clicked for {}", entry.job);
|
LOGGER.trace("Remove button clicked for {}", entry.job);
|
||||||
list.getListPanel().removeElement(entry);
|
list.getListPanel().removeElement(entry);
|
||||||
queue.remove(entry.job);
|
jobs.remove(entry.job);
|
||||||
}
|
}
|
||||||
selectedEntries.clear();
|
selectedEntries.clear();
|
||||||
updateButtons();
|
updateButtons();
|
||||||
@@ -260,9 +223,72 @@ public class GuiRenderQueue extends AbstractGuiPopup<GuiRenderQueue> implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private GuiRenderSettings addButtonClicked() {
|
||||||
|
Timeline timeline = timelineSupplier.get();
|
||||||
|
if (timeline != null) {
|
||||||
|
GuiRenderSettings popup = addJob(timeline);
|
||||||
|
popup.open();
|
||||||
|
return popup;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public GuiRenderSettings addJob(Timeline timeline) {
|
||||||
|
return new GuiRenderSettings(container, replayHandler, timeline) {
|
||||||
|
{
|
||||||
|
if (!jobs.isEmpty()) {
|
||||||
|
buttonPanel.removeElement(renderButton);
|
||||||
|
}
|
||||||
|
queueButton.onClick(() -> {
|
||||||
|
RenderSettings settings = save(false);
|
||||||
|
|
||||||
|
RenderJob newJob = new RenderJob();
|
||||||
|
newJob.setName(settings.getOutputFile().getName());
|
||||||
|
newJob.setSettings(settings);
|
||||||
|
newJob.setTimeline(timeline);
|
||||||
|
LOGGER.trace("Adding new job: {}", newJob);
|
||||||
|
jobs.add(newJob);
|
||||||
|
list.getListPanel().addElements(null, new Entry(newJob));
|
||||||
|
updateButtons();
|
||||||
|
|
||||||
|
// Need to close the inner popup before we can open the outer one
|
||||||
|
close();
|
||||||
|
if (!opened) {
|
||||||
|
GuiRenderQueue.this.open();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() {
|
||||||
|
super.close();
|
||||||
|
if (!opened && jobs.isEmpty()) {
|
||||||
|
GuiRenderQueue.this.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void open() {
|
public void open() {
|
||||||
|
if (jobs.isEmpty()) {
|
||||||
|
if (addButtonClicked() == null) {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
super.open();
|
super.open();
|
||||||
|
opened = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void close() {
|
||||||
|
if (opened) {
|
||||||
|
super.close();
|
||||||
|
}
|
||||||
|
opened = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import com.replaymod.render.VideoWriter;
|
|||||||
import com.replaymod.render.rendering.VideoRenderer;
|
import com.replaymod.render.rendering.VideoRenderer;
|
||||||
import com.replaymod.replay.ReplayHandler;
|
import com.replaymod.replay.ReplayHandler;
|
||||||
import com.replaymod.replaystudio.pathing.path.Timeline;
|
import com.replaymod.replaystudio.pathing.path.Timeline;
|
||||||
|
import de.johni0702.minecraft.gui.container.AbstractGuiScreen;
|
||||||
import de.johni0702.minecraft.gui.container.GuiContainer;
|
import de.johni0702.minecraft.gui.container.GuiContainer;
|
||||||
import de.johni0702.minecraft.gui.container.GuiPanel;
|
import de.johni0702.minecraft.gui.container.GuiPanel;
|
||||||
import de.johni0702.minecraft.gui.container.GuiScreen;
|
import de.johni0702.minecraft.gui.container.GuiScreen;
|
||||||
@@ -21,11 +22,11 @@ import de.johni0702.minecraft.gui.container.GuiVerticalList;
|
|||||||
import de.johni0702.minecraft.gui.element.*;
|
import de.johni0702.minecraft.gui.element.*;
|
||||||
import de.johni0702.minecraft.gui.element.advanced.GuiColorPicker;
|
import de.johni0702.minecraft.gui.element.advanced.GuiColorPicker;
|
||||||
import de.johni0702.minecraft.gui.element.advanced.GuiDropdownMenu;
|
import de.johni0702.minecraft.gui.element.advanced.GuiDropdownMenu;
|
||||||
import de.johni0702.minecraft.gui.function.Closeable;
|
|
||||||
import de.johni0702.minecraft.gui.layout.CustomLayout;
|
import de.johni0702.minecraft.gui.layout.CustomLayout;
|
||||||
import de.johni0702.minecraft.gui.layout.GridLayout;
|
import de.johni0702.minecraft.gui.layout.GridLayout;
|
||||||
import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
||||||
import de.johni0702.minecraft.gui.layout.VerticalLayout;
|
import de.johni0702.minecraft.gui.layout.VerticalLayout;
|
||||||
|
import de.johni0702.minecraft.gui.popup.AbstractGuiPopup;
|
||||||
import de.johni0702.minecraft.gui.popup.GuiFileChooserPopup;
|
import de.johni0702.minecraft.gui.popup.GuiFileChooserPopup;
|
||||||
import de.johni0702.minecraft.gui.utils.Colors;
|
import de.johni0702.minecraft.gui.utils.Colors;
|
||||||
import de.johni0702.minecraft.gui.utils.Consumer;
|
import de.johni0702.minecraft.gui.utils.Consumer;
|
||||||
@@ -57,8 +58,9 @@ import static com.replaymod.render.ReplayModRender.LOGGER;
|
|||||||
import net.minecraft.text.TranslatableText;
|
import net.minecraft.text.TranslatableText;
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
public class GuiRenderSettings extends GuiScreen implements Closeable {
|
public class GuiRenderSettings extends AbstractGuiPopup<GuiRenderSettings> {
|
||||||
public final GuiPanel contentPanel = new GuiPanel(this).setBackgroundColor(Colors.DARK_TRANSPARENT);
|
{ disablePopupBackground(); }
|
||||||
|
public final GuiPanel contentPanel = new GuiPanel(popup).setBackgroundColor(new Color(0, 0, 0, 230));
|
||||||
public final GuiVerticalList settingsList = new GuiVerticalList(contentPanel).setDrawSlider(true);
|
public final GuiVerticalList settingsList = new GuiVerticalList(contentPanel).setDrawSlider(true);
|
||||||
|
|
||||||
public final GuiDropdownMenu<RenderSettings.RenderMethod> renderMethodDropdown =
|
public final GuiDropdownMenu<RenderSettings.RenderMethod> renderMethodDropdown =
|
||||||
@@ -227,12 +229,9 @@ public class GuiRenderSettings extends GuiScreen implements Closeable {
|
|||||||
|
|
||||||
|
|
||||||
public final GuiPanel buttonPanel = new GuiPanel(contentPanel).setLayout(new HorizontalLayout().setSpacing(4));
|
public final GuiPanel buttonPanel = new GuiPanel(contentPanel).setLayout(new HorizontalLayout().setSpacing(4));
|
||||||
public final GuiButton queueButton = new GuiButton(buttonPanel).onClick(new Runnable() {
|
public final GuiButton queueButton = new GuiButton(buttonPanel)
|
||||||
@Override
|
.setSize(100, 20)
|
||||||
public void run() {
|
.setI18nLabel("replaymod.gui.rendersettings.addtoqueue");
|
||||||
new GuiRenderQueue(GuiRenderSettings.this, GuiRenderSettings.this, replayHandler, timeline).open();
|
|
||||||
}
|
|
||||||
}).setSize(100, 20).setI18nLabel("replaymod.gui.renderqueue.open");
|
|
||||||
public final GuiButton renderButton = new GuiButton(buttonPanel).onClick(() -> ReplayMod.instance.runLaterWithoutLock(new Runnable() {
|
public final GuiButton renderButton = new GuiButton(buttonPanel).onClick(() -> ReplayMod.instance.runLaterWithoutLock(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -245,7 +244,7 @@ public class GuiRenderSettings extends GuiScreen implements Closeable {
|
|||||||
LOGGER.error("Rendering video:", e);
|
LOGGER.error("Rendering video:", e);
|
||||||
NoticeScreen errorScreen = new NoticeScreen(
|
NoticeScreen errorScreen = new NoticeScreen(
|
||||||
//#if MC>=11400
|
//#if MC>=11400
|
||||||
GuiRenderSettings.this::display,
|
getScreen()::display,
|
||||||
new TranslatableText("replaymod.gui.rendering.error.title"),
|
new TranslatableText("replaymod.gui.rendering.error.title"),
|
||||||
new TranslatableText("replaymod.gui.rendering.error.message")
|
new TranslatableText("replaymod.gui.rendering.error.message")
|
||||||
//#else
|
//#else
|
||||||
@@ -263,26 +262,17 @@ public class GuiRenderSettings extends GuiScreen implements Closeable {
|
|||||||
});
|
});
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
error(LOGGER, GuiRenderSettings.this, CrashReport.create(t, "Rendering video"), () -> {});
|
error(LOGGER, GuiRenderSettings.this, CrashReport.create(t, "Rendering video"), () -> {});
|
||||||
display(); // Re-show the render settings gui and the new error popup
|
getScreen().display(); // Re-show the render settings gui and the new error popup
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})).setSize(100, 20).setI18nLabel("replaymod.gui.render");
|
})).setSize(100, 20).setI18nLabel("replaymod.gui.render");
|
||||||
public final GuiButton cancelButton = new GuiButton(buttonPanel).onClick(new Runnable() {
|
public final GuiButton cancelButton = new GuiButton(buttonPanel)
|
||||||
@Override
|
.onClick(this::close)
|
||||||
public void run() {
|
.setSize(100, 20)
|
||||||
getMinecraft().openScreen(null);
|
.setI18nLabel("replaymod.gui.cancel");
|
||||||
}
|
|
||||||
}).setSize(100, 20).setI18nLabel("replaymod.gui.cancel");
|
|
||||||
|
|
||||||
{
|
{
|
||||||
setBackground(Background.NONE);
|
|
||||||
Utils.link(videoWidth, videoHeight, bitRateField);
|
Utils.link(videoWidth, videoHeight, bitRateField);
|
||||||
setLayout(new CustomLayout<GuiScreen>() {
|
|
||||||
@Override
|
|
||||||
protected void layout(GuiScreen container, int width, int height) {
|
|
||||||
pos(contentPanel, width / 2 - width(contentPanel) / 2, height / 2 - height(contentPanel) / 2);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
contentPanel.setLayout(new CustomLayout<GuiPanel>() {
|
contentPanel.setLayout(new CustomLayout<GuiPanel>() {
|
||||||
@Override
|
@Override
|
||||||
@@ -294,7 +284,7 @@ public class GuiRenderSettings extends GuiScreen implements Closeable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ReadableDimension calcMinSize(GuiContainer<?> container) {
|
public ReadableDimension calcMinSize(GuiContainer<?> container) {
|
||||||
ReadableDimension screenSize = getMinSize();
|
ReadableDimension screenSize = getContainer().getMinSize();
|
||||||
return new Dimension(screenSize.getWidth() - 40, screenSize.getHeight() - 40);
|
return new Dimension(screenSize.getWidth() - 40, screenSize.getHeight() - 40);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -319,12 +309,15 @@ public class GuiRenderSettings extends GuiScreen implements Closeable {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final AbstractGuiScreen<?> screen;
|
||||||
private final ReplayHandler replayHandler;
|
private final ReplayHandler replayHandler;
|
||||||
private final Timeline timeline;
|
private final Timeline timeline;
|
||||||
private File outputFile;
|
private File outputFile;
|
||||||
private boolean userDefinedOutputFileName;
|
private boolean userDefinedOutputFileName;
|
||||||
|
|
||||||
public GuiRenderSettings(ReplayHandler replayHandler, Timeline timeline) {
|
public GuiRenderSettings(AbstractGuiScreen<?> container, ReplayHandler replayHandler, Timeline timeline) {
|
||||||
|
super(container);
|
||||||
|
this.screen = container;
|
||||||
this.replayHandler = replayHandler;
|
this.replayHandler = replayHandler;
|
||||||
this.timeline = timeline;
|
this.timeline = timeline;
|
||||||
|
|
||||||
@@ -361,10 +354,12 @@ public class GuiRenderSettings extends GuiScreen implements Closeable {
|
|||||||
String error = updateResolution();
|
String error = updateResolution();
|
||||||
if (error == null) {
|
if (error == null) {
|
||||||
renderButton.setEnabled().setTooltip(null);
|
renderButton.setEnabled().setTooltip(null);
|
||||||
|
queueButton.setEnabled().setTooltip(null);
|
||||||
videoWidth.setTextColor(Colors.WHITE);
|
videoWidth.setTextColor(Colors.WHITE);
|
||||||
videoHeight.setTextColor(Colors.WHITE);
|
videoHeight.setTextColor(Colors.WHITE);
|
||||||
} else {
|
} else {
|
||||||
renderButton.setDisabled().setTooltip(new GuiTooltip().setI18nText(error));
|
renderButton.setDisabled().setTooltip(new GuiTooltip().setI18nText(error));
|
||||||
|
queueButton.setDisabled().setTooltip(new GuiTooltip().setI18nText(error));
|
||||||
videoWidth.setTextColor(Colors.RED);
|
videoWidth.setTextColor(Colors.RED);
|
||||||
videoHeight.setTextColor(Colors.RED);
|
videoHeight.setTextColor(Colors.RED);
|
||||||
}
|
}
|
||||||
@@ -574,8 +569,8 @@ public class GuiRenderSettings extends GuiScreen implements Closeable {
|
|||||||
return new File(folder, fileName + "." + encodingPreset.getFileExtension());
|
return new File(folder, fileName + "." + encodingPreset.getFileExtension());
|
||||||
}
|
}
|
||||||
|
|
||||||
public File getOutputFile() {
|
public AbstractGuiScreen<?> getScreen() {
|
||||||
return outputFile;
|
return screen;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected File conformExtension(File file, RenderSettings.EncodingPreset preset) {
|
protected File conformExtension(File file, RenderSettings.EncodingPreset preset) {
|
||||||
@@ -595,6 +590,11 @@ public class GuiRenderSettings extends GuiScreen implements Closeable {
|
|||||||
true, false, false, false, null, 360, 180, false, RenderSettings.AntiAliasing.NONE, "", RenderSettings.EncodingPreset.MP4_DEFAULT.getValue(), false);
|
true, false, false, false, null, 360, 180, false, RenderSettings.AntiAliasing.NONE, "", RenderSettings.EncodingPreset.MP4_DEFAULT.getValue(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void open() {
|
||||||
|
super.open();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
RenderSettings settings = save(true);
|
RenderSettings settings = save(true);
|
||||||
@@ -604,9 +604,21 @@ public class GuiRenderSettings extends GuiScreen implements Closeable {
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOGGER.error("Saving render settings:", e);
|
LOGGER.error("Saving render settings:", e);
|
||||||
}
|
}
|
||||||
|
super.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ReplayHandler getReplayHandler() {
|
public ReplayHandler getReplayHandler() {
|
||||||
return replayHandler;
|
return replayHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected GuiRenderSettings getThis() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static GuiScreen createBaseScreen() {
|
||||||
|
GuiScreen screen = new GuiScreen();
|
||||||
|
screen.setBackground(AbstractGuiScreen.Background.NONE);
|
||||||
|
return screen;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import com.replaymod.pathing.player.RealtimeTimelinePlayer;
|
|||||||
import com.replaymod.pathing.properties.CameraProperties;
|
import com.replaymod.pathing.properties.CameraProperties;
|
||||||
import com.replaymod.pathing.properties.SpectatorProperty;
|
import com.replaymod.pathing.properties.SpectatorProperty;
|
||||||
import com.replaymod.pathing.properties.TimestampProperty;
|
import com.replaymod.pathing.properties.TimestampProperty;
|
||||||
|
import com.replaymod.render.gui.GuiRenderQueue;
|
||||||
import com.replaymod.render.gui.GuiRenderSettings;
|
import com.replaymod.render.gui.GuiRenderSettings;
|
||||||
import com.replaymod.replay.ReplayHandler;
|
import com.replaymod.replay.ReplayHandler;
|
||||||
import com.replaymod.replay.camera.CameraEntity;
|
import com.replaymod.replay.camera.CameraEntity;
|
||||||
@@ -27,8 +28,10 @@ import com.replaymod.simplepathing.SPTimeline.SPPath;
|
|||||||
import com.replaymod.simplepathing.Setting;
|
import com.replaymod.simplepathing.Setting;
|
||||||
import de.johni0702.minecraft.gui.GuiRenderer;
|
import de.johni0702.minecraft.gui.GuiRenderer;
|
||||||
import de.johni0702.minecraft.gui.RenderInfo;
|
import de.johni0702.minecraft.gui.RenderInfo;
|
||||||
|
import de.johni0702.minecraft.gui.container.AbstractGuiScreen;
|
||||||
import de.johni0702.minecraft.gui.container.GuiContainer;
|
import de.johni0702.minecraft.gui.container.GuiContainer;
|
||||||
import de.johni0702.minecraft.gui.container.GuiPanel;
|
import de.johni0702.minecraft.gui.container.GuiPanel;
|
||||||
|
import de.johni0702.minecraft.gui.container.GuiScreen;
|
||||||
import de.johni0702.minecraft.gui.element.GuiElement;
|
import de.johni0702.minecraft.gui.element.GuiElement;
|
||||||
import de.johni0702.minecraft.gui.element.GuiHorizontalScrollbar;
|
import de.johni0702.minecraft.gui.element.GuiHorizontalScrollbar;
|
||||||
import de.johni0702.minecraft.gui.element.GuiLabel;
|
import de.johni0702.minecraft.gui.element.GuiLabel;
|
||||||
@@ -100,7 +103,15 @@ public class GuiPathing {
|
|||||||
public void run() {
|
public void run() {
|
||||||
Timeline timeline = preparePathsForPlayback(false);
|
Timeline timeline = preparePathsForPlayback(false);
|
||||||
if (timeline == null) return;
|
if (timeline == null) return;
|
||||||
new GuiRenderSettings(replayHandler, timeline).display();
|
GuiScreen screen = GuiRenderSettings.createBaseScreen();
|
||||||
|
new GuiRenderQueue(screen, replayHandler, () -> preparePathsForPlayback(false)) {
|
||||||
|
@Override
|
||||||
|
protected void close() {
|
||||||
|
super.close();
|
||||||
|
getMinecraft().openScreen(null);
|
||||||
|
}
|
||||||
|
}.open();
|
||||||
|
screen.display();
|
||||||
}
|
}
|
||||||
}).setSize(20, 20).setTexture(ReplayMod.TEXTURE, ReplayMod.TEXTURE_SIZE).setTexturePosH(40, 0)
|
}).setSize(20, 20).setTexture(ReplayMod.TEXTURE, ReplayMod.TEXTURE_SIZE).setTexturePosH(40, 0)
|
||||||
.setTooltip(new GuiTooltip().setI18nText("replaymod.gui.ingame.menu.renderpath"));
|
.setTooltip(new GuiTooltip().setI18nText("replaymod.gui.ingame.menu.renderpath"));
|
||||||
|
|||||||
Reference in New Issue
Block a user