Update ExportToProject.csx

This commit is contained in:
cubeww 2019-11-03 00:59:04 +08:00
parent ec24e27dde
commit 2cd7f68217

View file

@ -28,7 +28,7 @@ Directory.CreateDirectory(projFolder);
// --------------- Start exporting ---------------
var resourceNum = 9;
var resourceNum = 10;
// Export sprites
UpdateProgressBar(null, "Exporting sprites...", progress++, resourceNum);
@ -62,6 +62,10 @@ await ExportFonts();
UpdateProgressBar(null, "Exporting paths...", progress++, resourceNum);
await ExportPaths();
// Export timelines
UpdateProgressBar(null, "Exporting timelines...", progress++, resourceNum);
await ExportTimelines();
// Generate project file
UpdateProgressBar(null, "Generating project file...", progress++, resourceNum);
ExportProjectFile();
@ -537,6 +541,53 @@ void ExportPath(UndertalePath path)
File.WriteAllText(projFolder + "/paths/" + path.Name.Content + ".path.gmx", gmx.ToString());
}
// --------------- Export Timelines ---------------
async Task ExportTimelines()
{
Directory.CreateDirectory(projFolder + "/timelines");
await Task.Run(() => Parallel.ForEach(Data.Timelines, ExportTimeline));
}
void ExportTimeline(UndertaleTimeline timeline)
{
// Save the timeline GMX
var gmx = new XDocument(
new XComment(gmxDeclaration),
new XElement("timeline")
);
foreach (var i in timeline.Moments)
{
var entryNode = new XElement("entry");
entryNode.Add(new XElement("step", i.Item1));
foreach (var j in i.Item2)
{
entryNode.Add(
new XElement("libid", j.LibID.ToString()),
new XElement("id", j.ID.ToString()),
new XElement("kind", j.Kind.ToString()),
new XElement("userelative", j.LibID.ToString()),
new XElement("libid", BoolToString(j.UseRelative)),
new XElement("isquestion", BoolToString(j.IsQuestion)),
new XElement("useapplyto", BoolToString(j.UseApplyTo)),
new XElement("exetype", j.ExeType.ToString()),
new XElement("functionname", j.ActionName.Content),
new XElement("codestring", ""),
new XElement("whoName", "self"),
new XElement("relative", BoolToString(j.Relative)),
new XElement("isnot", BoolToString(j.IsNot)),
new XElement("arguments",
new XElement("argument",
new XElement("kind", "1"),
new XElement("string", j.CodeId != null ? Decompiler.Decompile(j.CodeId, DECOMPILE_CONTEXT.Value) : "")
)
)
);
}
gmx.Element("timeline").Add(entryNode);
}
File.WriteAllText(projFolder + "/timelines/" + timeline.Name.Content + ".timeline.gmx", gmx.ToString());
}
// --------------- Generate project file ---------------
void ExportProjectFile()
@ -554,6 +605,8 @@ void ExportProjectFile()
WriteIndexes<UndertaleFont>(gmx.Element("assets"), "fonts", "fonts", Data.Fonts, "font", "fonts\\");
WriteIndexes<UndertaleGameObject>(gmx.Element("assets"), "objects", "objects", Data.GameObjects, "object", "objects\\");
WriteIndexes<UndertaleRoom>(gmx.Element("assets"), "rooms", "rooms", Data.Rooms, "room", "rooms\\");
WriteIndexes<UndertalePath>(gmx.Element("assets"), "paths", "paths", Data.Paths, "path", "paths\\");
WriteIndexes<UndertaleTimeline>(gmx.Element("assets"), "timelines", "timelines", Data.Timelines, "timeline", "timelines\\");
File.WriteAllText(projFolder + "Export_Project.project.gmx", gmx.ToString());
}