From 5f1b61052882c901133eee5882562e5a87c11506 Mon Sep 17 00:00:00 2001 From: johni0702 Date: Fri, 2 Sep 2016 17:25:49 +0200 Subject: [PATCH] Add synchronize time key --- .../replay/gui/overlay/GuiReplayOverlay.java | 6 ++--- .../simplepathing/gui/GuiPathing.java | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/replaymod/replay/gui/overlay/GuiReplayOverlay.java b/src/main/java/com/replaymod/replay/gui/overlay/GuiReplayOverlay.java index 4815fada..19cc837b 100644 --- a/src/main/java/com/replaymod/replay/gui/overlay/GuiReplayOverlay.java +++ b/src/main/java/com/replaymod/replay/gui/overlay/GuiReplayOverlay.java @@ -82,7 +82,7 @@ public class GuiReplayOverlay extends AbstractGuiOverlay { // If currently paused if (replaySender.paused()) { // then play - replaySender.setReplaySpeed(getSpeed()); + replaySender.setReplaySpeed(getSpeedSliderValue()); } else { // else pause replaySender.setReplaySpeed(0); @@ -93,7 +93,7 @@ public class GuiReplayOverlay extends AbstractGuiOverlay { speedSlider.onValueChanged(new Runnable() { @Override public void run() { - double speed = getSpeed(); + double speed = getSpeedSliderValue(); speedSlider.setText(I18n.format("replaymod.gui.speed") + ": " + speed + "x"); ReplaySender replaySender = replayHandler.getReplaySender(); if (!replaySender.paused()) { @@ -110,7 +110,7 @@ public class GuiReplayOverlay extends AbstractGuiOverlay { }).setLength(replayHandler.getReplaySender().replayLength()); } - private double getSpeed() { + public double getSpeedSliderValue() { int value = speedSlider.getValue() + 1; if (value <= 9) { return value / 10d; diff --git a/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java b/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java index eda7996a..4ce0f248 100644 --- a/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java +++ b/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java @@ -378,6 +378,30 @@ public class GuiPathing { }); }); + core.getKeyBindingRegistry().registerKeyBinding("replaymod.input.synctimeline", Keyboard.KEY_V, () -> { + // Current replay time + int time = replayHandler.getReplaySender().currentTimeStamp(); + // Position of the cursor + int cursor = timeline.getCursorPosition(); + // Get the last time keyframe before the cursor + mod.getCurrentTimeline().getPaths().get(TIME_PATH).getKeyframes().stream() + .filter(it -> it.getTime() <= cursor).reduce((__, last) -> last).ifPresent(keyframe -> { + // Cursor position at the keyframe + int keyframeCursor = (int) keyframe.getTime(); + // Replay time at the keyframe + // This is a keyframe from the time path, so it _should_ always have a time property + int keyframeTime = keyframe.getValue(TimestampProperty.PROPERTY).get(); + // Replay time passed + int timePassed = time - keyframeTime; + // Speed (set to 1 when shift is held) + double speed = Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) ? 1 : overlay.getSpeedSliderValue(); + // Cursor time passed + int cursorPassed = (int) (timePassed / speed); + // Move cursor to new position + timeline.setCursorPosition(keyframeCursor + cursorPassed); + }); + }); + // Start loading entity tracker entityTrackerFuture = SettableFuture.create(); new Thread(() -> {