Update ExportToProject.csx
This commit is contained in:
parent
80fc2d58bd
commit
524f0f8389
1 changed files with 183 additions and 188 deletions
|
@ -22,43 +22,41 @@ if (Directory.Exists(projFolder))
|
||||||
|
|
||||||
Directory.CreateDirectory(projFolder);
|
Directory.CreateDirectory(projFolder);
|
||||||
|
|
||||||
//UpdateProgressBar (null, "Exporting backgrounds...", progress++, 8);
|
// --------------- Start exporting ---------------
|
||||||
|
|
||||||
// --------------- 开始导出 ---------------
|
// Export sprites
|
||||||
|
|
||||||
// 执行导出精灵
|
|
||||||
UpdateProgressBar(null, "Exporting sprites...", progress++, 8);
|
UpdateProgressBar(null, "Exporting sprites...", progress++, 8);
|
||||||
await ExportSprites();
|
await ExportSprites();
|
||||||
|
|
||||||
// 执行导出背景
|
// Export backgrounds
|
||||||
UpdateProgressBar(null, "Exporting backgrounds...", progress++, 8);
|
UpdateProgressBar(null, "Exporting backgrounds...", progress++, 8);
|
||||||
await ExportBackground();
|
await ExportBackground();
|
||||||
|
|
||||||
// 执行导出对象
|
// Export objects
|
||||||
UpdateProgressBar(null, "Exporting objects...", progress++, 8);
|
UpdateProgressBar(null, "Exporting objects...", progress++, 8);
|
||||||
await ExportGameObjects();
|
await ExportGameObjects();
|
||||||
|
|
||||||
// 执行导出房间
|
// Export rooms
|
||||||
UpdateProgressBar(null, "Exporting rooms...", progress++, 8);
|
UpdateProgressBar(null, "Exporting rooms...", progress++, 8);
|
||||||
await ExportRooms();
|
await ExportRooms();
|
||||||
|
|
||||||
// 执行导出声音
|
// Export sounds
|
||||||
UpdateProgressBar(null, "Exporting sounds...", progress++, 8);
|
UpdateProgressBar(null, "Exporting sounds...", progress++, 8);
|
||||||
await ExportSounds();
|
await ExportSounds();
|
||||||
|
|
||||||
// 执行导出脚本
|
// Export scripts
|
||||||
UpdateProgressBar(null, "Exporting scripts...", progress++, 8);
|
UpdateProgressBar(null, "Exporting scripts...", progress++, 8);
|
||||||
await ExportScripts();
|
await ExportScripts();
|
||||||
|
|
||||||
// 执行导出字体
|
// Export fonts
|
||||||
UpdateProgressBar(null, "Exporting fonts...", progress++, 8);
|
UpdateProgressBar(null, "Exporting fonts...", progress++, 8);
|
||||||
await ExportFonts();
|
await ExportFonts();
|
||||||
|
|
||||||
// 执行导出项目文件
|
// Generate project file
|
||||||
UpdateProgressBar(null, "Exporting project file...", progress++, 8);
|
UpdateProgressBar(null, "Generating project file...", progress++, 8);
|
||||||
ExportProjectFile();
|
ExportProjectFile();
|
||||||
|
|
||||||
// --------------- 导出完毕 ---------------
|
// --------------- Export completed ---------------
|
||||||
worker.Cleanup();
|
worker.Cleanup();
|
||||||
HideProgressBar();
|
HideProgressBar();
|
||||||
ScriptMessage("Export Complete.\n\nLocation: " + projFolder);
|
ScriptMessage("Export Complete.\n\nLocation: " + projFolder);
|
||||||
|
@ -69,10 +67,11 @@ string GetFolder(string path)
|
||||||
}
|
}
|
||||||
string BoolToString(bool value)
|
string BoolToString(bool value)
|
||||||
{
|
{
|
||||||
|
// In the GMX file, -1 is true and 0 is false.
|
||||||
return value ? "-1" : "0";
|
return value ? "-1" : "0";
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------- 导出精灵 ---------------
|
// --------------- Export Sprite ---------------
|
||||||
async Task ExportSprites()
|
async Task ExportSprites()
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(projFolder + "/sprites/images");
|
Directory.CreateDirectory(projFolder + "/sprites/images");
|
||||||
|
@ -80,7 +79,7 @@ async Task ExportSprites()
|
||||||
}
|
}
|
||||||
void ExportSprite(UndertaleSprite sprite)
|
void ExportSprite(UndertaleSprite sprite)
|
||||||
{
|
{
|
||||||
// 保存精灵GMX
|
// Save the sprite GMX
|
||||||
var xmlWriter = XmlWriter.Create(projFolder + "/sprites/" + sprite.Name.Content + ".sprite.gmx");
|
var xmlWriter = XmlWriter.Create(projFolder + "/sprites/" + sprite.Name.Content + ".sprite.gmx");
|
||||||
xmlWriter.WriteStartDocument();
|
xmlWriter.WriteStartDocument();
|
||||||
|
|
||||||
|
@ -173,13 +172,13 @@ void ExportSprite(UndertaleSprite sprite)
|
||||||
xmlWriter.WriteEndDocument();
|
xmlWriter.WriteEndDocument();
|
||||||
xmlWriter.Close();
|
xmlWriter.Close();
|
||||||
|
|
||||||
// 保存精灵图像
|
// Save sprite images
|
||||||
for (int i = 0; i < sprite.Textures.Count; i++)
|
for (int i = 0; i < sprite.Textures.Count; i++)
|
||||||
if (sprite.Textures[i]?.Texture != null)
|
if (sprite.Textures[i]?.Texture != null)
|
||||||
worker.ExportAsPNG(sprite.Textures[i].Texture, projFolder + "/sprites/images/" + sprite.Name.Content + "_" + i + ".png");
|
worker.ExportAsPNG(sprite.Textures[i].Texture, projFolder + "/sprites/images/" + sprite.Name.Content + "_" + i + ".png");
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------- 导出背景 ---------------
|
// --------------- Export Background ---------------
|
||||||
async Task ExportBackground()
|
async Task ExportBackground()
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(projFolder + "/backgrounds/images");
|
Directory.CreateDirectory(projFolder + "/backgrounds/images");
|
||||||
|
@ -187,7 +186,7 @@ async Task ExportBackground()
|
||||||
}
|
}
|
||||||
void ExportBackground(UndertaleBackground background)
|
void ExportBackground(UndertaleBackground background)
|
||||||
{
|
{
|
||||||
// 保存背景GMX
|
// Save the backgound GMX
|
||||||
var xmlWriter = XmlWriter.Create(projFolder + "/backgrounds/" + background.Name.Content + ".background.gmx");
|
var xmlWriter = XmlWriter.Create(projFolder + "/backgrounds/" + background.Name.Content + ".background.gmx");
|
||||||
xmlWriter.WriteStartDocument();
|
xmlWriter.WriteStartDocument();
|
||||||
|
|
||||||
|
@ -255,10 +254,10 @@ void ExportBackground(UndertaleBackground background)
|
||||||
xmlWriter.WriteEndDocument();
|
xmlWriter.WriteEndDocument();
|
||||||
xmlWriter.Close();
|
xmlWriter.Close();
|
||||||
|
|
||||||
// 保存背景图像
|
// Save background images
|
||||||
worker.ExportAsPNG(background.Texture, projFolder + "/backgrounds/images/" + background.Name.Content + ".png");
|
worker.ExportAsPNG(background.Texture, projFolder + "/backgrounds/images/" + background.Name.Content + ".png");
|
||||||
}
|
}
|
||||||
// --------------- 导出对象 ---------------
|
// --------------- Export Object ---------------
|
||||||
async Task ExportGameObjects()
|
async Task ExportGameObjects()
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(projFolder + "/objects");
|
Directory.CreateDirectory(projFolder + "/objects");
|
||||||
|
@ -266,9 +265,7 @@ async Task ExportGameObjects()
|
||||||
}
|
}
|
||||||
void ExportGameObject(UndertaleGameObject gameObject)
|
void ExportGameObject(UndertaleGameObject gameObject)
|
||||||
{
|
{
|
||||||
//try
|
// Save the object GMX
|
||||||
{
|
|
||||||
// 保存对象GMX
|
|
||||||
var xmlWriter = XmlWriter.Create(projFolder + "/objects/" + gameObject.Name.Content + ".object.gmx");
|
var xmlWriter = XmlWriter.Create(projFolder + "/objects/" + gameObject.Name.Content + ".object.gmx");
|
||||||
xmlWriter.WriteStartDocument();
|
xmlWriter.WriteStartDocument();
|
||||||
|
|
||||||
|
@ -302,16 +299,16 @@ void ExportGameObject(UndertaleGameObject gameObject)
|
||||||
xmlWriter.WriteString(gameObject.TextureMaskId is null ? "<undefined>" : gameObject.TextureMaskId.Name.Content);
|
xmlWriter.WriteString(gameObject.TextureMaskId is null ? "<undefined>" : gameObject.TextureMaskId.Name.Content);
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
// 保存事件
|
// Save events
|
||||||
xmlWriter.WriteStartElement("events");
|
xmlWriter.WriteStartElement("events");
|
||||||
|
|
||||||
// 遍历事件类型列表
|
// Traversing the event type list
|
||||||
for (int i = 0; i < gameObject.Events.Count; i++)
|
for (int i = 0; i < gameObject.Events.Count; i++)
|
||||||
{
|
{
|
||||||
// 判断某个事件类型是否为空
|
// Determine if an event is empty
|
||||||
if (gameObject.Events[i].Count > 0)
|
if (gameObject.Events[i].Count > 0)
|
||||||
{
|
{
|
||||||
// 遍历事件列表
|
// Traversing event list
|
||||||
foreach (var j in gameObject.Events[i])
|
foreach (var j in gameObject.Events[i])
|
||||||
{
|
{
|
||||||
xmlWriter.WriteStartElement("event");
|
xmlWriter.WriteStartElement("event");
|
||||||
|
@ -320,19 +317,19 @@ void ExportGameObject(UndertaleGameObject gameObject)
|
||||||
|
|
||||||
if (j.EventSubtype == 4)
|
if (j.EventSubtype == 4)
|
||||||
{
|
{
|
||||||
// 当事件类型为碰撞事件时,要获取碰撞对象的实际名字
|
// To get the actual name of the collision object when the event type is a collision event
|
||||||
xmlWriter.WriteAttributeString("ename", Data.GameObjects[(int)j.EventSubtype].Name.Content);
|
xmlWriter.WriteAttributeString("ename", Data.GameObjects[(int)j.EventSubtype].Name.Content);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 直接获取子事件编号
|
// Get the sub-event number directly
|
||||||
xmlWriter.WriteAttributeString("enumb", j.EventSubtype.ToString());
|
xmlWriter.WriteAttributeString("enumb", j.EventSubtype.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
// 保存动作
|
// Save action
|
||||||
xmlWriter.WriteStartElement("action");
|
xmlWriter.WriteStartElement("action");
|
||||||
|
|
||||||
// 遍历动作列表
|
// Traversing the action list
|
||||||
foreach (var k in j.Actions)
|
foreach (var k in j.Actions)
|
||||||
{
|
{
|
||||||
xmlWriter.WriteStartElement("libid");
|
xmlWriter.WriteStartElement("libid");
|
||||||
|
@ -372,7 +369,7 @@ void ExportGameObject(UndertaleGameObject gameObject)
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
xmlWriter.WriteStartElement("whoName");
|
xmlWriter.WriteStartElement("whoName");
|
||||||
// 在data.win中所有DND动作被转换为字节码,自动处理执行者
|
// All DND actions in data.win are converted to assembly code, automatically processing the performer
|
||||||
xmlWriter.WriteString("self");
|
xmlWriter.WriteString("self");
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
|
@ -398,7 +395,7 @@ void ExportGameObject(UndertaleGameObject gameObject)
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
}
|
}
|
||||||
// TODO:UTMT没有给出关于对象物理的属性
|
// TODO:Physics
|
||||||
|
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
|
@ -412,11 +409,9 @@ void ExportGameObject(UndertaleGameObject gameObject)
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
xmlWriter.WriteEndDocument();
|
xmlWriter.WriteEndDocument();
|
||||||
xmlWriter.Close();
|
xmlWriter.Close();
|
||||||
}
|
|
||||||
//catch { }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------- 导出房间 ---------------
|
// --------------- Export Room ---------------
|
||||||
async Task ExportRooms()
|
async Task ExportRooms()
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(projFolder + "/rooms");
|
Directory.CreateDirectory(projFolder + "/rooms");
|
||||||
|
@ -424,13 +419,13 @@ async Task ExportRooms()
|
||||||
}
|
}
|
||||||
void ExportRoom(UndertaleRoom room)
|
void ExportRoom(UndertaleRoom room)
|
||||||
{
|
{
|
||||||
// 保存房间GMX
|
// Save the room GMX
|
||||||
var xmlWriter = XmlWriter.Create(projFolder + "/rooms/" + room.Name.Content + ".room.gmx");
|
var xmlWriter = XmlWriter.Create(projFolder + "/rooms/" + room.Name.Content + ".room.gmx");
|
||||||
xmlWriter.WriteStartDocument();
|
xmlWriter.WriteStartDocument();
|
||||||
|
|
||||||
xmlWriter.WriteStartElement("room");
|
xmlWriter.WriteStartElement("room");
|
||||||
|
|
||||||
// 基本设定
|
// Room settings
|
||||||
xmlWriter.WriteStartElement("caption");
|
xmlWriter.WriteStartElement("caption");
|
||||||
xmlWriter.WriteString(room.Caption.Content);
|
xmlWriter.WriteString(room.Caption.Content);
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
@ -487,9 +482,9 @@ void ExportRoom(UndertaleRoom room)
|
||||||
xmlWriter.WriteString(BoolToString(room.Flags.HasFlag(UndertaleRoom.RoomEntryFlags.ClearDisplayBuffer)));
|
xmlWriter.WriteString(BoolToString(room.Flags.HasFlag(UndertaleRoom.RoomEntryFlags.ClearDisplayBuffer)));
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
// TODO:这里原room文件有一些makerSettings,看似不必要就没有生成
|
// TODO:MakerSettings
|
||||||
|
|
||||||
// 背景
|
// Room backgrounds
|
||||||
xmlWriter.WriteStartElement("backgrounds");
|
xmlWriter.WriteStartElement("backgrounds");
|
||||||
foreach (var i in room.Backgrounds)
|
foreach (var i in room.Backgrounds)
|
||||||
{
|
{
|
||||||
|
@ -504,14 +499,14 @@ void ExportRoom(UndertaleRoom room)
|
||||||
xmlWriter.WriteAttributeString("vtiled", i.TileY.ToString());
|
xmlWriter.WriteAttributeString("vtiled", i.TileY.ToString());
|
||||||
xmlWriter.WriteAttributeString("hspeed", i.SpeedX.ToString());
|
xmlWriter.WriteAttributeString("hspeed", i.SpeedX.ToString());
|
||||||
xmlWriter.WriteAttributeString("vspeed", i.SpeedY.ToString());
|
xmlWriter.WriteAttributeString("vspeed", i.SpeedY.ToString());
|
||||||
// TODO:这里stretch属性UTMT中没有给出
|
// TODO:Stretch
|
||||||
xmlWriter.WriteAttributeString("stretch", "0");
|
xmlWriter.WriteAttributeString("stretch", "0");
|
||||||
|
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
}
|
}
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
// 视野
|
// Room views
|
||||||
xmlWriter.WriteStartElement("views");
|
xmlWriter.WriteStartElement("views");
|
||||||
foreach (var i in room.Views)
|
foreach (var i in room.Views)
|
||||||
{
|
{
|
||||||
|
@ -536,7 +531,7 @@ void ExportRoom(UndertaleRoom room)
|
||||||
}
|
}
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
// 实例
|
// Room instances
|
||||||
xmlWriter.WriteStartElement("instances");
|
xmlWriter.WriteStartElement("instances");
|
||||||
foreach (var i in room.GameObjects)
|
foreach (var i in room.GameObjects)
|
||||||
{
|
{
|
||||||
|
@ -546,7 +541,7 @@ void ExportRoom(UndertaleRoom room)
|
||||||
xmlWriter.WriteAttributeString("x", i.X.ToString());
|
xmlWriter.WriteAttributeString("x", i.X.ToString());
|
||||||
xmlWriter.WriteAttributeString("y", i.Y.ToString());
|
xmlWriter.WriteAttributeString("y", i.Y.ToString());
|
||||||
xmlWriter.WriteAttributeString("name", "inst_" + i.InstanceID.ToString("X"));
|
xmlWriter.WriteAttributeString("name", "inst_" + i.InstanceID.ToString("X"));
|
||||||
// TODO:这里的locked属性UTMT里没有给出
|
// TODO:Locked
|
||||||
xmlWriter.WriteAttributeString("locked", "0");
|
xmlWriter.WriteAttributeString("locked", "0");
|
||||||
xmlWriter.WriteAttributeString("code", i.CreationCode != null ? Decompiler.Decompile(i.CreationCode, DECOMPILE_CONTEXT.Value) : "");
|
xmlWriter.WriteAttributeString("code", i.CreationCode != null ? Decompiler.Decompile(i.CreationCode, DECOMPILE_CONTEXT.Value) : "");
|
||||||
xmlWriter.WriteAttributeString("scaleX", i.ScaleX.ToString());
|
xmlWriter.WriteAttributeString("scaleX", i.ScaleX.ToString());
|
||||||
|
@ -558,7 +553,7 @@ void ExportRoom(UndertaleRoom room)
|
||||||
}
|
}
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
// 贴图
|
// Room tiles
|
||||||
xmlWriter.WriteStartElement("tiles");
|
xmlWriter.WriteStartElement("tiles");
|
||||||
foreach (var i in room.Tiles)
|
foreach (var i in room.Tiles)
|
||||||
{
|
{
|
||||||
|
@ -574,7 +569,7 @@ void ExportRoom(UndertaleRoom room)
|
||||||
xmlWriter.WriteAttributeString("id", i.InstanceID.ToString());
|
xmlWriter.WriteAttributeString("id", i.InstanceID.ToString());
|
||||||
xmlWriter.WriteAttributeString("name", "inst_" + i.InstanceID.ToString("X"));
|
xmlWriter.WriteAttributeString("name", "inst_" + i.InstanceID.ToString("X"));
|
||||||
xmlWriter.WriteAttributeString("depth", i.TileDepth.ToString());
|
xmlWriter.WriteAttributeString("depth", i.TileDepth.ToString());
|
||||||
// TODO:这里的locked属性UTMT里没有给出
|
// TODO:Locked
|
||||||
xmlWriter.WriteAttributeString("locked", "0");
|
xmlWriter.WriteAttributeString("locked", "0");
|
||||||
xmlWriter.WriteAttributeString("colour", i.Color.ToString());
|
xmlWriter.WriteAttributeString("colour", i.Color.ToString());
|
||||||
xmlWriter.WriteAttributeString("scaleX", i.ScaleX.ToString());
|
xmlWriter.WriteAttributeString("scaleX", i.ScaleX.ToString());
|
||||||
|
@ -584,14 +579,14 @@ void ExportRoom(UndertaleRoom room)
|
||||||
}
|
}
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
// TODO:UTMT没有给出关于房间物理的属性
|
// TODO:Room physics
|
||||||
|
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
xmlWriter.WriteEndDocument();
|
xmlWriter.WriteEndDocument();
|
||||||
xmlWriter.Close();
|
xmlWriter.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------- 导出声音 ---------------
|
// --------------- Export Sound ---------------
|
||||||
async Task ExportSounds()
|
async Task ExportSounds()
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(projFolder + "/sound/audio");
|
Directory.CreateDirectory(projFolder + "/sound/audio");
|
||||||
|
@ -599,14 +594,14 @@ async Task ExportSounds()
|
||||||
}
|
}
|
||||||
void ExportSound(UndertaleSound sound)
|
void ExportSound(UndertaleSound sound)
|
||||||
{
|
{
|
||||||
// 保存声音GMX
|
// Save the sound GMX
|
||||||
var xmlWriter = XmlWriter.Create(projFolder + "/sound/" + sound.Name.Content + ".sound.gmx");
|
var xmlWriter = XmlWriter.Create(projFolder + "/sound/" + sound.Name.Content + ".sound.gmx");
|
||||||
xmlWriter.WriteStartDocument();
|
xmlWriter.WriteStartDocument();
|
||||||
|
|
||||||
xmlWriter.WriteStartElement("sound");
|
xmlWriter.WriteStartElement("sound");
|
||||||
|
|
||||||
xmlWriter.WriteStartElement("kind");
|
xmlWriter.WriteStartElement("kind");
|
||||||
// TODO:UTMT没有给出kind属性,这里通过文件扩展名进行推断
|
// Inferred by file extension
|
||||||
xmlWriter.WriteString(Path.GetExtension(sound.File.Content) == ".ogg" ? "3" : "0");
|
xmlWriter.WriteString(Path.GetExtension(sound.File.Content) == ".ogg" ? "3" : "0");
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
|
@ -627,38 +622,38 @@ void ExportSound(UndertaleSound sound)
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
xmlWriter.WriteStartElement("pan");
|
xmlWriter.WriteStartElement("pan");
|
||||||
// TODO:UTMT中未给出声道属性
|
// TODO:Pan
|
||||||
xmlWriter.WriteString("0");
|
xmlWriter.WriteString("0");
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
xmlWriter.WriteStartElement("bitRates");
|
xmlWriter.WriteStartElement("bitRates");
|
||||||
// TODO:UTMT中未给出比特率属性
|
// TODO:BitRates
|
||||||
xmlWriter.WriteString("192");
|
xmlWriter.WriteString("192");
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
xmlWriter.WriteStartElement("sampleRates");
|
xmlWriter.WriteStartElement("sampleRates");
|
||||||
// TODO:UTMT中未给出采样率属性
|
// TODO:SampleRates
|
||||||
xmlWriter.WriteStartElement("sampleRate");
|
xmlWriter.WriteStartElement("sampleRate");
|
||||||
xmlWriter.WriteString("44100");
|
xmlWriter.WriteString("44100");
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
xmlWriter.WriteStartElement("types");
|
xmlWriter.WriteStartElement("types");
|
||||||
// TODO:UTMT中未给出类型属性
|
// TODO:Types
|
||||||
xmlWriter.WriteStartElement("type");
|
xmlWriter.WriteStartElement("type");
|
||||||
xmlWriter.WriteString("1");
|
xmlWriter.WriteString("1");
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
xmlWriter.WriteStartElement("bitDepths");
|
xmlWriter.WriteStartElement("bitDepths");
|
||||||
// TODO:UTMT中未给出bitDepths属性
|
// TODO:BitDepths
|
||||||
xmlWriter.WriteStartElement("bitDepth");
|
xmlWriter.WriteStartElement("bitDepth");
|
||||||
xmlWriter.WriteString("16");
|
xmlWriter.WriteString("16");
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
xmlWriter.WriteStartElement("preload");
|
xmlWriter.WriteStartElement("preload");
|
||||||
// TODO:UTMT中未给出preload属性
|
// TODO:Preload
|
||||||
xmlWriter.WriteString("-1");
|
xmlWriter.WriteString("-1");
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
|
@ -667,22 +662,22 @@ void ExportSound(UndertaleSound sound)
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
xmlWriter.WriteStartElement("compressed");
|
xmlWriter.WriteStartElement("compressed");
|
||||||
// TODO:UTMT中未给出compressed属性,这里通过文件扩展名进行推断
|
// Inferred by file extension
|
||||||
xmlWriter.WriteString(Path.GetExtension(sound.File.Content) == ".ogg" ? "1" : "0");
|
xmlWriter.WriteString(Path.GetExtension(sound.File.Content) == ".ogg" ? "1" : "0");
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
xmlWriter.WriteStartElement("streamed");
|
xmlWriter.WriteStartElement("streamed");
|
||||||
// TODO:UTMT中未给出streamed属性,这里通过文件扩展名进行推断
|
// Inferred by file extension
|
||||||
xmlWriter.WriteString(Path.GetExtension(sound.File.Content) == ".ogg" ? "1" : "0");
|
xmlWriter.WriteString(Path.GetExtension(sound.File.Content) == ".ogg" ? "1" : "0");
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
xmlWriter.WriteStartElement("uncompressOnLoad");
|
xmlWriter.WriteStartElement("uncompressOnLoad");
|
||||||
// TODO:UTMT中未给出uncompressOnLoad属性
|
// TODO:UncompressOnLoad
|
||||||
xmlWriter.WriteString("0");
|
xmlWriter.WriteString("0");
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
xmlWriter.WriteStartElement("audioGroup");
|
xmlWriter.WriteStartElement("audioGroup");
|
||||||
// TODO:UTMT中给出了音频组,但并不明确
|
// TODO:AudioGroup
|
||||||
xmlWriter.WriteString("0");
|
xmlWriter.WriteString("0");
|
||||||
xmlWriter.WriteEndElement();
|
xmlWriter.WriteEndElement();
|
||||||
|
|
||||||
|
@ -690,12 +685,12 @@ void ExportSound(UndertaleSound sound)
|
||||||
xmlWriter.WriteEndDocument();
|
xmlWriter.WriteEndDocument();
|
||||||
xmlWriter.Close();
|
xmlWriter.Close();
|
||||||
|
|
||||||
// 保存音频文件
|
// Save sound files
|
||||||
if (sound.AudioFile != null)
|
if (sound.AudioFile != null)
|
||||||
File.WriteAllBytes(projFolder + "/sound/audio/" + sound.File.Content, sound.AudioFile.Data);
|
File.WriteAllBytes(projFolder + "/sound/audio/" + sound.File.Content, sound.AudioFile.Data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------- 导出脚本 ---------------
|
// --------------- Export Script ---------------
|
||||||
async Task ExportScripts()
|
async Task ExportScripts()
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(projFolder + "/scripts/");
|
Directory.CreateDirectory(projFolder + "/scripts/");
|
||||||
|
@ -703,11 +698,11 @@ async Task ExportScripts()
|
||||||
}
|
}
|
||||||
void ExportScript(UndertaleScript script)
|
void ExportScript(UndertaleScript script)
|
||||||
{
|
{
|
||||||
// 保存脚本GML
|
// Save GML files
|
||||||
File.WriteAllText(projFolder + "/scripts/" + script.Name.Content + ".gml", (script.Code != null ? Decompiler.Decompile(script.Code, DECOMPILE_CONTEXT.Value) : ""));
|
File.WriteAllText(projFolder + "/scripts/" + script.Name.Content + ".gml", (script.Code != null ? Decompiler.Decompile(script.Code, DECOMPILE_CONTEXT.Value) : ""));
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------- 导出字体 ---------------
|
// --------------- Export Font ---------------
|
||||||
async Task ExportFonts()
|
async Task ExportFonts()
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(projFolder + "/fonts/");
|
Directory.CreateDirectory(projFolder + "/fonts/");
|
||||||
|
@ -715,7 +710,7 @@ async Task ExportFonts()
|
||||||
}
|
}
|
||||||
void ExportFont(UndertaleFont font)
|
void ExportFont(UndertaleFont font)
|
||||||
{
|
{
|
||||||
// 保存字体GMX
|
// Save the font GMX
|
||||||
var xmlWriter = XmlWriter.Create(projFolder + "/fonts/" + font.Name.Content + ".font.gmx");
|
var xmlWriter = XmlWriter.Create(projFolder + "/fonts/" + font.Name.Content + ".font.gmx");
|
||||||
xmlWriter.WriteStartDocument();
|
xmlWriter.WriteStartDocument();
|
||||||
|
|
||||||
|
@ -795,14 +790,14 @@ void ExportFont(UndertaleFont font)
|
||||||
xmlWriter.WriteEndDocument();
|
xmlWriter.WriteEndDocument();
|
||||||
xmlWriter.Close();
|
xmlWriter.Close();
|
||||||
|
|
||||||
// 保存字体图像
|
// Save font textures
|
||||||
worker.ExportAsPNG(font.Texture, projFolder + "/fonts/" + font.Name.Content + ".png");
|
worker.ExportAsPNG(font.Texture, projFolder + "/fonts/" + font.Name.Content + ".png");
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------- 导出项目文件 ---------------
|
// --------------- Generate project file ---------------
|
||||||
void ExportProjectFile()
|
void ExportProjectFile()
|
||||||
{
|
{
|
||||||
// 保存字体GMX
|
// Write all resource indexes to project.gmx
|
||||||
var xmlWriter = XmlWriter.Create(projFolder + "Export_Project.project.gmx");
|
var xmlWriter = XmlWriter.Create(projFolder + "Export_Project.project.gmx");
|
||||||
xmlWriter.WriteStartDocument();
|
xmlWriter.WriteStartDocument();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue