Added Render Time and Time Left display to GuiVideoRenderer
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package eu.crushedpixel.replaymod.gui;
|
package eu.crushedpixel.replaymod.gui;
|
||||||
|
|
||||||
import eu.crushedpixel.replaymod.gui.elements.GuiProgressBar;
|
import eu.crushedpixel.replaymod.gui.elements.GuiProgressBar;
|
||||||
|
import eu.crushedpixel.replaymod.utils.DurationUtils;
|
||||||
import eu.crushedpixel.replaymod.video.VideoRenderer;
|
import eu.crushedpixel.replaymod.video.VideoRenderer;
|
||||||
import eu.crushedpixel.replaymod.video.frame.FrameRenderer;
|
import eu.crushedpixel.replaymod.video.frame.FrameRenderer;
|
||||||
import net.minecraft.client.gui.GuiButton;
|
import net.minecraft.client.gui.GuiButton;
|
||||||
@@ -26,6 +27,15 @@ public class GuiVideoRenderer extends GuiScreen {
|
|||||||
private GuiCheckBox previewCheckBox;
|
private GuiCheckBox previewCheckBox;
|
||||||
private GuiProgressBar progressBar;
|
private GuiProgressBar progressBar;
|
||||||
|
|
||||||
|
private int renderTimeTaken = 0;
|
||||||
|
private long prevRenderTime = -1;
|
||||||
|
|
||||||
|
private int[] renderTimes = new int[50];
|
||||||
|
private int currentIndex = 0;
|
||||||
|
|
||||||
|
private int prevRenderedFrames = 0;
|
||||||
|
private int renderTimeLeft = 0;
|
||||||
|
|
||||||
public GuiVideoRenderer(VideoRenderer renderer) {
|
public GuiVideoRenderer(VideoRenderer renderer) {
|
||||||
this.renderer = renderer;
|
this.renderer = renderer;
|
||||||
}
|
}
|
||||||
@@ -45,7 +55,7 @@ public class GuiVideoRenderer extends GuiScreen {
|
|||||||
|
|
||||||
text = PREVIEW;
|
text = PREVIEW;
|
||||||
buttonList.add(previewCheckBox = new GuiCheckBox(0, (width - fontRendererObj.getStringWidth(text)) / 2 - 8,
|
buttonList.add(previewCheckBox = new GuiCheckBox(0, (width - fontRendererObj.getStringWidth(text)) / 2 - 8,
|
||||||
pauseButton.yPosition - 10 - 20 - 10 - 5 , text, false));
|
pauseButton.yPosition - 10 - 20 - 10 - 20 - 5 , text, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -83,6 +93,48 @@ public class GuiVideoRenderer extends GuiScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
|
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
|
||||||
|
long current = System.currentTimeMillis();
|
||||||
|
|
||||||
|
//calculate estimated time left
|
||||||
|
if(prevRenderTime == -1) {
|
||||||
|
prevRenderTime = current;
|
||||||
|
}
|
||||||
|
|
||||||
|
int renderTime = (int)(current - prevRenderTime);
|
||||||
|
|
||||||
|
if(!renderer.isPaused()) {
|
||||||
|
renderTimeTaken += renderTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(prevRenderedFrames < renderer.getFramesDone()) {
|
||||||
|
prevRenderedFrames = renderer.getFramesDone();
|
||||||
|
|
||||||
|
renderTimes[currentIndex] = renderTime;
|
||||||
|
|
||||||
|
int validValues = 0;
|
||||||
|
|
||||||
|
int totalTime = 0;
|
||||||
|
for(int i : renderTimes) {
|
||||||
|
if(i > 0) {
|
||||||
|
totalTime += i;
|
||||||
|
validValues++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float averageRenderTime = validValues > 0 ? totalTime / validValues : 0;
|
||||||
|
|
||||||
|
prevRenderTime = current;
|
||||||
|
|
||||||
|
//remaining render time in seconds
|
||||||
|
renderTimeLeft = Math.round((averageRenderTime * (renderer.getTotalFrames() - renderer.getFramesDone())) / 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
currentIndex++;
|
||||||
|
if(currentIndex >= renderTimes.length) currentIndex = 0;
|
||||||
|
|
||||||
|
String takenString = I18n.format("replaymod.gui.rendering.timetaken")+": "+DurationUtils.convertSecondsToString(renderTimeTaken/1000);
|
||||||
|
String leftString = I18n.format("replaymod.gui.rendering.timeleft")+": "+DurationUtils.convertSecondsToString(renderTimeLeft);
|
||||||
|
|
||||||
FrameRenderer frameRenderer = renderer.getFrameRenderer();
|
FrameRenderer frameRenderer = renderer.getFrameRenderer();
|
||||||
int centerX = width / 2;
|
int centerX = width / 2;
|
||||||
|
|
||||||
@@ -107,6 +159,12 @@ public class GuiVideoRenderer extends GuiScreen {
|
|||||||
} else {
|
} else {
|
||||||
FrameRenderer.renderNoPreview(previewX, previewY, previewWidth, previewHeight);
|
FrameRenderer.renderNoPreview(previewX, previewY, previewWidth, previewHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
drawString(fontRendererObj, takenString, 12, previewCheckBox.yPosition + 5 + 20, Color.WHITE.getRGB());
|
||||||
|
drawString(fontRendererObj, leftString, width - 12 - fontRendererObj.getStringWidth(leftString),
|
||||||
|
previewCheckBox.yPosition + 5 + 20, Color.WHITE.getRGB());
|
||||||
|
|
||||||
|
|
||||||
super.drawScreen(mouseX, mouseY, partialTicks);
|
super.drawScreen(mouseX, mouseY, partialTicks);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package eu.crushedpixel.replaymod.utils;
|
||||||
|
|
||||||
|
public class DurationUtils {
|
||||||
|
|
||||||
|
public static String convertSecondsToString(int seconds) {
|
||||||
|
int hours = seconds/(60*60);
|
||||||
|
int min = seconds/60 - hours*60;
|
||||||
|
int sec = seconds - ((min*60) + (hours*60*60));
|
||||||
|
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
if(hours > 0) builder.append(hours).append("h ");
|
||||||
|
if(min > 0 || hours > 0) builder.append(min).append("min ");
|
||||||
|
builder.append(sec).append("sec");
|
||||||
|
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -276,6 +276,8 @@ replaymod.gui.rendering.cancel=Cancel Rendering
|
|||||||
replaymod.gui.rendering.cancel.callback=Are you sure?
|
replaymod.gui.rendering.cancel.callback=Are you sure?
|
||||||
replaymod.gui.rendering.preview=Show Preview (Performance might suffer)
|
replaymod.gui.rendering.preview=Show Preview (Performance might suffer)
|
||||||
replaymod.gui.rendering.progress=Frames rendered: %1$d / %2$d
|
replaymod.gui.rendering.progress=Frames rendered: %1$d / %2$d
|
||||||
|
replaymod.gui.rendering.timetaken=Render Time
|
||||||
|
replaymod.gui.rendering.timeleft=Time Left
|
||||||
|
|
||||||
#Ingame Menu
|
#Ingame Menu
|
||||||
replaymod.gui.ingame.menu.addposkeyframe=Add Position Keyframe
|
replaymod.gui.ingame.menu.addposkeyframe=Add Position Keyframe
|
||||||
|
|||||||
Reference in New Issue
Block a user