public NBTCompound SerializeNBT()
{
HasChangedSinceSave = false;
NBTCompound tag = new NBTCompound("SuperImageEvolver");
tag.Append("FormatVersion", FormatVersion);
tag.Append("Shapes", Shapes);
tag.Append("Vertices", Vertices);
tag.Append("ImprovementCounter", ImprovementCounter);
tag.Append("MutationCounter", MutationCounter);
tag.Append("RiskyMoveCounter", RiskyMoveCounter);
tag.Append("ElapsedTime", DateTime.UtcNow.Subtract(TaskStart).Ticks);
tag.Append(ProjectOptions.SerializeNBT());
tag.Append(BestMatch.SerializeNBT("BestMatch"));
NBTag initializerTag = ModuleManager.WriteModule("Initializer", Initializer);
tag.Append(initializerTag);
NBTag mutatorTag = ModuleManager.WriteModule("Mutator", Mutator);
tag.Append(mutatorTag);
NBTag evaluatorTag = ModuleManager.WriteModule("Evaluator", Evaluator);
tag.Append(evaluatorTag);
byte[] imageData;
using (MemoryStream ms = new MemoryStream()) {
lock ( OriginalImage ) {
OriginalImage.Save(ms, ImageFormat.Png);
}
ms.Flush();
imageData = new byte[ms.Length];
Buffer.BlockCopy(ms.GetBuffer(), 0, imageData, 0, imageData.Length);
}
tag.Append("ImageData", imageData);
List <NBTCompound> statTags = new List <NBTCompound>();
foreach (MutationType mtype in Enum.GetValues(typeof(MutationType)))
{
NBTCompound stat = new NBTCompound("MutationTypeStat");
stat.Append("Type", mtype.ToString());
stat.Append("Count", MutationCounts[mtype]);
stat.Append("Sum", MutationImprovements[mtype]);
statTags.Add(stat);
}
var stats = new NBTList("MutationStats", NBTType.Compound, statTags.ToArray());
tag.Append(stats);
return(tag);
}