From 1a0217b6f15550c8c76c61e6c2a0b660d7bbb33c Mon Sep 17 00:00:00 2001 From: VaDiM Date: Sat, 3 Jan 2026 18:00:43 +0300 Subject: [PATCH] [GUI] Some improvements for TypeTreeHelper and dump tree view --- AssetStudio/TypeTreeHelper.cs | 41 +++++++++++++++---- AssetStudioGUI/AssetStudioGUIForm.Designer.cs | 35 ++++++++++------ AssetStudioGUI/AssetStudioGUIForm.cs | 19 ++++++--- AssetStudioGUI/Components/JsonTreeView.cs | 4 +- 4 files changed, 72 insertions(+), 27 deletions(-) diff --git a/AssetStudio/TypeTreeHelper.cs b/AssetStudio/TypeTreeHelper.cs index c71c661..91f4839 100644 --- a/AssetStudio/TypeTreeHelper.cs +++ b/AssetStudio/TypeTreeHelper.cs @@ -321,17 +321,42 @@ namespace AssetStudio { if ((m_Nodes[i + 1].m_MetaFlag & 0x4000) != 0) align = true; + var arrayTypeStr = m_Nodes.Count > i + 3 + ? m_Nodes[i + 3].m_Type + : ""; var vector = GetNodes(m_Nodes, i); i += vector.Count - 1; - var size = reader.ReadInt32(); - var array = new object[size]; - for (int j = 0; j < size; j++) + switch (arrayTypeStr) { - int tmp = 3; - array[j] = ReadValue(vector, reader, ref tmp); + case "UInt8": + value = reader.ReadUInt8Array(); + break; + case "UInt16": + case "unsigned short": + value = reader.ReadUInt16Array(); + break; + case "UInt32": + case "unsigned int": + value = reader.ReadUInt32Array(); + break; + case "int": + case "SInt32": + value = reader.ReadInt32Array(); + break; + case "float": + value = reader.ReadSingleArray(); + break; + default: + var size = reader.ReadInt32(); + var array = new object[size]; + for (int j = 0; j < size; j++) + { + int tmp = 3; + array[j] = ReadValue(vector, reader, ref tmp); + } + value = array; + break; } - value = array; - break; } else //Class { @@ -345,8 +370,8 @@ namespace AssetStudio obj[name] = ReadValue(@class, reader, ref j); } value = obj; - break; } + break; } } if (align) diff --git a/AssetStudioGUI/AssetStudioGUIForm.Designer.cs b/AssetStudioGUI/AssetStudioGUIForm.Designer.cs index 1e48ae3..1a70155 100644 --- a/AssetStudioGUI/AssetStudioGUIForm.Designer.cs +++ b/AssetStudioGUI/AssetStudioGUIForm.Designer.cs @@ -176,7 +176,8 @@ 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.tvCopyNameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tvCopyValToolStripMenuItem = 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(); @@ -1440,6 +1441,7 @@ this.dumpTreeView.Dock = System.Windows.Forms.DockStyle.Fill; this.dumpTreeView.Location = new System.Drawing.Point(0, 0); this.dumpTreeView.Name = "dumpTreeView"; + this.dumpTreeView.PathSeparator = "/"; this.dumpTreeView.Size = new System.Drawing.Size(768, 607); this.dumpTreeView.TabIndex = 1; this.dumpTreeView.Visible = false; @@ -1647,36 +1649,44 @@ // dumpTreeViewContextMenuStrip // this.dumpTreeViewContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.tvCopyToolStripMenuItem, + this.tvCopyNameToolStripMenuItem, + this.tvCopyValToolStripMenuItem, this.tvToolStripSeparator1, this.tvExpandAllToolStripMenuItem, this.tvCollapseAllToolStripMenuItem}); this.dumpTreeViewContextMenuStrip.Name = "contextMenuStrip3"; - this.dumpTreeViewContextMenuStrip.Size = new System.Drawing.Size(135, 76); + this.dumpTreeViewContextMenuStrip.Size = new System.Drawing.Size(136, 98); // - // tvCopyToolStripMenuItem + // tvCopyNameToolStripMenuItem // - 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); + this.tvCopyNameToolStripMenuItem.Name = "tvCopyNameToolStripMenuItem"; + this.tvCopyNameToolStripMenuItem.Size = new System.Drawing.Size(135, 22); + this.tvCopyNameToolStripMenuItem.Text = "Copy name"; + this.tvCopyNameToolStripMenuItem.Click += new System.EventHandler(this.tvCopyNameToolStripMenuItem_Click); + // + // tvCopyValToolStripMenuItem + // + this.tvCopyValToolStripMenuItem.Name = "tvCopyValToolStripMenuItem"; + this.tvCopyValToolStripMenuItem.Size = new System.Drawing.Size(135, 22); + this.tvCopyValToolStripMenuItem.Text = "Copy value"; + this.tvCopyValToolStripMenuItem.Click += new System.EventHandler(this.tvCopyValToolStripMenuItem_Click); // // tvToolStripSeparator1 // this.tvToolStripSeparator1.Name = "tvToolStripSeparator1"; - this.tvToolStripSeparator1.Size = new System.Drawing.Size(131, 6); + this.tvToolStripSeparator1.Size = new System.Drawing.Size(132, 6); // // tvExpandAllToolStripMenuItem // this.tvExpandAllToolStripMenuItem.Name = "tvExpandAllToolStripMenuItem"; - this.tvExpandAllToolStripMenuItem.Size = new System.Drawing.Size(134, 22); + this.tvExpandAllToolStripMenuItem.Size = new System.Drawing.Size(135, 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.Size = new System.Drawing.Size(135, 22); this.tvCollapseAllToolStripMenuItem.Text = "Collapse all"; this.tvCollapseAllToolStripMenuItem.Click += new System.EventHandler(this.collapseAllToolStripMenuItem1_Click); // @@ -1860,7 +1870,7 @@ 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.ToolStripMenuItem tvCopyValToolStripMenuItem; private System.Windows.Forms.ToolStripSeparator tvToolStripSeparator1; private System.Windows.Forms.ToolStripMenuItem tvExpandAllToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem tvCollapseAllToolStripMenuItem; @@ -1885,6 +1895,7 @@ private System.Windows.Forms.ToolStripSeparator importOptionsToolStripSeparator; private System.Windows.Forms.ToolStripMenuItem meshLazyLoadToolStripMenuItem; private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.ToolStripMenuItem tvCopyNameToolStripMenuItem; } } diff --git a/AssetStudioGUI/AssetStudioGUIForm.cs b/AssetStudioGUI/AssetStudioGUIForm.cs index b52ece9..4da3682 100644 --- a/AssetStudioGUI/AssetStudioGUIForm.cs +++ b/AssetStudioGUI/AssetStudioGUIForm.cs @@ -2642,16 +2642,25 @@ namespace AssetStudioGUI 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}"; + tvCopyValToolStripMenuItem.Visible = !string.IsNullOrEmpty((string)e.Node.Tag); dumpTreeViewContextMenuStrip.Show(dumpTreeView, e.Location.X, e.Location.Y); } } - private void copyToolStripMenuItem1_Click(object sender, EventArgs e) + private void tvCopyNameToolStripMenuItem_Click(object sender, EventArgs e) { - Clipboard.SetDataObject(tempClipboard); + var name = dumpTreeView.SelectedNode.Name; + if (string.IsNullOrEmpty(name)) + name = dumpTreeView.SelectedNode.Text; + + Clipboard.SetDataObject(name); + } + + private void tvCopyValToolStripMenuItem_Click(object sender, EventArgs e) + { + var val = (string)dumpTreeView.SelectedNode.Tag ?? ""; + + Clipboard.SetDataObject(val); } private void expandAllToolStripMenuItem1_Click(object sender, EventArgs e) diff --git a/AssetStudioGUI/Components/JsonTreeView.cs b/AssetStudioGUI/Components/JsonTreeView.cs index c2c2b42..ed24400 100644 --- a/AssetStudioGUI/Components/JsonTreeView.cs +++ b/AssetStudioGUI/Components/JsonTreeView.cs @@ -1,6 +1,6 @@ -using System.Text.Json; +using AssetStudio; +using System.Text.Json; using System.Windows.Forms; -using AssetStudio; namespace AssetStudioGUI {