From f85b76410d548bf6acb0021089bd4b0b6e59784a Mon Sep 17 00:00:00 2001 From: cubeww <761397398@qq.com> Date: Sat, 2 Nov 2019 21:42:38 +0800 Subject: [PATCH] Update ExportToProject.csx --- ExportToProject.csx | 123 ++++++++++++++------------------------------ 1 file changed, 39 insertions(+), 84 deletions(-) diff --git a/ExportToProject.csx b/ExportToProject.csx index c00ef5f..555a4b6 100644 --- a/ExportToProject.csx +++ b/ExportToProject.csx @@ -4,6 +4,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using System.Xml; +using System.Xml.Linq; using System.Drawing; using UndertaleModLib.Models; using UndertaleModLib.Util; @@ -14,6 +15,7 @@ string projFolder = GetFolder(FilePath) + "Export_Project" + Path.DirectorySepar var context = new DecompileContext(Data, true); TextureWorker worker = new TextureWorker(); ThreadLocal DECOMPILE_CONTEXT = new ThreadLocal(() => new DecompileContext(Data, false)); +string gmxDeclaration = "This Document is generated by GameMaker, if you edit it by hand then you do so at your own risk!"; if (Directory.Exists(projFolder)) { @@ -81,104 +83,56 @@ async Task ExportSprites() void ExportSprite(UndertaleSprite sprite) { // Save the sprite GMX - var xmlWriter = XmlWriter.Create(projFolder + "/sprites/" + sprite.Name.Content + ".sprite.gmx"); - xmlWriter.WriteStartDocument(); + var gmx = new XDocument( + new XComment(gmxDeclaration), + new XElement("sprite", + new XElement("type", "0"), + new XElement("xorig", sprite.OriginX.ToString()), + new XElement("yorigin", sprite.OriginY.ToString()), + new XElement("colkind", sprite.BBoxMode.ToString()), + new XElement("coltolerance", "0"), + new XElement("sepmasks", sprite.SepMasks.ToString("D")), + new XElement("bboxmode", sprite.BBoxMode.ToString()), + new XElement("bbox_left", sprite.MarginLeft.ToString()), + new XElement("bbox_right", sprite.MarginRight.ToString()), + new XElement("bbox_top", sprite.MarginTop.ToString()), + new XElement("bbox_bottom", sprite.MarginBottom.ToString()), + new XElement("HTile", "0"), + new XElement("VTile", "0"), + new XElement("TextureGroups", + new XElement("TextureGroup0", "0") + ), + new XElement("For3D", "0"), + new XElement("width", sprite.Width.ToString()), + new XElement("height", sprite.Height.ToString()), + new XElement("frames"), + new XElement("bbox_right", sprite.MarginRight.ToString()) + ) + ); - xmlWriter.WriteStartElement("sprite"); - - xmlWriter.WriteStartElement("type"); - xmlWriter.WriteString("0"); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("xorig"); - xmlWriter.WriteString(sprite.OriginX.ToString()); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("yorigin"); - xmlWriter.WriteString(sprite.OriginY.ToString()); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("colkind"); - xmlWriter.WriteString(sprite.BBoxMode.ToString()); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("coltolerance"); - xmlWriter.WriteString("0"); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("sepmasks"); - xmlWriter.WriteString(sprite.SepMasks.ToString("D")); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("bboxmode"); - xmlWriter.WriteString(sprite.BBoxMode.ToString()); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("bbox_left"); - xmlWriter.WriteString(sprite.MarginLeft.ToString()); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("bbox_right"); - xmlWriter.WriteString(sprite.MarginRight.ToString()); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("bbox_top"); - xmlWriter.WriteString(sprite.MarginTop.ToString()); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("bbox_bottom"); - xmlWriter.WriteString(sprite.MarginBottom.ToString()); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("HTile"); - xmlWriter.WriteString("0"); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("VTile"); - xmlWriter.WriteString("0"); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("TextureGroups"); - xmlWriter.WriteStartElement("TextureGroup0"); - xmlWriter.WriteString("0"); - xmlWriter.WriteEndElement(); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("For3D"); - xmlWriter.WriteString("0"); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("width"); - xmlWriter.WriteString(sprite.Width.ToString()); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("height"); - xmlWriter.WriteString(sprite.Height.ToString()); - xmlWriter.WriteEndElement(); - - xmlWriter.WriteStartElement("frames"); for (int i = 0; i < sprite.Textures.Count; i++) { if (sprite.Textures[i]?.Texture != null) { - xmlWriter.WriteStartElement("frame"); - xmlWriter.WriteAttributeString("index", i.ToString()); - xmlWriter.WriteString("images\\" + sprite.Name.Content + "_" + i + ".png"); - xmlWriter.WriteEndElement(); + gmx.Element("sprite").Element("frames").Add( + new XElement( + "frame", + new XAttribute("index", i.ToString()), + "images\\" + sprite.Name.Content + "_" + i + ".png" + ) + ); } } - xmlWriter.WriteEndElement(); - xmlWriter.WriteEndElement(); - xmlWriter.WriteEndDocument(); - xmlWriter.Close(); + File.WriteAllText(projFolder + "/sprites/" + sprite.Name.Content + ".sprite.gmx", gmx.ToString()); // Save sprite images for (int i = 0; i < sprite.Textures.Count; i++) + { if (sprite.Textures[i]?.Texture != null) { // Fix sprite size - var bitmapNew = new Bitmap((int)sprite.Width,(int)sprite.Height); + var bitmapNew = new Bitmap((int)sprite.Width, (int)sprite.Height); var bitmapOrigin = worker.GetTextureFor(sprite.Textures[i].Texture, Path.GetFileNameWithoutExtension(projFolder + "/sprites/images/" + sprite.Name.Content + "_" + i + ".png")); //worker.ExportAsPNG(sprite.Textures[i].Texture, projFolder + "/sprites/images/" + sprite.Name.Content + "_" + i + ".png"); var g = Graphics.FromImage(bitmapNew); @@ -187,6 +141,7 @@ void ExportSprite(UndertaleSprite sprite) bitmapNew.Dispose(); bitmapOrigin.Dispose(); } + } } // --------------- Export Background ---------------