111 lines
3.8 KiB
Java
111 lines
3.8 KiB
Java
package com.replaymod.simplepathing;
|
|
|
|
import com.google.gson.stream.JsonReader;
|
|
import com.google.gson.stream.JsonWriter;
|
|
import com.replaymod.core.ReplayMod;
|
|
import com.replaymod.pathing.properties.CameraProperties;
|
|
import com.replaymod.pathing.properties.TimestampProperty;
|
|
import com.replaymod.replay.events.ReplayOpenEvent;
|
|
import com.replaymod.replaystudio.pathing.PathingRegistry;
|
|
import com.replaymod.replaystudio.pathing.impl.TimelineImpl;
|
|
import com.replaymod.replaystudio.pathing.interpolation.CubicSplineInterpolator;
|
|
import com.replaymod.replaystudio.pathing.interpolation.Interpolator;
|
|
import com.replaymod.replaystudio.pathing.interpolation.LinearInterpolator;
|
|
import com.replaymod.replaystudio.pathing.path.Keyframe;
|
|
import com.replaymod.replaystudio.pathing.path.Timeline;
|
|
import com.replaymod.simplepathing.gui.GuiPathing;
|
|
import net.minecraftforge.fml.common.FMLCommonHandler;
|
|
import net.minecraftforge.fml.common.Mod;
|
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
import org.apache.logging.log4j.Logger;
|
|
|
|
import java.io.IOException;
|
|
|
|
@Mod(modid = ReplayModSimplePathing.MOD_ID, useMetadata = true)
|
|
public class ReplayModSimplePathing implements PathingRegistry {
|
|
public static final String MOD_ID = "replaymod-simplepathing";
|
|
|
|
@Mod.Instance(ReplayMod.MOD_ID)
|
|
private static ReplayMod core;
|
|
|
|
private Logger logger;
|
|
|
|
@Mod.EventHandler
|
|
public void preInit(FMLPreInitializationEvent event) {
|
|
logger = event.getModLog();
|
|
|
|
core.getSettingsRegistry().register(Setting.class);
|
|
|
|
FMLCommonHandler.instance().bus().register(this);
|
|
}
|
|
|
|
@SubscribeEvent
|
|
public void postReplayOpen(ReplayOpenEvent.Post event) {
|
|
new GuiPathing(core, this, event.getReplayHandler());
|
|
}
|
|
|
|
private Timeline currentTimeline = createTimeline(); { currentTimeline.createPath(); currentTimeline.createPath(); }
|
|
private Keyframe selectedTimeKeyframe, selectedPositionKeyframe;
|
|
|
|
public Keyframe getSelectedTimeKeyframe() {
|
|
return selectedTimeKeyframe;
|
|
}
|
|
|
|
public Keyframe getSelectedPositionKeyframe() {
|
|
return selectedPositionKeyframe;
|
|
}
|
|
|
|
public void setSelectedPositionKeyframe(Keyframe selectedPositionKeyframe) {
|
|
this.selectedPositionKeyframe = selectedPositionKeyframe;
|
|
}
|
|
|
|
public void setSelectedTimeKeyframe(Keyframe selectedTimeKeyframe) {
|
|
this.selectedTimeKeyframe = selectedTimeKeyframe;
|
|
}
|
|
|
|
public void setCurrentTimeline(Timeline currentTimeline) {
|
|
this.currentTimeline = currentTimeline;
|
|
}
|
|
|
|
public Timeline getCurrentTimeline() {
|
|
return currentTimeline;
|
|
}
|
|
|
|
@Override
|
|
public Timeline createTimeline() {
|
|
Timeline timeline = new TimelineImpl();
|
|
|
|
timeline.registerProperty(TimestampProperty.PROPERTY);
|
|
timeline.registerProperty(CameraProperties.POSITION);
|
|
timeline.registerProperty(CameraProperties.ROTATION);
|
|
|
|
return timeline;
|
|
}
|
|
|
|
@Override
|
|
public void serializeInterpolator(JsonWriter writer, Interpolator interpolator) throws IOException {
|
|
if (interpolator instanceof LinearInterpolator) {
|
|
writer.value("linear");
|
|
} else if (interpolator instanceof CubicSplineInterpolator) {
|
|
writer.value("cubic-spline");
|
|
} else {
|
|
throw new IOException("Unknown interpolator type: " + interpolator);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Interpolator deserializeInterpolator(JsonReader reader) throws IOException {
|
|
String type = reader.nextString();
|
|
switch (type) {
|
|
case "linear":
|
|
return new LinearInterpolator();
|
|
case "cubic-spline":
|
|
return new CubicSplineInterpolator();
|
|
default:
|
|
throw new IOException("Unknown interpolation type: " + type);
|
|
|
|
}
|
|
}
|
|
}
|