Do not render additional frames while jumping
This commit is contained in:
@@ -16,6 +16,7 @@ import eu.crushedpixel.replaymod.video.VideoWriter;
|
|||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.Gui;
|
import net.minecraft.client.gui.Gui;
|
||||||
import net.minecraft.client.gui.GuiChat;
|
import net.minecraft.client.gui.GuiChat;
|
||||||
|
import net.minecraft.client.gui.GuiScreen;
|
||||||
import net.minecraft.client.gui.ScaledResolution;
|
import net.minecraft.client.gui.ScaledResolution;
|
||||||
import net.minecraft.client.gui.inventory.GuiInventory;
|
import net.minecraft.client.gui.inventory.GuiInventory;
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
@@ -26,11 +27,16 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
|||||||
import net.minecraftforge.fml.client.FMLClientHandler;
|
import net.minecraftforge.fml.client.FMLClientHandler;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import org.lwjgl.input.Mouse;
|
import org.lwjgl.input.Mouse;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.Display;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import static net.minecraft.client.renderer.GlStateManager.*;
|
||||||
|
import static org.lwjgl.opengl.GL11.*;
|
||||||
|
|
||||||
public class GuiReplayOverlay extends Gui {
|
public class GuiReplayOverlay extends Gui {
|
||||||
|
|
||||||
private final Minecraft mc = Minecraft.getMinecraft();
|
private final Minecraft mc = Minecraft.getMinecraft();
|
||||||
@@ -130,7 +136,7 @@ public class GuiReplayOverlay extends Gui {
|
|||||||
mc.displayGuiScreen(new GuiMouseInput());
|
mc.displayGuiScreen(new GuiMouseInput());
|
||||||
}
|
}
|
||||||
|
|
||||||
GL11.glEnable(GL11.GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
|
|
||||||
Point mousePoint = MouseUtils.getMousePos();
|
Point mousePoint = MouseUtils.getMousePos();
|
||||||
final int mouseX = (int) mousePoint.getX();
|
final int mouseX = (int) mousePoint.getX();
|
||||||
@@ -185,7 +191,7 @@ public class GuiReplayOverlay extends Gui {
|
|||||||
if(mouseX >= timelineX + 4 && mouseX <= width - 18 && mouseY >= 11 && mouseY <= 29) {
|
if(mouseX >= timelineX + 4 && mouseX <= width - 18 && mouseY >= 11 && mouseY <= 29) {
|
||||||
double tot = (width - 18) - (timelineX + 4);
|
double tot = (width - 18) - (timelineX + 4);
|
||||||
double perc = (mouseX - (timelineX + 4)) / tot;
|
double perc = (mouseX - (timelineX + 4)) / tot;
|
||||||
double time = perc * (double) ReplayMod.replaySender.replayLength();
|
final double time = perc * (double) ReplayMod.replaySender.replayLength();
|
||||||
|
|
||||||
if(time < ReplayMod.replaySender.currentTimeStamp()) {
|
if(time < ReplayMod.replaySender.currentTimeStamp()) {
|
||||||
mc.displayGuiScreen(null);
|
mc.displayGuiScreen(null);
|
||||||
@@ -198,8 +204,61 @@ public class GuiReplayOverlay extends Gui {
|
|||||||
ReplayHandler.setLastPosition(null);
|
ReplayHandler.setLastPosition(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
if((int) time != ReplayMod.replaySender.getDesiredTimestamp())
|
long diff = (long) time - ReplayMod.replaySender.getDesiredTimestamp();
|
||||||
|
if(diff != 0) {
|
||||||
|
if (diff > 0 && diff < 5000) { // Small difference and no time travel
|
||||||
ReplayMod.replaySender.jumpToTime((int) time);
|
ReplayMod.replaySender.jumpToTime((int) time);
|
||||||
|
} else { // We either have to restart the replay or send a significant amount of packets
|
||||||
|
// Render our please-wait-screen
|
||||||
|
GuiScreen guiScreen = new GuiScreen() {
|
||||||
|
@Override
|
||||||
|
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
|
||||||
|
drawBackground(0);
|
||||||
|
drawCenteredString(fontRendererObj, I18n.format("replaymod.gui.pleasewait"),
|
||||||
|
width / 2, height / 2, 0xffffffff);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Make sure that the replaysender changes into sync mode
|
||||||
|
ReplayMod.replaySender.setAsyncMode(false);
|
||||||
|
synchronized (ReplayMod.replaySender) {
|
||||||
|
// This will make sure that the async thread has stopped
|
||||||
|
}
|
||||||
|
|
||||||
|
// Perform the rendering using OpenGL
|
||||||
|
pushMatrix();
|
||||||
|
clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
enableTexture2D();
|
||||||
|
mc.getFramebuffer().bindFramebuffer(true);
|
||||||
|
mc.entityRenderer.setupOverlayRendering();
|
||||||
|
|
||||||
|
guiScreen.setWorldAndResolution(mc, width, height);
|
||||||
|
guiScreen.drawScreen(0, 0, 0);
|
||||||
|
|
||||||
|
mc.getFramebuffer().unbindFramebuffer();
|
||||||
|
popMatrix();
|
||||||
|
pushMatrix();
|
||||||
|
mc.getFramebuffer().framebufferRender(mc.displayWidth, mc.displayHeight);
|
||||||
|
popMatrix();
|
||||||
|
|
||||||
|
Display.update();
|
||||||
|
|
||||||
|
// Send the packets
|
||||||
|
ReplayMod.replaySender.sendPacketsTill((int) time);
|
||||||
|
ReplayMod.replaySender.setAsyncMode(true);
|
||||||
|
|
||||||
|
// Tick twice to process all packets and position interpolation
|
||||||
|
try {
|
||||||
|
mc.runTick();
|
||||||
|
mc.runTick();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace(); // This should never be thrown but whatever
|
||||||
|
}
|
||||||
|
|
||||||
|
// No need to remove our please-wait-screen. It'll vanish with the next
|
||||||
|
// render pass as it's never been a real GuiScreen in the first place.
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -614,7 +673,7 @@ public class GuiReplayOverlay extends Gui {
|
|||||||
int real_x = (int) Math.round((minX + tl_begin_width) + rel_x);
|
int real_x = (int) Math.round((minX + tl_begin_width) + rel_x);
|
||||||
mc.renderEngine.bindTexture(this.replay_gui);
|
mc.renderEngine.bindTexture(this.replay_gui);
|
||||||
|
|
||||||
GL11.glEnable(GL11.GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
this.drawModalRectWithCustomSizedTexture(real_x - 3, y + 3, 44, 0, 8, 16, 64, 64);
|
this.drawModalRectWithCustomSizedTexture(real_x - 3, y + 3, 44, 0, 8, 16, 64, 64);
|
||||||
//this.drawModalRectWithCustomSizedTexture(real_x, sl_y, u, v, width, height, textureWidth, textureHeight)
|
//this.drawModalRectWithCustomSizedTexture(real_x, sl_y, u, v, width, height, textureWidth, textureHeight)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ replaymod.gui.speed=Speed
|
|||||||
replaymod.gui.register=Register
|
replaymod.gui.register=Register
|
||||||
replaymod.gui.mail=Email Address
|
replaymod.gui.mail=Email Address
|
||||||
replaymod.gui.loading=Loading
|
replaymod.gui.loading=Loading
|
||||||
|
replaymod.gui.pleasewait=Please wait
|
||||||
|
|
||||||
replaymod.gui.minutes=min
|
replaymod.gui.minutes=min
|
||||||
replaymod.gui.seconds=sec
|
replaymod.gui.seconds=sec
|
||||||
|
|||||||
Reference in New Issue
Block a user