Add synchronize time key

This commit is contained in:
johni0702
2016-09-02 17:25:49 +02:00
parent 23bf44f9fb
commit 5f1b610528
2 changed files with 27 additions and 3 deletions

View File

@@ -82,7 +82,7 @@ public class GuiReplayOverlay extends AbstractGuiOverlay<GuiReplayOverlay> {
// 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<GuiReplayOverlay> {
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<GuiReplayOverlay> {
}).setLength(replayHandler.getReplaySender().replayLength());
}
private double getSpeed() {
public double getSpeedSliderValue() {
int value = speedSlider.getValue() + 1;
if (value <= 9) {
return value / 10d;

View File

@@ -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(() -> {