Update ExportToProject.csx

This commit is contained in:
cubeww 2019-11-02 21:42:38 +08:00
parent d1e82e05b1
commit f85b76410d

View file

@ -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<DecompileContext> DECOMPILE_CONTEXT = new ThreadLocal<DecompileContext>(() => 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 ---------------