Abort path preview when opening render screen (fixes #524)

This commit is contained in:
Jonas Herzig
2021-08-15 19:30:10 +02:00
parent de3f4dab7e
commit 0ceb95a5e2

View File

@@ -102,6 +102,7 @@ public class GuiPathing {
public final GuiButton renderButton = new GuiButton().onClick(new Runnable() { public final GuiButton renderButton = new GuiButton().onClick(new Runnable() {
@Override @Override
public void run() { public void run() {
abortPathPlayback();
GuiScreen screen = GuiRenderSettings.createBaseScreen(); GuiScreen screen = GuiRenderSettings.createBaseScreen();
new GuiRenderQueue(screen, replayHandler, () -> preparePathsForPlayback(false)) { new GuiRenderQueue(screen, replayHandler, () -> preparePathsForPlayback(false)) {
@Override @Override
@@ -378,7 +379,21 @@ public class GuiPathing {
startLoadingEntityTracker(); startLoadingEntityTracker();
} }
private void abortPathPlayback() {
if (!player.isActive()) {
return;
}
ListenableFuture<Void> future = player.getFuture();
if (!future.isDone() && !future.isCancelled()) {
future.cancel(false);
}
// Tear down of the player might only happen the next tick after it was cancelled
player.onTick();
}
public void keyframeRepoButtonPressed() { public void keyframeRepoButtonPressed() {
abortPathPlayback();
try { try {
GuiKeyframeRepository gui = new GuiKeyframeRepository( GuiKeyframeRepository gui = new GuiKeyframeRepository(
mod.getCurrentTimeline(), replayHandler.getReplayFile(), mod.getCurrentTimeline().getTimeline()); mod.getCurrentTimeline(), replayHandler.getReplayFile(), mod.getCurrentTimeline().getTimeline());