Added Event Markers to Replay, which allow players to quickly mark important events while recording (M key by default)

Added Event Marker Indicators to be displayed on GuiTimeline
This commit is contained in:
CrushedPixel
2015-06-09 16:08:06 +02:00
parent ea968ca418
commit d30ef19c89
13 changed files with 235 additions and 20 deletions

View File

@@ -40,6 +40,7 @@ public class ReplayHandler {
private static float cameraTilt = 0;
private static KeyframeSet[] keyframeRepository = new KeyframeSet[]{};
private static Marker[] markers = new Marker[]{};
/**
* The file currently being played.
@@ -55,7 +56,6 @@ public class ReplayHandler {
if(write) {
try {
File tempFile = File.createTempFile(ReplayFile.ENTRY_PATHS, "json");
tempFile.deleteOnExit();
ReplayFileIO.writeKeyframeRegistryToFile(repo, tempFile);
@@ -66,6 +66,23 @@ public class ReplayHandler {
}
}
public static Marker[] getMarkers() { return markers; }
public static void setMarkers(Marker[] m, boolean write) {
markers = m;
if(write) {
try {
File tempFile = File.createTempFile(ReplayFile.ENTRY_MARKERS, "json");
ReplayFileIO.writeMarkersToFile(m, tempFile);
ReplayMod.replayFileAppender.registerModifiedFile(tempFile, ReplayFile.ENTRY_MARKERS, getReplayFile());
} catch(Exception e) {
e.printStackTrace();
}
}
}
public static void useKeyframePresetFromRepository(int index) {
keyframes = new ArrayList<Keyframe>(Arrays.asList(keyframeRepository[index].getKeyframes()));
}
@@ -145,6 +162,24 @@ public class ReplayHandler {
Collections.sort(keyframes, new KeyframeComparator());
}
public static void addMarker() {
Position pos = new Position(mc.getRenderViewEntity());
int timestamp = ReplayMod.replaySender.currentTimeStamp();
addMarker(new Marker(pos, timestamp, null));
}
public static void addMarker(Marker marker) {
List<Marker> markerList = new ArrayList<Marker>(Arrays.asList(markers));
markerList.add(marker);
markers = markerList.toArray(new Marker[markerList.size()]);
}
public static void removeMarker(Marker marker) {
List<Marker> markerList = new ArrayList<Marker>(Arrays.asList(markers));
markerList.remove(marker);
markers = markerList.toArray(new Marker[markerList.size()]);
}
public static void addKeyframe(Keyframe keyframe) {
keyframes.add(keyframe);
selectKeyframe(keyframe);
@@ -330,6 +365,11 @@ public class ReplayHandler {
return kf == selectedKeyframe;
}
public static boolean isSelected(Marker marker) {
//TODO: Make marker selectable
return false;
}
public static void selectKeyframe(Keyframe kf) {
selectedKeyframe = kf;
sortKeyframes();
@@ -381,6 +421,9 @@ public class ReplayHandler {
KeyframeSet[] paths = currentReplayFile.paths().get();
ReplayHandler.setKeyframeRepository(paths == null ? new KeyframeSet[0] : paths, false);
Marker[] markers = currentReplayFile.markers().get();
ReplayHandler.setMarkers(markers == null ? new Marker[0] : markers, false);
PlayerVisibility visibility = currentReplayFile.visibility().get();
PlayerHandler.loadPlayerVisibilityConfiguration(visibility);