mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-05-25 05:40:21 -04:00
[GUI] Add tree view for dump
This commit is contained in:
parent
b7d21e5bd8
commit
58917ab7dc
@ -25,7 +25,7 @@ namespace AssetStudio
|
||||
public uint byteSize;
|
||||
[JsonIgnore]
|
||||
public string Name;
|
||||
private static JsonSerializerOptions jsonOptions;
|
||||
private static readonly JsonSerializerOptions jsonOptions;
|
||||
|
||||
static Object()
|
||||
{
|
||||
@ -95,6 +95,24 @@ namespace AssetStudio
|
||||
return TypeTreeHelper.ReadType(m_Type, reader);
|
||||
}
|
||||
|
||||
public JsonDocument ToJsonDoc(TypeTree m_Type = null)
|
||||
{
|
||||
var typeDict = ToType(m_Type);
|
||||
try
|
||||
{
|
||||
if (typeDict != null)
|
||||
{
|
||||
return JsonSerializer.SerializeToDocument(typeDict);
|
||||
}
|
||||
return JsonSerializer.SerializeToDocument(this, GetType(), jsonOptions);
|
||||
}
|
||||
catch
|
||||
{
|
||||
//ignore
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public byte[] GetRawData()
|
||||
{
|
||||
reader.Reset();
|
||||
|
@ -198,13 +198,21 @@ namespace AssetStudio
|
||||
reader.Reset();
|
||||
var obj = new OrderedDictionary();
|
||||
var m_Nodes = m_Types.m_Nodes;
|
||||
for (int i = 1; i < m_Nodes.Count; i++)
|
||||
var readed = 0L;
|
||||
try
|
||||
{
|
||||
var m_Node = m_Nodes[i];
|
||||
var varNameStr = m_Node.m_Name;
|
||||
obj[varNameStr] = ReadValue(m_Nodes, reader, ref i);
|
||||
for (int i = 1; i < m_Nodes.Count; i++)
|
||||
{
|
||||
var m_Node = m_Nodes[i];
|
||||
var varNameStr = m_Node.m_Name;
|
||||
obj[varNameStr] = ReadValue(m_Nodes, reader, ref i);
|
||||
}
|
||||
readed = reader.Position - reader.byteStart;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//Ignore
|
||||
}
|
||||
var readed = reader.Position - reader.byteStart;
|
||||
if (readed != reader.byteSize)
|
||||
{
|
||||
Logger.Info($"Failed to read type, read {readed} bytes but expected {reader.byteSize} bytes");
|
||||
|
194
AssetStudioGUI/AssetStudioGUIForm.Designer.cs
generated
194
AssetStudioGUI/AssetStudioGUIForm.Designer.cs
generated
@ -43,6 +43,7 @@
|
||||
this.assetLoadingToolStripSeparator = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.enablePreview = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.displayInfo = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.useDumpTreeViewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.buildTreeStructureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.customCompressionTypeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.customCompressionZstdToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
@ -138,17 +139,18 @@
|
||||
this.textPreviewBox = new System.Windows.Forms.TextBox();
|
||||
this.classTextBox = new System.Windows.Forms.TextBox();
|
||||
this.tabPage5 = new System.Windows.Forms.TabPage();
|
||||
this.dumpTreeView = new System.Windows.Forms.TreeView();
|
||||
this.dumpTextBox = new System.Windows.Forms.TextBox();
|
||||
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
|
||||
this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.showRelatedAssetsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.clearSelectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.expandAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.collapseAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.sceneContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.shShowRelatedAssetsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.shToolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.shSelectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.shSlearSelectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.shToolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.shExpandAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.shCollapseAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.timer = new System.Windows.Forms.Timer(this.components);
|
||||
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
|
||||
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
@ -162,6 +164,11 @@
|
||||
this.exportL2DWithClipsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.goToSceneHierarchyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.showOriginalFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.dumpTreeViewContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.tvCopyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tvToolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.tvExpandAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tvCollapseAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuStrip1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
|
||||
this.splitContainer1.Panel1.SuspendLayout();
|
||||
@ -182,8 +189,9 @@
|
||||
((System.ComponentModel.ISupportInitialize)(this.FMODvolumeBar)).BeginInit();
|
||||
this.tabPage5.SuspendLayout();
|
||||
this.statusStrip1.SuspendLayout();
|
||||
this.contextMenuStrip2.SuspendLayout();
|
||||
this.sceneContextMenuStrip.SuspendLayout();
|
||||
this.contextMenuStrip1.SuspendLayout();
|
||||
this.dumpTreeViewContextMenuStrip.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// menuStrip1
|
||||
@ -257,6 +265,7 @@
|
||||
this.assetLoadingToolStripSeparator,
|
||||
this.enablePreview,
|
||||
this.displayInfo,
|
||||
this.useDumpTreeViewToolStripMenuItem,
|
||||
this.buildTreeStructureToolStripMenuItem,
|
||||
this.customCompressionTypeToolStripMenuItem,
|
||||
this.toolStripMenuItem14,
|
||||
@ -316,6 +325,14 @@
|
||||
"t, audio bitrate, etc.";
|
||||
this.displayInfo.CheckedChanged += new System.EventHandler(this.displayAssetInfo_Check);
|
||||
//
|
||||
// useDumpTreeViewToolStripMenuItem
|
||||
//
|
||||
this.useDumpTreeViewToolStripMenuItem.CheckOnClick = true;
|
||||
this.useDumpTreeViewToolStripMenuItem.Name = "useDumpTreeViewToolStripMenuItem";
|
||||
this.useDumpTreeViewToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
|
||||
this.useDumpTreeViewToolStripMenuItem.Text = "Use tree view to display dump";
|
||||
this.useDumpTreeViewToolStripMenuItem.CheckedChanged += new System.EventHandler(this.useDumpTreeViewToolStripMenuItem_CheckedChanged);
|
||||
//
|
||||
// buildTreeStructureToolStripMenuItem
|
||||
//
|
||||
this.buildTreeStructureToolStripMenuItem.Checked = true;
|
||||
@ -1271,6 +1288,7 @@
|
||||
//
|
||||
// tabPage5
|
||||
//
|
||||
this.tabPage5.Controls.Add(this.dumpTreeView);
|
||||
this.tabPage5.Controls.Add(this.dumpTextBox);
|
||||
this.tabPage5.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabPage5.Name = "tabPage5";
|
||||
@ -1279,6 +1297,16 @@
|
||||
this.tabPage5.Text = "Dump";
|
||||
this.tabPage5.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// dumpTreeView
|
||||
//
|
||||
this.dumpTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.dumpTreeView.Location = new System.Drawing.Point(0, 0);
|
||||
this.dumpTreeView.Name = "dumpTreeView";
|
||||
this.dumpTreeView.Size = new System.Drawing.Size(768, 607);
|
||||
this.dumpTreeView.TabIndex = 1;
|
||||
this.dumpTreeView.Visible = false;
|
||||
this.dumpTreeView.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.DumpTreeView_NodeMouseClick);
|
||||
//
|
||||
// dumpTextBox
|
||||
//
|
||||
this.dumpTextBox.BackColor = System.Drawing.SystemColors.Window;
|
||||
@ -1313,64 +1341,64 @@
|
||||
this.toolStripStatusLabel1.Text = "Ready to go";
|
||||
this.toolStripStatusLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// contextMenuStrip2
|
||||
// sceneContextMenuStrip
|
||||
//
|
||||
this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.showRelatedAssetsToolStripMenuItem,
|
||||
this.toolStripSeparator7,
|
||||
this.selectAllToolStripMenuItem,
|
||||
this.clearSelectionToolStripMenuItem,
|
||||
this.toolStripSeparator5,
|
||||
this.expandAllToolStripMenuItem,
|
||||
this.collapseAllToolStripMenuItem});
|
||||
this.contextMenuStrip2.Name = "contextMenuStrip2";
|
||||
this.contextMenuStrip2.Size = new System.Drawing.Size(152, 126);
|
||||
this.contextMenuStrip2.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip2_Opening);
|
||||
this.sceneContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.shShowRelatedAssetsToolStripMenuItem,
|
||||
this.shToolStripSeparator1,
|
||||
this.shSelectAllToolStripMenuItem,
|
||||
this.shSlearSelectionToolStripMenuItem,
|
||||
this.shToolStripSeparator2,
|
||||
this.shExpandAllToolStripMenuItem,
|
||||
this.shCollapseAllToolStripMenuItem});
|
||||
this.sceneContextMenuStrip.Name = "contextMenuStrip2";
|
||||
this.sceneContextMenuStrip.Size = new System.Drawing.Size(152, 126);
|
||||
this.sceneContextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip2_Opening);
|
||||
//
|
||||
// showRelatedAssetsToolStripMenuItem
|
||||
// shShowRelatedAssetsToolStripMenuItem
|
||||
//
|
||||
this.showRelatedAssetsToolStripMenuItem.Name = "showRelatedAssetsToolStripMenuItem";
|
||||
this.showRelatedAssetsToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
|
||||
this.showRelatedAssetsToolStripMenuItem.Text = "Related assets";
|
||||
this.showRelatedAssetsToolStripMenuItem.Click += new System.EventHandler(this.showRelatedAssetsToolStripMenuItem_Click);
|
||||
this.shShowRelatedAssetsToolStripMenuItem.Name = "shShowRelatedAssetsToolStripMenuItem";
|
||||
this.shShowRelatedAssetsToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
|
||||
this.shShowRelatedAssetsToolStripMenuItem.Text = "Related assets";
|
||||
this.shShowRelatedAssetsToolStripMenuItem.Click += new System.EventHandler(this.showRelatedAssetsToolStripMenuItem_Click);
|
||||
//
|
||||
// toolStripSeparator7
|
||||
// shToolStripSeparator1
|
||||
//
|
||||
this.toolStripSeparator7.Name = "toolStripSeparator7";
|
||||
this.toolStripSeparator7.Size = new System.Drawing.Size(148, 6);
|
||||
this.shToolStripSeparator1.Name = "shToolStripSeparator1";
|
||||
this.shToolStripSeparator1.Size = new System.Drawing.Size(148, 6);
|
||||
//
|
||||
// selectAllToolStripMenuItem
|
||||
// shSelectAllToolStripMenuItem
|
||||
//
|
||||
this.selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem";
|
||||
this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
|
||||
this.selectAllToolStripMenuItem.Text = "Select all";
|
||||
this.selectAllToolStripMenuItem.Click += new System.EventHandler(this.selectAllToolStripMenuItem_Click);
|
||||
this.shSelectAllToolStripMenuItem.Name = "shSelectAllToolStripMenuItem";
|
||||
this.shSelectAllToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
|
||||
this.shSelectAllToolStripMenuItem.Text = "Select all";
|
||||
this.shSelectAllToolStripMenuItem.Click += new System.EventHandler(this.selectAllToolStripMenuItem_Click);
|
||||
//
|
||||
// clearSelectionToolStripMenuItem
|
||||
// shSlearSelectionToolStripMenuItem
|
||||
//
|
||||
this.clearSelectionToolStripMenuItem.Name = "clearSelectionToolStripMenuItem";
|
||||
this.clearSelectionToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
|
||||
this.clearSelectionToolStripMenuItem.Text = "Clear selection";
|
||||
this.clearSelectionToolStripMenuItem.Click += new System.EventHandler(this.clearSelectionToolStripMenuItem_Click);
|
||||
this.shSlearSelectionToolStripMenuItem.Name = "shSlearSelectionToolStripMenuItem";
|
||||
this.shSlearSelectionToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
|
||||
this.shSlearSelectionToolStripMenuItem.Text = "Clear selection";
|
||||
this.shSlearSelectionToolStripMenuItem.Click += new System.EventHandler(this.clearSelectionToolStripMenuItem_Click);
|
||||
//
|
||||
// toolStripSeparator5
|
||||
// shToolStripSeparator2
|
||||
//
|
||||
this.toolStripSeparator5.Name = "toolStripSeparator5";
|
||||
this.toolStripSeparator5.Size = new System.Drawing.Size(148, 6);
|
||||
this.shToolStripSeparator2.Name = "shToolStripSeparator2";
|
||||
this.shToolStripSeparator2.Size = new System.Drawing.Size(148, 6);
|
||||
//
|
||||
// expandAllToolStripMenuItem
|
||||
// shExpandAllToolStripMenuItem
|
||||
//
|
||||
this.expandAllToolStripMenuItem.Name = "expandAllToolStripMenuItem";
|
||||
this.expandAllToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
|
||||
this.expandAllToolStripMenuItem.Text = "Expand all";
|
||||
this.expandAllToolStripMenuItem.Click += new System.EventHandler(this.expandAllToolStripMenuItem_Click);
|
||||
this.shExpandAllToolStripMenuItem.Name = "shExpandAllToolStripMenuItem";
|
||||
this.shExpandAllToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
|
||||
this.shExpandAllToolStripMenuItem.Text = "Expand all";
|
||||
this.shExpandAllToolStripMenuItem.Click += new System.EventHandler(this.expandAllToolStripMenuItem_Click);
|
||||
//
|
||||
// collapseAllToolStripMenuItem
|
||||
// shCollapseAllToolStripMenuItem
|
||||
//
|
||||
this.collapseAllToolStripMenuItem.Name = "collapseAllToolStripMenuItem";
|
||||
this.collapseAllToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
|
||||
this.collapseAllToolStripMenuItem.Text = "Collapse all";
|
||||
this.collapseAllToolStripMenuItem.Click += new System.EventHandler(this.collapseAllToolStripMenuItem_Click);
|
||||
this.shCollapseAllToolStripMenuItem.Name = "shCollapseAllToolStripMenuItem";
|
||||
this.shCollapseAllToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
|
||||
this.shCollapseAllToolStripMenuItem.Text = "Collapse all";
|
||||
this.shCollapseAllToolStripMenuItem.Click += new System.EventHandler(this.collapseAllToolStripMenuItem_Click);
|
||||
//
|
||||
// timer
|
||||
//
|
||||
@ -1478,6 +1506,42 @@
|
||||
this.showOriginalFileToolStripMenuItem.Visible = false;
|
||||
this.showOriginalFileToolStripMenuItem.Click += new System.EventHandler(this.showOriginalFileToolStripMenuItem_Click);
|
||||
//
|
||||
// dumpTreeViewContextMenuStrip
|
||||
//
|
||||
this.dumpTreeViewContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.tvCopyToolStripMenuItem,
|
||||
this.tvToolStripSeparator1,
|
||||
this.tvExpandAllToolStripMenuItem,
|
||||
this.tvCollapseAllToolStripMenuItem});
|
||||
this.dumpTreeViewContextMenuStrip.Name = "contextMenuStrip3";
|
||||
this.dumpTreeViewContextMenuStrip.Size = new System.Drawing.Size(135, 76);
|
||||
//
|
||||
// tvCopyToolStripMenuItem
|
||||
//
|
||||
this.tvCopyToolStripMenuItem.Name = "tvCopyToolStripMenuItem";
|
||||
this.tvCopyToolStripMenuItem.Size = new System.Drawing.Size(134, 22);
|
||||
this.tvCopyToolStripMenuItem.Text = "Copy";
|
||||
this.tvCopyToolStripMenuItem.Click += new System.EventHandler(this.copyToolStripMenuItem1_Click);
|
||||
//
|
||||
// tvToolStripSeparator1
|
||||
//
|
||||
this.tvToolStripSeparator1.Name = "tvToolStripSeparator1";
|
||||
this.tvToolStripSeparator1.Size = new System.Drawing.Size(131, 6);
|
||||
//
|
||||
// tvExpandAllToolStripMenuItem
|
||||
//
|
||||
this.tvExpandAllToolStripMenuItem.Name = "tvExpandAllToolStripMenuItem";
|
||||
this.tvExpandAllToolStripMenuItem.Size = new System.Drawing.Size(134, 22);
|
||||
this.tvExpandAllToolStripMenuItem.Text = "Expand all";
|
||||
this.tvExpandAllToolStripMenuItem.Click += new System.EventHandler(this.expandAllToolStripMenuItem1_Click);
|
||||
//
|
||||
// tvCollapseAllToolStripMenuItem
|
||||
//
|
||||
this.tvCollapseAllToolStripMenuItem.Name = "tvCollapseAllToolStripMenuItem";
|
||||
this.tvCollapseAllToolStripMenuItem.Size = new System.Drawing.Size(134, 22);
|
||||
this.tvCollapseAllToolStripMenuItem.Text = "Collapse all";
|
||||
this.tvCollapseAllToolStripMenuItem.Click += new System.EventHandler(this.collapseAllToolStripMenuItem1_Click);
|
||||
//
|
||||
// AssetStudioGUIForm
|
||||
//
|
||||
this.AllowDrop = true;
|
||||
@ -1522,8 +1586,9 @@
|
||||
this.tabPage5.PerformLayout();
|
||||
this.statusStrip1.ResumeLayout(false);
|
||||
this.statusStrip1.PerformLayout();
|
||||
this.contextMenuStrip2.ResumeLayout(false);
|
||||
this.sceneContextMenuStrip.ResumeLayout(false);
|
||||
this.contextMenuStrip1.ResumeLayout(false);
|
||||
this.dumpTreeViewContextMenuStrip.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
@ -1626,20 +1691,20 @@
|
||||
private System.Windows.Forms.ToolStripTextBox specifyUnityVersion;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem15;
|
||||
private System.Windows.Forms.ToolStripMenuItem dumpSelectedAssetsToolStripMenuItem;
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuStrip2;
|
||||
private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem clearSelectionToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
|
||||
private System.Windows.Forms.ToolStripMenuItem collapseAllToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem expandAllToolStripMenuItem;
|
||||
private System.Windows.Forms.ContextMenuStrip sceneContextMenuStrip;
|
||||
private System.Windows.Forms.ToolStripMenuItem shSelectAllToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem shSlearSelectionToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripSeparator shToolStripSeparator2;
|
||||
private System.Windows.Forms.ToolStripMenuItem shCollapseAllToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem shExpandAllToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.ComboBox listSearchFilterMode;
|
||||
private System.Windows.Forms.ComboBox listSearchHistory;
|
||||
private System.Windows.Forms.RichTextBox listSearch;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator6;
|
||||
private System.Windows.Forms.ToolStripMenuItem showRelatedAssetsToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator7;
|
||||
private System.Windows.Forms.ToolStripMenuItem shShowRelatedAssetsToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripSeparator shToolStripSeparator1;
|
||||
private System.Windows.Forms.ListView assetListView;
|
||||
private System.Windows.Forms.ToolStripMenuItem showConsoleToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem writeLogToFileToolStripMenuItem;
|
||||
@ -1659,6 +1724,13 @@
|
||||
private System.Windows.Forms.ToolStripMenuItem customCompressionLZ4ToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem useAssetLoadingViaTypetreeToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripSeparator assetLoadingToolStripSeparator;
|
||||
private System.Windows.Forms.TreeView dumpTreeView;
|
||||
private System.Windows.Forms.ContextMenuStrip dumpTreeViewContextMenuStrip;
|
||||
private System.Windows.Forms.ToolStripMenuItem tvCopyToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripSeparator tvToolStripSeparator1;
|
||||
private System.Windows.Forms.ToolStripMenuItem tvExpandAllToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem tvCollapseAllToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem useDumpTreeViewToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem colorThemeToolStripMenu;
|
||||
private System.Windows.Forms.ToolStripMenuItem colorThemeAutoToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem colorThemeLightToolStripMenuItem;
|
||||
|
@ -34,6 +34,7 @@ namespace AssetStudioGUI
|
||||
partial class AssetStudioGUIForm : Form
|
||||
{
|
||||
private AssetItem lastSelectedItem;
|
||||
private AssetItem lastPreviewItem;
|
||||
private DirectBitmap imageTexture;
|
||||
private string tempClipboard;
|
||||
|
||||
@ -140,6 +141,7 @@ namespace AssetStudioGUI
|
||||
showConsoleToolStripMenuItem.Checked = Properties.Settings.Default.showConsole;
|
||||
buildTreeStructureToolStripMenuItem.Checked = Properties.Settings.Default.buildTreeStructure;
|
||||
useAssetLoadingViaTypetreeToolStripMenuItem.Checked = Properties.Settings.Default.useTypetreeLoading;
|
||||
useDumpTreeViewToolStripMenuItem.Checked = Properties.Settings.Default.useDumpTreeView;
|
||||
FMODinit();
|
||||
listSearchFilterMode.SelectedIndex = 0;
|
||||
|
||||
@ -776,7 +778,7 @@ namespace AssetStudioGUI
|
||||
var at = a.SubItems[sortColumn].Text.AsSpan();
|
||||
var bt = b.SubItems[sortColumn].Text.AsSpan();
|
||||
|
||||
return reverseSort ? MemoryExtensions.CompareTo(bt, at, StringComparison.OrdinalIgnoreCase) : MemoryExtensions.CompareTo(at, bt, StringComparison.OrdinalIgnoreCase);
|
||||
return reverseSort ? bt.CompareTo(at, StringComparison.OrdinalIgnoreCase) : at.CompareTo(bt, StringComparison.OrdinalIgnoreCase);
|
||||
});
|
||||
}
|
||||
assetListView.EndUpdate();
|
||||
@ -799,22 +801,44 @@ namespace AssetStudioGUI
|
||||
|
||||
lastSelectedItem = (AssetItem)e.Item;
|
||||
|
||||
if (e.IsSelected)
|
||||
if (!e.IsSelected)
|
||||
return;
|
||||
|
||||
switch (tabControl2.SelectedIndex)
|
||||
{
|
||||
if (tabControl2.SelectedIndex == 1)
|
||||
{
|
||||
dumpTextBox.Text = DumpAsset(lastSelectedItem.Asset);
|
||||
}
|
||||
if (enablePreview.Checked)
|
||||
{
|
||||
PreviewAsset(lastSelectedItem);
|
||||
if (displayInfo.Checked && lastSelectedItem.InfoText != null)
|
||||
case 0: //Preview
|
||||
if (enablePreview.Checked)
|
||||
{
|
||||
assetInfoLabel.Text = lastSelectedItem.InfoText;
|
||||
assetInfoLabel.Visible = true;
|
||||
PreviewAsset(lastSelectedItem);
|
||||
if (displayInfo.Checked && lastSelectedItem.InfoText != null)
|
||||
{
|
||||
assetInfoLabel.Text = lastSelectedItem.InfoText;
|
||||
assetInfoLabel.Visible = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1: //Dump
|
||||
DumpAsset(lastSelectedItem);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void DumpAsset(AssetItem assetItem)
|
||||
{
|
||||
if (assetItem == null)
|
||||
return;
|
||||
|
||||
if (useDumpTreeViewToolStripMenuItem.Checked)
|
||||
{
|
||||
using (var jsonDoc = DumpAssetToJsonDoc(assetItem.Asset))
|
||||
{
|
||||
dumpTreeView.LoadFromJson(jsonDoc, assetItem.Text);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
dumpTextBox.Text = Studio.DumpAsset(assetItem.Asset);
|
||||
}
|
||||
}
|
||||
|
||||
private void classesListView_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
|
||||
@ -830,6 +854,7 @@ namespace AssetStudioGUI
|
||||
if (e.IsSelected)
|
||||
{
|
||||
classTextBox.Text = ((TypeTreeItem)classesListView.SelectedItems[0]).ToString();
|
||||
lastSelectedItem = null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -844,6 +869,7 @@ namespace AssetStudioGUI
|
||||
|
||||
private void PreviewAsset(AssetItem assetItem)
|
||||
{
|
||||
lastPreviewItem = assetItem;
|
||||
if (assetItem == null)
|
||||
return;
|
||||
try
|
||||
@ -1527,9 +1553,22 @@ namespace AssetStudioGUI
|
||||
|
||||
private void tabControl2_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (tabControl2.SelectedIndex == 1 && lastSelectedItem != null)
|
||||
switch (tabControl2.SelectedIndex)
|
||||
{
|
||||
dumpTextBox.Text = DumpAsset(lastSelectedItem.Asset);
|
||||
case 0: //Preview
|
||||
if (lastPreviewItem != lastSelectedItem)
|
||||
{
|
||||
PreviewAsset(lastSelectedItem);
|
||||
if (displayInfo.Checked && lastSelectedItem?.InfoText != null)
|
||||
{
|
||||
assetInfoLabel.Text = lastSelectedItem.InfoText;
|
||||
assetInfoLabel.Visible = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1: //Dump
|
||||
DumpAsset(lastSelectedItem);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2047,7 +2086,7 @@ namespace AssetStudioGUI
|
||||
if (e.Button == MouseButtons.Right)
|
||||
{
|
||||
sceneTreeView.SelectedNode = e.Node;
|
||||
contextMenuStrip2.Show(sceneTreeView, e.Location.X, e.Location.Y);
|
||||
sceneContextMenuStrip.Show(sceneTreeView, e.Location.X, e.Location.Y);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2162,7 +2201,7 @@ namespace AssetStudioGUI
|
||||
{
|
||||
var selectedNode = sceneTreeView.SelectedNode;
|
||||
var relatedAssets = visibleAssets.FindAll(x => x.TreeNode == selectedNode);
|
||||
showRelatedAssetsToolStripMenuItem.DropDownItems.Clear();
|
||||
shShowRelatedAssetsToolStripMenuItem.DropDownItems.Clear();
|
||||
if (relatedAssets.Count > 1)
|
||||
{
|
||||
var assetItem = new ToolStripMenuItem
|
||||
@ -2173,7 +2212,7 @@ namespace AssetStudioGUI
|
||||
Text = "Select all"
|
||||
};
|
||||
assetItem.Click += selectAllRelatedAssets;
|
||||
showRelatedAssetsToolStripMenuItem.DropDownItems.Add(assetItem);
|
||||
shShowRelatedAssetsToolStripMenuItem.DropDownItems.Add(assetItem);
|
||||
}
|
||||
foreach (var asset in relatedAssets)
|
||||
{
|
||||
@ -2186,7 +2225,7 @@ namespace AssetStudioGUI
|
||||
Text = $"({asset.TypeString}) {asset.Text}"
|
||||
};
|
||||
assetItem.Click += selectRelatedAsset;
|
||||
showRelatedAssetsToolStripMenuItem.DropDownItems.Add(assetItem);
|
||||
shShowRelatedAssetsToolStripMenuItem.DropDownItems.Add(assetItem);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2462,6 +2501,55 @@ namespace AssetStudioGUI
|
||||
MessageBox.Show(msg, "Info", MessageBoxButtons.OK);
|
||||
}
|
||||
|
||||
private void DumpTreeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
|
||||
{
|
||||
if (e.Button == MouseButtons.Right)
|
||||
{
|
||||
dumpTreeView.SelectedNode = e.Node;
|
||||
tempClipboard = string.IsNullOrEmpty((string)e.Node.Tag)
|
||||
? e.Node.Text
|
||||
: $"{e.Node.Name}: {e.Node.Tag}";
|
||||
dumpTreeViewContextMenuStrip.Show(dumpTreeView, e.Location.X, e.Location.Y);
|
||||
}
|
||||
}
|
||||
|
||||
private void copyToolStripMenuItem1_Click(object sender, EventArgs e)
|
||||
{
|
||||
Clipboard.SetDataObject(tempClipboard);
|
||||
}
|
||||
|
||||
private void expandAllToolStripMenuItem1_Click(object sender, EventArgs e)
|
||||
{
|
||||
dumpTreeView.BeginUpdate();
|
||||
foreach (TreeNode node in dumpTreeView.Nodes)
|
||||
{
|
||||
node.ExpandAll();
|
||||
}
|
||||
dumpTreeView.EndUpdate();
|
||||
}
|
||||
|
||||
private void collapseAllToolStripMenuItem1_Click(object sender, EventArgs e)
|
||||
{
|
||||
dumpTreeView.BeginUpdate();
|
||||
foreach (TreeNode node in dumpTreeView.Nodes)
|
||||
{
|
||||
node.Collapse(ignoreChildren: false);
|
||||
}
|
||||
dumpTreeView.EndUpdate();
|
||||
}
|
||||
|
||||
private void useDumpTreeViewToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
var isTreeViewEnabled = useDumpTreeViewToolStripMenuItem.Checked;
|
||||
dumpTreeView.Visible = isTreeViewEnabled;
|
||||
Properties.Settings.Default.useDumpTreeView = isTreeViewEnabled;
|
||||
Properties.Settings.Default.Save();
|
||||
if (tabControl2.SelectedIndex == 1)
|
||||
{
|
||||
DumpAsset(lastSelectedItem);
|
||||
}
|
||||
}
|
||||
|
||||
#region FMOD
|
||||
private void FMODinit()
|
||||
{
|
||||
|
@ -141,7 +141,7 @@ The quick brown fox jumps over the lazy dog. 1234567890</value>
|
||||
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>432, 17</value>
|
||||
</metadata>
|
||||
<metadata name="contextMenuStrip2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<metadata name="sceneContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>775, 21</value>
|
||||
</metadata>
|
||||
<metadata name="timer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
@ -153,7 +153,7 @@ The quick brown fox jumps over the lazy dog. 1234567890</value>
|
||||
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>147, 17</value>
|
||||
</metadata>
|
||||
<metadata name="contextMenuStrip3.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<metadata name="dumpTreeViewContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>930, 21</value>
|
||||
</metadata>
|
||||
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
|
105
AssetStudioGUI/Components/JsonTreeView.cs
Normal file
105
AssetStudioGUI/Components/JsonTreeView.cs
Normal file
@ -0,0 +1,105 @@
|
||||
using System.Text.Json;
|
||||
using System.Windows.Forms;
|
||||
using AssetStudio;
|
||||
|
||||
namespace AssetStudioGUI
|
||||
{
|
||||
public static class JsonTreeView
|
||||
{
|
||||
public static void LoadFromJson(this TreeView treeView, JsonDocument jsonDoc, string rootName)
|
||||
{
|
||||
if (jsonDoc == null)
|
||||
{
|
||||
Logger.Info("Unable to build tree view of current object");
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
treeView.BeginUpdate();
|
||||
treeView.Nodes.Clear();
|
||||
var rootNode = treeView.Nodes[treeView.Nodes.Add(new TreeNode(rootName))];
|
||||
|
||||
foreach (var property in jsonDoc.RootElement.EnumerateObject())
|
||||
{
|
||||
var childNode = rootNode.Nodes[rootNode.Nodes.Add(new TreeNode(property.Name))];
|
||||
AddNodes(property.Value, childNode);
|
||||
}
|
||||
|
||||
rootNode.Expand();
|
||||
rootNode.EnsureVisible();
|
||||
}
|
||||
finally
|
||||
{
|
||||
treeView.EndUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
private static void AddNodes(JsonElement jsonElement, TreeNode treeNode)
|
||||
{
|
||||
switch (jsonElement.ValueKind)
|
||||
{
|
||||
case JsonValueKind.Object:
|
||||
foreach (var property in jsonElement.EnumerateObject())
|
||||
{
|
||||
var childNode = treeNode.Nodes[treeNode.Nodes.Add(new TreeNode(property.Name))];
|
||||
AddNodes(property.Value, childNode);
|
||||
}
|
||||
break;
|
||||
case JsonValueKind.Array:
|
||||
const int arrayLenLimit = 500;
|
||||
var arrayLen = jsonElement.GetArrayLength();
|
||||
if (arrayLen == 0)
|
||||
{
|
||||
SetValue(jsonElement, treeNode);
|
||||
}
|
||||
else
|
||||
{
|
||||
var i = 0;
|
||||
foreach (var jsonArrayElem in jsonElement.EnumerateArray())
|
||||
{
|
||||
if (jsonArrayElem.ValueKind == JsonValueKind.Number) //number array
|
||||
{
|
||||
SetValue(jsonElement, treeNode);
|
||||
break;
|
||||
}
|
||||
|
||||
if (i > arrayLenLimit)
|
||||
{
|
||||
treeNode.Nodes.Add(new TreeNode($"[{i++}-{arrayLen - 1}] Skipped. Too many elements to display"));
|
||||
break;
|
||||
}
|
||||
|
||||
var childNode = treeNode.Nodes[treeNode.Nodes.Add(new TreeNode($"[{i++}]"))];
|
||||
AddNodes(jsonArrayElem, childNode);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
SetValue(jsonElement, treeNode);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static void SetValue(JsonElement jsonElem, TreeNode node)
|
||||
{
|
||||
const int maxStrLen = 128;
|
||||
var endStr = "...";
|
||||
var strValue = jsonElem.ToString();
|
||||
if (jsonElem.ValueKind == JsonValueKind.Array)
|
||||
{
|
||||
strValue = strValue.Replace("\r", "").Replace("\n", "").Replace(" ", "").Replace(",", ", ");
|
||||
endStr += "]";
|
||||
}
|
||||
if (jsonElem.ValueKind == JsonValueKind.Null)
|
||||
{
|
||||
strValue = jsonElem.GetRawText();
|
||||
}
|
||||
node.Name = node.Text;
|
||||
node.Text += strValue?.Length > maxStrLen
|
||||
? $": {strValue.Substring(0, maxStrLen)}{endStr}"
|
||||
: $": {strValue}";
|
||||
node.Tag = strValue;
|
||||
}
|
||||
}
|
||||
}
|
12
AssetStudioGUI/Properties/Settings.Designer.cs
generated
12
AssetStudioGUI/Properties/Settings.Designer.cs
generated
@ -430,5 +430,17 @@ namespace AssetStudioGUI.Properties {
|
||||
this["l2dAssetSearchByFilename"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool useDumpTreeView {
|
||||
get {
|
||||
return ((bool)(this["useDumpTreeView"]));
|
||||
}
|
||||
set {
|
||||
this["useDumpTreeView"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -104,5 +104,8 @@
|
||||
<Setting Name="l2dAssetSearchByFilename" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="useDumpTreeView" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
@ -8,6 +8,7 @@ using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
@ -304,12 +305,15 @@ namespace AssetStudioGUI
|
||||
{
|
||||
preloadTable = m_AssetBundle.m_PreloadTable;
|
||||
}
|
||||
assetItem.Text = string.IsNullOrEmpty(m_AssetBundle.m_AssetBundleName) ? m_AssetBundle.m_Name : m_AssetBundle.m_AssetBundleName;
|
||||
|
||||
assetItem.Text = string.IsNullOrEmpty(m_AssetBundle.m_AssetBundleName)
|
||||
? m_AssetBundle.m_Name
|
||||
: m_AssetBundle.m_AssetBundleName;
|
||||
foreach (var m_Container in m_AssetBundle.m_Container)
|
||||
{
|
||||
var preloadIndex = m_Container.Value.preloadIndex;
|
||||
var preloadSize = isStreamedSceneAssetBundle ? preloadTable.Length : m_Container.Value.preloadSize;
|
||||
var preloadSize = isStreamedSceneAssetBundle
|
||||
? preloadTable.Length
|
||||
: m_Container.Value.preloadSize;
|
||||
var preloadEnd = preloadIndex + preloadSize;
|
||||
for (var k = preloadIndex; k < preloadEnd; k++)
|
||||
{
|
||||
@ -689,7 +693,9 @@ namespace AssetStudioGUI
|
||||
Logger.Error(ex.Value);
|
||||
}
|
||||
|
||||
var statusText = exportedCount == 0 ? "Nothing exported." : $"Finished {mode.ToLower()}ing [{exportedCount}/{toExportCount}] assets.";
|
||||
var statusText = exportedCount == 0
|
||||
? "Nothing exported."
|
||||
: $"Finished {mode.ToLower()}ing [{exportedCount}/{toExportCount}] assets.";
|
||||
if (toExportCount > exportedCount)
|
||||
{
|
||||
statusText += exceptionMsgs.IsEmpty
|
||||
@ -779,7 +785,7 @@ namespace AssetStudioGUI
|
||||
//每个文件存放在单独的文件夹
|
||||
var targetPath = $"{savePath}{filename}{Path.DirectorySeparatorChar}";
|
||||
//重名文件处理
|
||||
for (int i = 1; ; i++)
|
||||
for (int i = 1;; i++)
|
||||
{
|
||||
if (Directory.Exists(targetPath))
|
||||
{
|
||||
@ -965,6 +971,19 @@ namespace AssetStudioGUI
|
||||
return str;
|
||||
}
|
||||
|
||||
public static JsonDocument DumpAssetToJsonDoc(Object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
return null;
|
||||
|
||||
if (obj is MonoBehaviour m_MonoBehaviour)
|
||||
{
|
||||
var type = obj.serializedType?.m_Type ?? MonoBehaviourToTypeTree(m_MonoBehaviour);
|
||||
return m_MonoBehaviour.ToJsonDoc(type);
|
||||
}
|
||||
return obj.ToJsonDoc();
|
||||
}
|
||||
|
||||
public static void OpenFolderInExplorer(string path)
|
||||
{
|
||||
if (!path.EndsWith($"{Path.DirectorySeparatorChar}"))
|
||||
|
Loading…
Reference in New Issue
Block a user