Update ReplayStudio and add connect replay functionality to replay editor

This commit is contained in:
johni0702
2015-06-02 19:42:38 +02:00
parent a69fad6663
commit d96ba1f135
4 changed files with 216 additions and 3 deletions

View File

@@ -3,6 +3,7 @@ package eu.crushedpixel.replaymod.studio;
import com.google.gson.JsonObject;
import de.johni0702.replaystudio.PacketData;
import de.johni0702.replaystudio.filter.ChangeTimestampFilter;
import de.johni0702.replaystudio.filter.NeutralizerFilter;
import de.johni0702.replaystudio.filter.RemoveFilter;
import de.johni0702.replaystudio.filter.SquashFilter;
import de.johni0702.replaystudio.io.ReplayOutputStream;
@@ -11,6 +12,7 @@ import de.johni0702.replaystudio.replay.ReplayMetaData;
import de.johni0702.replaystudio.replay.ZipReplayFile;
import de.johni0702.replaystudio.stream.PacketStream;
import de.johni0702.replaystudio.studio.ReplayStudio;
import org.apache.commons.lang3.Validate;
import java.io.File;
import java.io.IOException;
@@ -54,8 +56,48 @@ public class StudioImplementation {
replayFile.saveTo(outputFile);
}
//TODO Work with Johni to connect multiple Replay Files
public static void connectReplayFiles(List<File> filesToConnect, File outputFile) {
public static void connectReplayFiles(List<File> filesToConnect, File outputFile) throws IOException {
Validate.notEmpty(filesToConnect);
ReplayStudio studio = new ReplayStudio();
studio.setWrappingEnabled(false);
ReplayFile outputReplayFile = new ZipReplayFile(studio, outputFile);
ReplayOutputStream out = outputReplayFile.writePacketData();
ConnectMetadataFilter metaDataFilter = new ConnectMetadataFilter();
int startTime = 0;
for (File file : filesToConnect) {
ReplayFile replayFile = new ZipReplayFile(studio, file);
PacketStream stream = studio.createReplayStream(replayFile.getPacketData(), true);
ReplayMetaData metaData = replayFile.getMetaData();
stream.addFilter(new NeutralizerFilter());
if (startTime > 0) {
ChangeTimestampFilter ctf = new ChangeTimestampFilter();
JsonObject cfg = new JsonObject();
cfg.addProperty("offset", startTime);
ctf.init(studio, cfg);
stream.addFilter(ctf);
}
metaDataFilter.setInputReplay(replayFile);
stream.addFilter(metaDataFilter);
PacketData packetData;
while ((packetData = stream.next()) != null) {
out.write(packetData);
}
for (PacketData data : stream.end()) {
out.write(data);
}
startTime += metaData.getDuration();
}
out.close();
metaDataFilter.writeTo(outputReplayFile);
outputReplayFile.saveTo(outputFile);
}
}