Add synchronize time key
This commit is contained in:
@@ -82,7 +82,7 @@ public class GuiReplayOverlay extends AbstractGuiOverlay<GuiReplayOverlay> {
|
|||||||
// If currently paused
|
// If currently paused
|
||||||
if (replaySender.paused()) {
|
if (replaySender.paused()) {
|
||||||
// then play
|
// then play
|
||||||
replaySender.setReplaySpeed(getSpeed());
|
replaySender.setReplaySpeed(getSpeedSliderValue());
|
||||||
} else {
|
} else {
|
||||||
// else pause
|
// else pause
|
||||||
replaySender.setReplaySpeed(0);
|
replaySender.setReplaySpeed(0);
|
||||||
@@ -93,7 +93,7 @@ public class GuiReplayOverlay extends AbstractGuiOverlay<GuiReplayOverlay> {
|
|||||||
speedSlider.onValueChanged(new Runnable() {
|
speedSlider.onValueChanged(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
double speed = getSpeed();
|
double speed = getSpeedSliderValue();
|
||||||
speedSlider.setText(I18n.format("replaymod.gui.speed") + ": " + speed + "x");
|
speedSlider.setText(I18n.format("replaymod.gui.speed") + ": " + speed + "x");
|
||||||
ReplaySender replaySender = replayHandler.getReplaySender();
|
ReplaySender replaySender = replayHandler.getReplaySender();
|
||||||
if (!replaySender.paused()) {
|
if (!replaySender.paused()) {
|
||||||
@@ -110,7 +110,7 @@ public class GuiReplayOverlay extends AbstractGuiOverlay<GuiReplayOverlay> {
|
|||||||
}).setLength(replayHandler.getReplaySender().replayLength());
|
}).setLength(replayHandler.getReplaySender().replayLength());
|
||||||
}
|
}
|
||||||
|
|
||||||
private double getSpeed() {
|
public double getSpeedSliderValue() {
|
||||||
int value = speedSlider.getValue() + 1;
|
int value = speedSlider.getValue() + 1;
|
||||||
if (value <= 9) {
|
if (value <= 9) {
|
||||||
return value / 10d;
|
return value / 10d;
|
||||||
|
|||||||
@@ -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
|
// Start loading entity tracker
|
||||||
entityTrackerFuture = SettableFuture.create();
|
entityTrackerFuture = SettableFuture.create();
|
||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user