- [Core] Export multiple AssetMap formats
This commit is contained in:
@@ -82,7 +82,7 @@
|
|||||||
<setting name="enableResolveDependencies" serializeAs="String">
|
<setting name="enableResolveDependencies" serializeAs="String">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</setting>
|
</setting>
|
||||||
<setting name="selectedAssetMapType" serializeAs="String">
|
<setting name="assetMapType" serializeAs="String">
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
</setting>
|
</setting>
|
||||||
<setting name="collectAnimations" serializeAs="String">
|
<setting name="collectAnimations" serializeAs="String">
|
||||||
|
|||||||
20
AssetStudio.GUI/MainForm.Designer.cs
generated
20
AssetStudio.GUI/MainForm.Designer.cs
generated
@@ -114,7 +114,6 @@ namespace AssetStudio.GUI
|
|||||||
toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
|
toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
assetMapNameTextBox = new System.Windows.Forms.ToolStripTextBox();
|
assetMapNameTextBox = new System.Windows.Forms.ToolStripTextBox();
|
||||||
buildAssetMapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
buildAssetMapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
assetMapTypeComboBox = new System.Windows.Forms.ToolStripComboBox();
|
|
||||||
toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator();
|
toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
loadAIToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
loadAIToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
assetBrowserToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
assetBrowserToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
@@ -172,6 +171,7 @@ namespace AssetStudio.GUI
|
|||||||
exportAnimatorwithselectedAnimationClipMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
exportAnimatorwithselectedAnimationClipMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
goToSceneHierarchyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
goToSceneHierarchyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
showOriginalFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
showOriginalFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
assetMapTypeMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
menuStrip1.SuspendLayout();
|
menuStrip1.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
|
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
|
||||||
splitContainer1.Panel1.SuspendLayout();
|
splitContainer1.Panel1.SuspendLayout();
|
||||||
@@ -723,7 +723,7 @@ namespace AssetStudio.GUI
|
|||||||
//
|
//
|
||||||
// miscToolStripMenuItem
|
// miscToolStripMenuItem
|
||||||
//
|
//
|
||||||
miscToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { MapNameComboBox, buildMapToolStripMenuItem, buildBothToolStripMenuItem, clearMapToolStripMenuItem, toolStripSeparator7, assetMapNameTextBox, buildAssetMapToolStripMenuItem, assetMapTypeComboBox, toolStripSeparator8, loadAIToolStripMenuItem, assetBrowserToolStripMenuItem });
|
miscToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { MapNameComboBox, buildMapToolStripMenuItem, buildBothToolStripMenuItem, clearMapToolStripMenuItem, toolStripSeparator7, assetMapNameTextBox, buildAssetMapToolStripMenuItem, assetMapTypeMenuItem, toolStripSeparator8, loadAIToolStripMenuItem, assetBrowserToolStripMenuItem });
|
||||||
miscToolStripMenuItem.Name = "miscToolStripMenuItem";
|
miscToolStripMenuItem.Name = "miscToolStripMenuItem";
|
||||||
miscToolStripMenuItem.Size = new System.Drawing.Size(47, 20);
|
miscToolStripMenuItem.Size = new System.Drawing.Size(47, 20);
|
||||||
miscToolStripMenuItem.Text = "Misc.";
|
miscToolStripMenuItem.Text = "Misc.";
|
||||||
@@ -774,13 +774,6 @@ namespace AssetStudio.GUI
|
|||||||
buildAssetMapToolStripMenuItem.Text = "Build AssetMap";
|
buildAssetMapToolStripMenuItem.Text = "Build AssetMap";
|
||||||
buildAssetMapToolStripMenuItem.Click += buildAssetMapToolStripMenuItem_Click;
|
buildAssetMapToolStripMenuItem.Click += buildAssetMapToolStripMenuItem_Click;
|
||||||
//
|
//
|
||||||
// assetMapTypeComboBox
|
|
||||||
//
|
|
||||||
assetMapTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
|
||||||
assetMapTypeComboBox.Name = "assetMapTypeComboBox";
|
|
||||||
assetMapTypeComboBox.Size = new System.Drawing.Size(121, 23);
|
|
||||||
assetMapTypeComboBox.SelectedIndexChanged += assetMapTypeComboBox_SelectedIndexChanged;
|
|
||||||
//
|
|
||||||
// toolStripSeparator8
|
// toolStripSeparator8
|
||||||
//
|
//
|
||||||
toolStripSeparator8.Name = "toolStripSeparator8";
|
toolStripSeparator8.Name = "toolStripSeparator8";
|
||||||
@@ -1344,6 +1337,13 @@ namespace AssetStudio.GUI
|
|||||||
showOriginalFileToolStripMenuItem.Visible = false;
|
showOriginalFileToolStripMenuItem.Visible = false;
|
||||||
showOriginalFileToolStripMenuItem.Click += showOriginalFileToolStripMenuItem_Click;
|
showOriginalFileToolStripMenuItem.Click += showOriginalFileToolStripMenuItem_Click;
|
||||||
//
|
//
|
||||||
|
// assetMapTypeMenuItem
|
||||||
|
//
|
||||||
|
assetMapTypeMenuItem.Name = "assetMapTypeMenuItem";
|
||||||
|
assetMapTypeMenuItem.Size = new System.Drawing.Size(181, 22);
|
||||||
|
assetMapTypeMenuItem.Text = "AssetMap Type";
|
||||||
|
assetMapTypeMenuItem.DropDownItemClicked += assetMapTypeMenuItem_DropDownItemClicked;
|
||||||
|
//
|
||||||
// MainForm
|
// MainForm
|
||||||
//
|
//
|
||||||
AllowDrop = true;
|
AllowDrop = true;
|
||||||
@@ -1513,7 +1513,6 @@ namespace AssetStudio.GUI
|
|||||||
private System.Windows.Forms.ToolStripMenuItem loadAIToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem loadAIToolStripMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem clearConsoleToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem clearConsoleToolStripMenuItem;
|
||||||
private System.Windows.Forms.ToolStripTextBox assetMapNameTextBox;
|
private System.Windows.Forms.ToolStripTextBox assetMapNameTextBox;
|
||||||
private System.Windows.Forms.ToolStripComboBox assetMapTypeComboBox;
|
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator7;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator7;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator8;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator8;
|
||||||
private System.Windows.Forms.ToolStripMenuItem buildMapToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem buildMapToolStripMenuItem;
|
||||||
@@ -1533,6 +1532,7 @@ namespace AssetStudio.GUI
|
|||||||
private System.Windows.Forms.ToolStripMenuItem enableFileLogging;
|
private System.Windows.Forms.ToolStripMenuItem enableFileLogging;
|
||||||
private System.Windows.Forms.ToolStripMenuItem enableVerbose;
|
private System.Windows.Forms.ToolStripMenuItem enableVerbose;
|
||||||
private System.Windows.Forms.ToolStripMenuItem sceneHierarchy;
|
private System.Windows.Forms.ToolStripMenuItem sceneHierarchy;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem assetMapTypeMenuItem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -143,8 +143,13 @@ namespace AssetStudio.GUI
|
|||||||
|
|
||||||
private void InitalizeOptions()
|
private void InitalizeOptions()
|
||||||
{
|
{
|
||||||
assetMapTypeComboBox.Items.AddRange(Enum.GetValues<ExportListType>().Cast<object>().ToArray());
|
var assetMapType = (ExportListType)Properties.Settings.Default.assetMapType;
|
||||||
assetMapTypeComboBox.SelectedIndex = Properties.Settings.Default.selectedAssetMapType;
|
var assetMapTypes = Enum.GetValues<ExportListType>().ToArray()[1..];
|
||||||
|
foreach(var mapType in assetMapTypes)
|
||||||
|
{
|
||||||
|
var menuItem = new ToolStripMenuItem(mapType.ToString()) { CheckOnClick = true, Checked = assetMapType.HasFlag(mapType), Tag = (int)mapType };
|
||||||
|
assetMapTypeMenuItem.DropDownItems.Add(menuItem);
|
||||||
|
}
|
||||||
|
|
||||||
specifyGame.Items.AddRange(GameManager.GetGames());
|
specifyGame.Items.AddRange(GameManager.GetGames());
|
||||||
specifyGame.SelectedIndex = Properties.Settings.Default.selectedGame;
|
specifyGame.SelectedIndex = Properties.Settings.Default.selectedGame;
|
||||||
@@ -1281,7 +1286,7 @@ namespace AssetStudio.GUI
|
|||||||
var model = new ModelConverter(m_Animator, Properties.Settings.Default.convertType, Studio.Game, false, Array.Empty<AnimationClip>());
|
var model = new ModelConverter(m_Animator, Properties.Settings.Default.convertType, Studio.Game, false, Array.Empty<AnimationClip>());
|
||||||
PreviewModel(model);
|
PreviewModel(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PreviewAnimationClip(AnimationClip clip)
|
private void PreviewAnimationClip(AnimationClip clip)
|
||||||
{
|
{
|
||||||
var str = clip.Convert();
|
var str = clip.Convert();
|
||||||
@@ -2017,10 +2022,24 @@ namespace AssetStudio.GUI
|
|||||||
SkipContainer = skipContainer.Checked;
|
SkipContainer = skipContainer.Checked;
|
||||||
|
|
||||||
}
|
}
|
||||||
private void assetMapTypeComboBox_SelectedIndexChanged(object sender, EventArgs e)
|
private void assetMapTypeMenuItem_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
|
||||||
{
|
{
|
||||||
Properties.Settings.Default.selectedAssetMapType = assetMapTypeComboBox.SelectedIndex;
|
var assetMapType = Properties.Settings.Default.assetMapType;
|
||||||
Properties.Settings.Default.Save();
|
if (e.ClickedItem is ToolStripMenuItem item)
|
||||||
|
{
|
||||||
|
if (item.Checked)
|
||||||
|
{
|
||||||
|
assetMapType -= (int)item.Tag;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
assetMapType += (int)item.Tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
Properties.Settings.Default.assetMapType = assetMapType;
|
||||||
|
Properties.Settings.Default.Save();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
private void modelsOnly_CheckedChanged(object sender, EventArgs e)
|
private void modelsOnly_CheckedChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
@@ -2143,7 +2162,7 @@ namespace AssetStudio.GUI
|
|||||||
|
|
||||||
var input = MapNameComboBox.Text;
|
var input = MapNameComboBox.Text;
|
||||||
var selectedText = MapNameComboBox.SelectedText;
|
var selectedText = MapNameComboBox.SelectedText;
|
||||||
var exportListType = (ExportListType)assetMapTypeComboBox.SelectedItem;
|
var exportListType = (ExportListType)assetMapTypeMenuItem.DropDownItems.Cast<ToolStripMenuItem>().Select(x => x.Checked ? (int)x.Tag : 0).Sum();
|
||||||
var name = "";
|
var name = "";
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(selectedText))
|
if (!string.IsNullOrEmpty(selectedText))
|
||||||
@@ -2192,15 +2211,6 @@ namespace AssetStudio.GUI
|
|||||||
saveFolderDialog.Title = "Select Output Folder";
|
saveFolderDialog.Title = "Select Output Folder";
|
||||||
if (saveFolderDialog.ShowDialog(this) == DialogResult.OK)
|
if (saveFolderDialog.ShowDialog(this) == DialogResult.OK)
|
||||||
{
|
{
|
||||||
if (File.Exists(Path.Combine(saveFolderDialog.Folder, $"{name}{exportListType.GetExtension()}")))
|
|
||||||
{
|
|
||||||
var acceptOverride = MessageBox.Show("AssetMap already exist, Do you want to override it ?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
|
|
||||||
if (acceptOverride != DialogResult.Yes)
|
|
||||||
{
|
|
||||||
InvokeUpdate(miscToolStripMenuItem, true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
saveDirectoryBackup = saveFolderDialog.Folder;
|
saveDirectoryBackup = saveFolderDialog.Folder;
|
||||||
AssetsHelper.SetUnityVersion(version);
|
AssetsHelper.SetUnityVersion(version);
|
||||||
await Task.Run(() => AssetsHelper.BuildBoth(files, name, openFolderDialog.Folder, Studio.Game, saveFolderDialog.Folder, exportListType));
|
await Task.Run(() => AssetsHelper.BuildBoth(files, name, openFolderDialog.Folder, Studio.Game, saveFolderDialog.Folder, exportListType));
|
||||||
@@ -2317,7 +2327,7 @@ namespace AssetStudio.GUI
|
|||||||
InvokeUpdate(miscToolStripMenuItem, false);
|
InvokeUpdate(miscToolStripMenuItem, false);
|
||||||
|
|
||||||
var input = assetMapNameTextBox.Text;
|
var input = assetMapNameTextBox.Text;
|
||||||
var exportListType = (ExportListType)assetMapTypeComboBox.SelectedItem;
|
var exportListType = (ExportListType)assetMapTypeMenuItem.DropDownItems.Cast<ToolStripMenuItem>().Select(x => x.Checked ? (int)x.Tag : 0).Sum();
|
||||||
var name = "assets_map";
|
var name = "assets_map";
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(input))
|
if (!string.IsNullOrEmpty(input))
|
||||||
@@ -2346,16 +2356,6 @@ namespace AssetStudio.GUI
|
|||||||
saveFolderDialog.Title = "Select Output Folder";
|
saveFolderDialog.Title = "Select Output Folder";
|
||||||
if (saveFolderDialog.ShowDialog(this) == DialogResult.OK)
|
if (saveFolderDialog.ShowDialog(this) == DialogResult.OK)
|
||||||
{
|
{
|
||||||
if (File.Exists(Path.Combine(saveFolderDialog.Folder, $"{name}{exportListType.GetExtension()}")))
|
|
||||||
{
|
|
||||||
var acceptOverride = MessageBox.Show("AssetMap already exist, Do you want to override it ?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
|
|
||||||
if (acceptOverride != DialogResult.Yes)
|
|
||||||
{
|
|
||||||
InvokeUpdate(miscToolStripMenuItem, true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
saveDirectoryBackup = saveFolderDialog.Folder;
|
|
||||||
AssetsHelper.SetUnityVersion(version);
|
AssetsHelper.SetUnityVersion(version);
|
||||||
await Task.Run(() => AssetsHelper.BuildAssetMap(files, name, Studio.Game, saveFolderDialog.Folder, exportListType));
|
await Task.Run(() => AssetsHelper.BuildAssetMap(files, name, Studio.Game, saveFolderDialog.Folder, exportListType));
|
||||||
}
|
}
|
||||||
|
|||||||
8
AssetStudio.GUI/Properties/Settings.Designer.cs
generated
8
AssetStudio.GUI/Properties/Settings.Designer.cs
generated
@@ -12,7 +12,7 @@ namespace AssetStudio.GUI.Properties {
|
|||||||
|
|
||||||
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.8.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.7.0.0")]
|
||||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||||
|
|
||||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
@@ -338,12 +338,12 @@ namespace AssetStudio.GUI.Properties {
|
|||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||||
public int selectedAssetMapType {
|
public int assetMapType {
|
||||||
get {
|
get {
|
||||||
return ((int)(this["selectedAssetMapType"]));
|
return ((int)(this["assetMapType"]));
|
||||||
}
|
}
|
||||||
set {
|
set {
|
||||||
this["selectedAssetMapType"] = value;
|
this["assetMapType"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@
|
|||||||
<Setting Name="enableResolveDependencies" Type="System.Boolean" Scope="User">
|
<Setting Name="enableResolveDependencies" Type="System.Boolean" Scope="User">
|
||||||
<Value Profile="(Default)">True</Value>
|
<Value Profile="(Default)">True</Value>
|
||||||
</Setting>
|
</Setting>
|
||||||
<Setting Name="selectedAssetMapType" Type="System.Int32" Scope="User">
|
<Setting Name="assetMapType" Type="System.Int32" Scope="User">
|
||||||
<Value Profile="(Default)">0</Value>
|
<Value Profile="(Default)">0</Value>
|
||||||
</Setting>
|
</Setting>
|
||||||
<Setting Name="collectAnimations" Type="System.Boolean" Scope="User">
|
<Setting Name="collectAnimations" Type="System.Boolean" Scope="User">
|
||||||
|
|||||||
@@ -510,56 +510,60 @@ namespace AssetStudio
|
|||||||
|
|
||||||
Progress.Reset();
|
Progress.Reset();
|
||||||
|
|
||||||
string filename = Path.Combine(savePath, $"{name}{exportListType.GetExtension()}");
|
string filename = string.Empty;
|
||||||
switch (exportListType)
|
if (exportListType.Equals(ExportListType.None))
|
||||||
{
|
{
|
||||||
case ExportListType.XML:
|
Logger.Info($"No export list type has been selected, skipping...");
|
||||||
var xmlSettings = new XmlWriterSettings() { Indent = true };
|
|
||||||
using (XmlWriter writer = XmlWriter.Create(filename, xmlSettings))
|
|
||||||
{
|
|
||||||
writer.WriteStartDocument();
|
|
||||||
writer.WriteStartElement("Assets");
|
|
||||||
writer.WriteAttributeString("filename", filename);
|
|
||||||
writer.WriteAttributeString("createdAt", DateTime.UtcNow.ToString("s"));
|
|
||||||
foreach(var asset in toExportAssets)
|
|
||||||
{
|
|
||||||
writer.WriteStartElement("Asset");
|
|
||||||
writer.WriteElementString("Name", asset.Name);
|
|
||||||
writer.WriteElementString("Container", asset.Container);
|
|
||||||
writer.WriteStartElement("Type");
|
|
||||||
writer.WriteAttributeString("id", ((int)asset.Type).ToString());
|
|
||||||
writer.WriteValue(asset.Type.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteElementString("PathID", asset.PathID.ToString());
|
|
||||||
writer.WriteElementString("Source", asset.Source);
|
|
||||||
writer.WriteEndElement();
|
|
||||||
}
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteEndDocument();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case ExportListType.JSON:
|
|
||||||
using (StreamWriter file = File.CreateText(filename))
|
|
||||||
{
|
|
||||||
var serializer = new JsonSerializer() { Formatting = Newtonsoft.Json.Formatting.Indented };
|
|
||||||
serializer.Converters.Add(new StringEnumConverter());
|
|
||||||
serializer.Serialize(file, toExportAssets);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case ExportListType.MessagePack:
|
|
||||||
using (var file = File.Create(filename))
|
|
||||||
{
|
|
||||||
var assetMap = new AssetMap
|
|
||||||
{
|
|
||||||
GameType = game.Type,
|
|
||||||
AssetEntries = toExportAssets
|
|
||||||
};
|
|
||||||
MessagePackSerializer.Serialize(file, assetMap, MessagePackSerializerOptions.Standard.WithCompression(MessagePackCompression.Lz4BlockArray));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (exportListType.HasFlag(ExportListType.XML))
|
||||||
|
{
|
||||||
|
filename = Path.Combine(savePath, $"{name}.xml");
|
||||||
|
var xmlSettings = new XmlWriterSettings() { Indent = true };
|
||||||
|
using XmlWriter writer = XmlWriter.Create(filename, xmlSettings);
|
||||||
|
writer.WriteStartDocument();
|
||||||
|
writer.WriteStartElement("Assets");
|
||||||
|
writer.WriteAttributeString("filename", filename);
|
||||||
|
writer.WriteAttributeString("createdAt", DateTime.UtcNow.ToString("s"));
|
||||||
|
foreach (var asset in toExportAssets)
|
||||||
|
{
|
||||||
|
writer.WriteStartElement("Asset");
|
||||||
|
writer.WriteElementString("Name", asset.Name);
|
||||||
|
writer.WriteElementString("Container", asset.Container);
|
||||||
|
writer.WriteStartElement("Type");
|
||||||
|
writer.WriteAttributeString("id", ((int)asset.Type).ToString());
|
||||||
|
writer.WriteValue(asset.Type.ToString());
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteElementString("PathID", asset.PathID.ToString());
|
||||||
|
writer.WriteElementString("Source", asset.Source);
|
||||||
|
writer.WriteEndElement();
|
||||||
|
}
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteEndDocument();
|
||||||
|
}
|
||||||
|
if (exportListType.HasFlag(ExportListType.JSON))
|
||||||
|
{
|
||||||
|
filename = Path.Combine(savePath, $"{name}.json");
|
||||||
|
using StreamWriter file = File.CreateText(filename);
|
||||||
|
var serializer = new JsonSerializer() { Formatting = Newtonsoft.Json.Formatting.Indented };
|
||||||
|
serializer.Converters.Add(new StringEnumConverter());
|
||||||
|
serializer.Serialize(file, toExportAssets);
|
||||||
|
}
|
||||||
|
if (exportListType.HasFlag(ExportListType.MessagePack))
|
||||||
|
{
|
||||||
|
filename = Path.Combine(savePath, $"{name}.map");
|
||||||
|
using var file = File.Create(filename);
|
||||||
|
var assetMap = new AssetMap
|
||||||
|
{
|
||||||
|
GameType = game.Type,
|
||||||
|
AssetEntries = toExportAssets
|
||||||
|
};
|
||||||
|
MessagePackSerializer.Serialize(file, assetMap, MessagePackSerializerOptions.Standard.WithCompression(MessagePackCompression.Lz4BlockArray));
|
||||||
|
}
|
||||||
|
|
||||||
Logger.Info($"Finished buidling AssetMap with {toExportAssets.Length} assets.");
|
Logger.Info($"Finished buidling AssetMap with {toExportAssets.Length} assets.");
|
||||||
|
}
|
||||||
|
|
||||||
resetEvent?.Set();
|
resetEvent?.Set();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,20 +1,13 @@
|
|||||||
namespace AssetStudio
|
using System;
|
||||||
|
|
||||||
|
namespace AssetStudio
|
||||||
{
|
{
|
||||||
|
[Flags]
|
||||||
public enum ExportListType
|
public enum ExportListType
|
||||||
{
|
{
|
||||||
|
None,
|
||||||
|
MessagePack,
|
||||||
XML,
|
XML,
|
||||||
JSON,
|
JSON = 4,
|
||||||
MessagePack
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class ExportListTypeExtensions
|
|
||||||
{
|
|
||||||
public static string GetExtension(this ExportListType type) => type switch
|
|
||||||
{
|
|
||||||
ExportListType.XML => ".xml",
|
|
||||||
ExportListType.JSON => ".json",
|
|
||||||
ExportListType.MessagePack => ".map",
|
|
||||||
_ => throw new System.NotImplementedException(),
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user