Allow keyframe timeline cursor sync to be toggled (closes #290)

This commit is contained in:
Jonas Herzig
2020-11-06 10:39:37 +01:00
parent 214100840e
commit 6e6af1dcbb
7 changed files with 79 additions and 6 deletions

View File

@@ -3,6 +3,7 @@ package com.replaymod.simplepathing;
import com.replaymod.core.KeyBindingRegistry;
import com.replaymod.core.Module;
import com.replaymod.core.ReplayMod;
import com.replaymod.core.SettingsRegistry;
import com.replaymod.core.events.SettingsChangedCallback;
import de.johni0702.minecraft.gui.utils.EventRegistrations;
import com.replaymod.core.versions.MCVer.Keyboard;
@@ -41,6 +42,7 @@ public class ReplayModSimplePathing extends EventRegistrations implements Module
private ReplayMod core;
public KeyBindingRegistry.Binding keyPositionKeyframe;
public KeyBindingRegistry.Binding keyTimeKeyframe;
public KeyBindingRegistry.Binding keySyncTime;
public static Logger LOGGER = LogManager.getLogger();
@@ -87,9 +89,14 @@ public class ReplayModSimplePathing extends EventRegistrations implements Module
core.getKeyBindingRegistry().registerKeyBinding("replaymod.input.clearkeyframes", Keyboard.KEY_C, () -> {
if (guiPathing != null) guiPathing.clearKeyframesButtonPressed();
}, true);
core.getKeyBindingRegistry().registerRepeatedKeyBinding("replaymod.input.synctimeline", Keyboard.KEY_V, () -> {
keySyncTime = core.getKeyBindingRegistry().registerRepeatedKeyBinding("replaymod.input.synctimeline", Keyboard.KEY_V, () -> {
if (guiPathing != null) guiPathing.syncTimeButtonPressed();
}, true);
SettingsRegistry settingsRegistry = core.getSettingsRegistry();
keySyncTime.registerAutoActivationSupport(settingsRegistry.get(Setting.AUTO_SYNC), active -> {
settingsRegistry.set(Setting.AUTO_SYNC, active);
settingsRegistry.save();
});
core.getKeyBindingRegistry().registerRaw(Keyboard.KEY_DELETE, () -> {
if (guiPathing != null) guiPathing.deleteButtonPressed();
});

View File

@@ -7,6 +7,7 @@ import java.util.stream.Collectors;
public final class Setting<T> extends SettingsRegistry.SettingKeys<T> {
public static final Setting<Boolean> PATH_PREVIEW = make("pathpreview", "pathpreview", true);
public static final Setting<Boolean> AUTO_SYNC = make("autosync", null, true);
public static final Setting<Integer> TIMELINE_LENGTH = make("timelineLength", null, 30 * 60);
public static final SettingsRegistry.MultipleChoiceSettingKeys<String> DEFAULT_INTERPOLATION;

View File

@@ -28,7 +28,6 @@ import com.replaymod.simplepathing.SPTimeline.SPPath;
import com.replaymod.simplepathing.Setting;
import de.johni0702.minecraft.gui.GuiRenderer;
import de.johni0702.minecraft.gui.RenderInfo;
import de.johni0702.minecraft.gui.container.AbstractGuiScreen;
import de.johni0702.minecraft.gui.container.GuiContainer;
import de.johni0702.minecraft.gui.container.GuiPanel;
import de.johni0702.minecraft.gui.container.GuiScreen;
@@ -222,6 +221,7 @@ public class GuiPathing {
private final ReplayMod core;
private final ReplayModSimplePathing mod;
private final ReplayHandler replayHandler;
private final GuiReplayOverlay overlay;
private final RealtimeTimelinePlayer player;
// Whether any error which occured during entity tracker loading has already been shown to the user
@@ -234,8 +234,8 @@ public class GuiPathing {
this.core = core;
this.mod = mod;
this.replayHandler = replayHandler;
this.overlay = replayHandler.getOverlay();
this.player = new RealtimeTimelinePlayer(replayHandler);
final GuiReplayOverlay overlay = replayHandler.getOverlay();
timeline.setLength(core.getSettingsRegistry().get(Setting.TIMELINE_LENGTH) * 1000);
@@ -364,6 +364,7 @@ public class GuiPathing {
overlay.setLayout(new CustomLayout<GuiReplayOverlay>(overlay.getLayout()) {
@Override
protected void layout(GuiReplayOverlay container, int width, int height) {
checkForAutoSync();
pos(panel, 10, y(overlay.topPanel) + height(overlay.topPanel) + 3);
size(panel, width - 20, 40);
}
@@ -419,6 +420,28 @@ public class GuiPathing {
});
}
private int prevSpeed = -1;
private int prevTime = -1;
private void checkForAutoSync() {
if (!mod.keySyncTime.isAutoActivating()) {
prevSpeed = -1;
prevTime = -1;
return;
}
int speed = overlay.speedSlider.getValue();
if (prevSpeed != speed && prevSpeed != -1) {
syncTimeButtonPressed();
}
prevSpeed = speed;
int time = replayHandler.getReplaySender().currentTimeStamp();
if (prevTime != time && prevTime != -1 && !player.isActive()) {
syncTimeButtonPressed();
}
prevTime = time;
}
public void syncTimeButtonPressed() {
// Current replay time
int time = replayHandler.getReplaySender().currentTimeStamp();