From ef00c450686ee074f170ececf3c2fd83bedfbed4 Mon Sep 17 00:00:00 2001 From: johni0702 Date: Sat, 3 Sep 2016 13:32:17 +0200 Subject: [PATCH] Add linear interpolation to simplepathing --- .../simplepathing/ReplayModSimplePathing.java | 10 ++++++++++ src/main/java/com/replaymod/simplepathing/Setting.java | 1 + .../com/replaymod/simplepathing/gui/GuiPathing.java | 4 +++- src/main/resources/assets/replaymod/lang/en_US.lang | 1 + 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/replaymod/simplepathing/ReplayModSimplePathing.java b/src/main/java/com/replaymod/simplepathing/ReplayModSimplePathing.java index efe54d80..3d803eca 100644 --- a/src/main/java/com/replaymod/simplepathing/ReplayModSimplePathing.java +++ b/src/main/java/com/replaymod/simplepathing/ReplayModSimplePathing.java @@ -3,6 +3,7 @@ package com.replaymod.simplepathing; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; import com.replaymod.core.ReplayMod; +import com.replaymod.core.events.SettingsChangedEvent; import com.replaymod.pathing.properties.CameraProperties; import com.replaymod.pathing.properties.SpectatorProperty; import com.replaymod.pathing.properties.TimestampProperty; @@ -62,6 +63,15 @@ public class ReplayModSimplePathing implements PathingRegistry { selectedKeyframe = null; } + @SubscribeEvent + public void onSettingsChanged(SettingsChangedEvent event) { + if (event.getKey() == Setting.LINEAR_INTERPOLATION) { + if (currentTimeline != null && guiPathing != null) { + currentTimeline.applyChange(guiPathing.updateInterpolators()); + } + } + } + private Timeline currentTimeline = createTimeline(); { currentTimeline.createPath(); currentTimeline.createPath(); } private Keyframe selectedKeyframe; diff --git a/src/main/java/com/replaymod/simplepathing/Setting.java b/src/main/java/com/replaymod/simplepathing/Setting.java index 3c30c2ed..b1e99e17 100644 --- a/src/main/java/com/replaymod/simplepathing/Setting.java +++ b/src/main/java/com/replaymod/simplepathing/Setting.java @@ -4,6 +4,7 @@ import com.replaymod.core.SettingsRegistry; public final class Setting extends SettingsRegistry.SettingKeys { public static final Setting PATH_PREVIEW = make("pathpreview", "pathpreview", true); + public static final Setting LINEAR_INTERPOLATION = make("linear_interpolation", "linearinterpolation", false); private static Setting make(String key, String displayName, T defaultValue) { return new Setting<>(key, displayName, defaultValue); diff --git a/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java b/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java index 4ce0f248..fbe43ac6 100644 --- a/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java +++ b/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java @@ -26,6 +26,7 @@ import com.replaymod.replaystudio.pathing.property.Property; import com.replaymod.replaystudio.util.EntityPositionTracker; import com.replaymod.replaystudio.util.Location; import com.replaymod.simplepathing.ReplayModSimplePathing; +import com.replaymod.simplepathing.Setting; import de.johni0702.minecraft.gui.GuiRenderer; import de.johni0702.minecraft.gui.RenderInfo; import de.johni0702.minecraft.gui.container.GuiContainer; @@ -531,6 +532,7 @@ public class GuiPathing { } public Change updateInterpolators() { + boolean linearInterpolation = mod.getCore().getSettingsRegistry().get(Setting.LINEAR_INTERPOLATION); List changes = new ArrayList<>(); Interpolator interpolator = null; boolean isSpectatorInterpolator = false; @@ -548,7 +550,7 @@ public class GuiPathing { // Normal segment if (isSpectatorInterpolator || interpolator == null) { isSpectatorInterpolator = false; - interpolator = new CubicSplineInterpolator(); + interpolator = linearInterpolation ? new LinearInterpolator() : new CubicSplineInterpolator(); interpolator.registerProperty(CameraProperties.POSITION); interpolator.registerProperty(CameraProperties.ROTATION); } diff --git a/src/main/resources/assets/replaymod/lang/en_US.lang b/src/main/resources/assets/replaymod/lang/en_US.lang index 48cdbe7c..13c5125a 100644 --- a/src/main/resources/assets/replaymod/lang/en_US.lang +++ b/src/main/resources/assets/replaymod/lang/en_US.lang @@ -278,6 +278,7 @@ replaymod.gui.settings.lighting=Ambient Lighting replaymod.gui.settings.forcechunks=Force Render Chunks replaymod.gui.settings.resources=Server Resource Packs replaymod.gui.settings.interpolation=Path Interpolation +replaymod.gui.settings.linearinterpolation=Linear Path Interpolation replaymod.gui.settings.pathpreview=Show Path Preview replaymod.gui.settings.keyframecleancallback=Clear Confirmation replaymod.gui.settings.renderinvisible=Render invisible Entities