delete some useless features
This commit is contained in:
parent
9e195832ef
commit
d717b223b7
|
@ -67,10 +67,6 @@
|
||||||
this.filterTypeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.filterTypeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.allToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.allToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.debugMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.debugMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.buildClassStructuresMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.dontBuildAssetListMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.dontBuildHierarchyMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
|
||||||
this.exportClassStructuresMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.exportClassStructuresMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
|
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
|
||||||
this.tabControl1 = new System.Windows.Forms.TabControl();
|
this.tabControl1 = new System.Windows.Forms.TabControl();
|
||||||
|
@ -87,8 +83,8 @@
|
||||||
this.listSearch = new System.Windows.Forms.TextBox();
|
this.listSearch = new System.Windows.Forms.TextBox();
|
||||||
this.tabPage3 = new System.Windows.Forms.TabPage();
|
this.tabPage3 = new System.Windows.Forms.TabPage();
|
||||||
this.classesListView = new System.Windows.Forms.ListView();
|
this.classesListView = new System.Windows.Forms.ListView();
|
||||||
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
|
||||||
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
this.progressbarPanel = new System.Windows.Forms.Panel();
|
this.progressbarPanel = new System.Windows.Forms.Panel();
|
||||||
this.progressBar1 = new System.Windows.Forms.ProgressBar();
|
this.progressBar1 = new System.Windows.Forms.ProgressBar();
|
||||||
this.previewPanel = new System.Windows.Forms.Panel();
|
this.previewPanel = new System.Windows.Forms.Panel();
|
||||||
|
@ -117,7 +113,7 @@
|
||||||
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
|
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||||
this.exportSelectedAssetsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.exportSelectedAssetsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.exportAnimatorwithselectedAnimationClipMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.exportAnimatorwithselectedAnimationClipMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.jumpToSceneHierarchyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.goToSceneHierarchyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.showOriginalFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.showOriginalFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuStrip1.SuspendLayout();
|
this.menuStrip1.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
|
||||||
|
@ -439,46 +435,15 @@
|
||||||
// debugMenuItem
|
// debugMenuItem
|
||||||
//
|
//
|
||||||
this.debugMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.debugMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
this.buildClassStructuresMenuItem,
|
|
||||||
this.dontBuildAssetListMenuItem,
|
|
||||||
this.dontBuildHierarchyMenuItem,
|
|
||||||
this.toolStripSeparator2,
|
|
||||||
this.exportClassStructuresMenuItem});
|
this.exportClassStructuresMenuItem});
|
||||||
this.debugMenuItem.Name = "debugMenuItem";
|
this.debugMenuItem.Name = "debugMenuItem";
|
||||||
this.debugMenuItem.Size = new System.Drawing.Size(59, 21);
|
this.debugMenuItem.Size = new System.Drawing.Size(59, 21);
|
||||||
this.debugMenuItem.Text = "Debug";
|
this.debugMenuItem.Text = "Debug";
|
||||||
//
|
//
|
||||||
// buildClassStructuresMenuItem
|
|
||||||
//
|
|
||||||
this.buildClassStructuresMenuItem.CheckOnClick = true;
|
|
||||||
this.buildClassStructuresMenuItem.Name = "buildClassStructuresMenuItem";
|
|
||||||
this.buildClassStructuresMenuItem.Size = new System.Drawing.Size(224, 22);
|
|
||||||
this.buildClassStructuresMenuItem.Text = "Build class structures";
|
|
||||||
//
|
|
||||||
// dontBuildAssetListMenuItem
|
|
||||||
//
|
|
||||||
this.dontBuildAssetListMenuItem.CheckOnClick = true;
|
|
||||||
this.dontBuildAssetListMenuItem.Name = "dontBuildAssetListMenuItem";
|
|
||||||
this.dontBuildAssetListMenuItem.Size = new System.Drawing.Size(224, 22);
|
|
||||||
this.dontBuildAssetListMenuItem.Text = "Don\'t build asset list";
|
|
||||||
this.dontBuildAssetListMenuItem.CheckedChanged += new System.EventHandler(this.dontBuildAssetListMenuItem_CheckedChanged);
|
|
||||||
//
|
|
||||||
// dontBuildHierarchyMenuItem
|
|
||||||
//
|
|
||||||
this.dontBuildHierarchyMenuItem.CheckOnClick = true;
|
|
||||||
this.dontBuildHierarchyMenuItem.Name = "dontBuildHierarchyMenuItem";
|
|
||||||
this.dontBuildHierarchyMenuItem.Size = new System.Drawing.Size(224, 22);
|
|
||||||
this.dontBuildHierarchyMenuItem.Text = "Don\'t build hierarchy tree";
|
|
||||||
//
|
|
||||||
// toolStripSeparator2
|
|
||||||
//
|
|
||||||
this.toolStripSeparator2.Name = "toolStripSeparator2";
|
|
||||||
this.toolStripSeparator2.Size = new System.Drawing.Size(221, 6);
|
|
||||||
//
|
|
||||||
// exportClassStructuresMenuItem
|
// exportClassStructuresMenuItem
|
||||||
//
|
//
|
||||||
this.exportClassStructuresMenuItem.Name = "exportClassStructuresMenuItem";
|
this.exportClassStructuresMenuItem.Name = "exportClassStructuresMenuItem";
|
||||||
this.exportClassStructuresMenuItem.Size = new System.Drawing.Size(224, 22);
|
this.exportClassStructuresMenuItem.Size = new System.Drawing.Size(207, 22);
|
||||||
this.exportClassStructuresMenuItem.Text = "Export class structures";
|
this.exportClassStructuresMenuItem.Text = "Export class structures";
|
||||||
this.exportClassStructuresMenuItem.Click += new System.EventHandler(this.exportClassStructuresMenuItem_Click);
|
this.exportClassStructuresMenuItem.Click += new System.EventHandler(this.exportClassStructuresMenuItem_Click);
|
||||||
//
|
//
|
||||||
|
@ -657,16 +622,15 @@
|
||||||
this.classesListView.View = System.Windows.Forms.View.Details;
|
this.classesListView.View = System.Windows.Forms.View.Details;
|
||||||
this.classesListView.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.classesListView_ItemSelectionChanged);
|
this.classesListView.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.classesListView_ItemSelectionChanged);
|
||||||
//
|
//
|
||||||
// columnHeader1
|
|
||||||
//
|
|
||||||
this.columnHeader1.DisplayIndex = 1;
|
|
||||||
this.columnHeader1.Text = "Name";
|
|
||||||
this.columnHeader1.Width = 328;
|
|
||||||
//
|
|
||||||
// columnHeader2
|
// columnHeader2
|
||||||
//
|
//
|
||||||
this.columnHeader2.DisplayIndex = 0;
|
this.columnHeader2.Text = "Name";
|
||||||
this.columnHeader2.Text = "ID";
|
this.columnHeader2.Width = 300;
|
||||||
|
//
|
||||||
|
// columnHeader1
|
||||||
|
//
|
||||||
|
this.columnHeader1.Text = "ID";
|
||||||
|
this.columnHeader1.Width = 70;
|
||||||
//
|
//
|
||||||
// progressbarPanel
|
// progressbarPanel
|
||||||
//
|
//
|
||||||
|
@ -946,7 +910,7 @@
|
||||||
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
this.exportSelectedAssetsToolStripMenuItem,
|
this.exportSelectedAssetsToolStripMenuItem,
|
||||||
this.exportAnimatorwithselectedAnimationClipMenuItem,
|
this.exportAnimatorwithselectedAnimationClipMenuItem,
|
||||||
this.jumpToSceneHierarchyToolStripMenuItem,
|
this.goToSceneHierarchyToolStripMenuItem,
|
||||||
this.showOriginalFileToolStripMenuItem});
|
this.showOriginalFileToolStripMenuItem});
|
||||||
this.contextMenuStrip1.Name = "contextMenuStrip1";
|
this.contextMenuStrip1.Name = "contextMenuStrip1";
|
||||||
this.contextMenuStrip1.Size = new System.Drawing.Size(327, 92);
|
this.contextMenuStrip1.Size = new System.Drawing.Size(327, 92);
|
||||||
|
@ -966,13 +930,13 @@
|
||||||
this.exportAnimatorwithselectedAnimationClipMenuItem.Visible = false;
|
this.exportAnimatorwithselectedAnimationClipMenuItem.Visible = false;
|
||||||
this.exportAnimatorwithselectedAnimationClipMenuItem.Click += new System.EventHandler(this.exportAnimatorwithAnimationClipMenuItem_Click);
|
this.exportAnimatorwithselectedAnimationClipMenuItem.Click += new System.EventHandler(this.exportAnimatorwithAnimationClipMenuItem_Click);
|
||||||
//
|
//
|
||||||
// jumpToSceneHierarchyToolStripMenuItem
|
// goToSceneHierarchyToolStripMenuItem
|
||||||
//
|
//
|
||||||
this.jumpToSceneHierarchyToolStripMenuItem.Name = "jumpToSceneHierarchyToolStripMenuItem";
|
this.goToSceneHierarchyToolStripMenuItem.Name = "goToSceneHierarchyToolStripMenuItem";
|
||||||
this.jumpToSceneHierarchyToolStripMenuItem.Size = new System.Drawing.Size(326, 22);
|
this.goToSceneHierarchyToolStripMenuItem.Size = new System.Drawing.Size(326, 22);
|
||||||
this.jumpToSceneHierarchyToolStripMenuItem.Text = "Jump to scene hierarchy";
|
this.goToSceneHierarchyToolStripMenuItem.Text = "Go to scene hierarchy";
|
||||||
this.jumpToSceneHierarchyToolStripMenuItem.Visible = false;
|
this.goToSceneHierarchyToolStripMenuItem.Visible = false;
|
||||||
this.jumpToSceneHierarchyToolStripMenuItem.Click += new System.EventHandler(this.jumpToSceneHierarchyToolStripMenuItem_Click);
|
this.goToSceneHierarchyToolStripMenuItem.Click += new System.EventHandler(this.goToSceneHierarchyToolStripMenuItem_Click);
|
||||||
//
|
//
|
||||||
// showOriginalFileToolStripMenuItem
|
// showOriginalFileToolStripMenuItem
|
||||||
//
|
//
|
||||||
|
@ -1079,16 +1043,12 @@
|
||||||
private System.Windows.Forms.ToolStripMenuItem showExpOpt;
|
private System.Windows.Forms.ToolStripMenuItem showExpOpt;
|
||||||
private GOHierarchy sceneTreeView;
|
private GOHierarchy sceneTreeView;
|
||||||
private System.Windows.Forms.ToolStripMenuItem debugMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem debugMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem buildClassStructuresMenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem dontBuildAssetListMenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem dontBuildHierarchyMenuItem;
|
|
||||||
private System.Windows.Forms.TabPage tabPage3;
|
private System.Windows.Forms.TabPage tabPage3;
|
||||||
private System.Windows.Forms.ListView classesListView;
|
private System.Windows.Forms.ListView classesListView;
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader2;
|
private System.Windows.Forms.ColumnHeader columnHeader2;
|
||||||
|
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||||
private System.Windows.Forms.Panel classPreviewPanel;
|
private System.Windows.Forms.Panel classPreviewPanel;
|
||||||
private System.Windows.Forms.TextBox classTextBox;
|
private System.Windows.Forms.TextBox classTextBox;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem exportClassStructuresMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem exportClassStructuresMenuItem;
|
||||||
private System.Windows.Forms.Label FMODcopyright;
|
private System.Windows.Forms.Label FMODcopyright;
|
||||||
private OpenTK.GLControl glControl1;
|
private OpenTK.GLControl glControl1;
|
||||||
|
@ -1103,7 +1063,7 @@
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
|
||||||
private System.Windows.Forms.ToolStripMenuItem exportAnimatorWithSelectedAnimationClipToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem exportAnimatorWithSelectedAnimationClipToolStripMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem exportAllObjectssplitToolStripMenuItem1;
|
private System.Windows.Forms.ToolStripMenuItem exportAllObjectssplitToolStripMenuItem1;
|
||||||
private System.Windows.Forms.ToolStripMenuItem jumpToSceneHierarchyToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem goToSceneHierarchyToolStripMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem exportSelectedObjectsmergeToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem exportSelectedObjectsmergeToolStripMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem exportSelectedObjectsmergeWithAnimationClipToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem exportSelectedObjectsmergeWithAnimationClipToolStripMenuItem;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||||
|
|
|
@ -28,6 +28,7 @@ namespace AssetStudioGUI
|
||||||
{
|
{
|
||||||
private AssetItem lastSelectedItem;
|
private AssetItem lastSelectedItem;
|
||||||
private AssetItem lastLoadedAsset;
|
private AssetItem lastLoadedAsset;
|
||||||
|
private Bitmap imageTexture;
|
||||||
|
|
||||||
private FMOD.System system;
|
private FMOD.System system;
|
||||||
private FMOD.Sound sound;
|
private FMOD.Sound sound;
|
||||||
|
@ -37,8 +38,6 @@ namespace AssetStudioGUI
|
||||||
private uint FMODlenms;
|
private uint FMODlenms;
|
||||||
private float FMODVolume = 0.8f;
|
private float FMODVolume = 0.8f;
|
||||||
|
|
||||||
private Bitmap imageTexture;
|
|
||||||
|
|
||||||
#region TexControl
|
#region TexControl
|
||||||
private static char[] textureChannelNames = new char[4] { 'R', 'G', 'B', 'A' };
|
private static char[] textureChannelNames = new char[4] { 'R', 'G', 'B', 'A' };
|
||||||
private bool[] textureChannels = new bool[4] { true, true, true, true };
|
private bool[] textureChannels = new bool[4] { true, true, true, true };
|
||||||
|
@ -146,25 +145,10 @@ namespace AssetStudioGUI
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var productName = string.Empty;
|
var data = BuildAssetData();
|
||||||
var tempDic = new Dictionary<Object, AssetItem>();
|
var productName = data.Item1;
|
||||||
if (!dontBuildAssetListMenuItem.Checked)
|
var treeNodeCollection = data.Item2;
|
||||||
{
|
var typeMap = BuildClassStructure();
|
||||||
BuildAssetList(tempDic, out productName);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<TreeNode> treeNodeCollection = null;
|
|
||||||
if (!dontBuildHierarchyMenuItem.Checked)
|
|
||||||
{
|
|
||||||
treeNodeCollection = BuildTreeStructure(tempDic);
|
|
||||||
}
|
|
||||||
tempDic.Clear();
|
|
||||||
|
|
||||||
Dictionary<string, SortedDictionary<int, TypeTreeItem>> typeMap = null;
|
|
||||||
if (buildClassStructuresMenuItem.Checked)
|
|
||||||
{
|
|
||||||
typeMap = BuildClassStructure();
|
|
||||||
}
|
|
||||||
|
|
||||||
BeginInvoke(new Action(() =>
|
BeginInvoke(new Action(() =>
|
||||||
{
|
{
|
||||||
|
@ -176,38 +160,32 @@ namespace AssetStudioGUI
|
||||||
{
|
{
|
||||||
Text = $"AssetStudioGUI - no productName - {assetsManager.assetsFileList[0].unityVersion} - {assetsManager.assetsFileList[0].m_TargetPlatform}";
|
Text = $"AssetStudioGUI - no productName - {assetsManager.assetsFileList[0].unityVersion} - {assetsManager.assetsFileList[0].m_TargetPlatform}";
|
||||||
}
|
}
|
||||||
if (!dontBuildAssetListMenuItem.Checked)
|
|
||||||
{
|
|
||||||
assetListView.VirtualListSize = visibleAssets.Count;
|
|
||||||
}
|
|
||||||
if (!dontBuildHierarchyMenuItem.Checked)
|
|
||||||
{
|
|
||||||
sceneTreeView.BeginUpdate();
|
|
||||||
sceneTreeView.Nodes.AddRange(treeNodeCollection.ToArray());
|
|
||||||
treeNodeCollection.Clear();
|
|
||||||
foreach (TreeNode node in sceneTreeView.Nodes)
|
|
||||||
{
|
|
||||||
node.HideCheckBox();
|
|
||||||
}
|
|
||||||
sceneTreeView.EndUpdate();
|
|
||||||
}
|
|
||||||
if (buildClassStructuresMenuItem.Checked)
|
|
||||||
{
|
|
||||||
classesListView.BeginUpdate();
|
|
||||||
foreach (var version in typeMap)
|
|
||||||
{
|
|
||||||
var versionGroup = new ListViewGroup(version.Key);
|
|
||||||
classesListView.Groups.Add(versionGroup);
|
|
||||||
|
|
||||||
foreach (var uclass in version.Value)
|
assetListView.VirtualListSize = visibleAssets.Count;
|
||||||
{
|
|
||||||
uclass.Value.Group = versionGroup;
|
sceneTreeView.BeginUpdate();
|
||||||
classesListView.Items.Add(uclass.Value);
|
sceneTreeView.Nodes.AddRange(treeNodeCollection.ToArray());
|
||||||
}
|
foreach (TreeNode node in sceneTreeView.Nodes)
|
||||||
}
|
{
|
||||||
typeMap.Clear();
|
node.HideCheckBox();
|
||||||
classesListView.EndUpdate();
|
|
||||||
}
|
}
|
||||||
|
sceneTreeView.EndUpdate();
|
||||||
|
treeNodeCollection.Clear();
|
||||||
|
|
||||||
|
classesListView.BeginUpdate();
|
||||||
|
foreach (var version in typeMap)
|
||||||
|
{
|
||||||
|
var versionGroup = new ListViewGroup(version.Key);
|
||||||
|
classesListView.Groups.Add(versionGroup);
|
||||||
|
|
||||||
|
foreach (var uclass in version.Value)
|
||||||
|
{
|
||||||
|
uclass.Value.Group = versionGroup;
|
||||||
|
classesListView.Items.Add(uclass.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
typeMap.Clear();
|
||||||
|
classesListView.EndUpdate();
|
||||||
|
|
||||||
var types = exportableAssets.Select(x => x.Type).Distinct().OrderBy(x => x.ToString()).ToArray();
|
var types = exportableAssets.Select(x => x.Type).Distinct().OrderBy(x => x.ToString()).ToArray();
|
||||||
foreach (var type in types)
|
foreach (var type in types)
|
||||||
|
@ -316,19 +294,6 @@ namespace AssetStudioGUI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void dontBuildAssetListMenuItem_CheckedChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (dontBuildAssetListMenuItem.Checked)
|
|
||||||
{
|
|
||||||
dontBuildHierarchyMenuItem.Checked = true;
|
|
||||||
dontBuildHierarchyMenuItem.Enabled = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dontBuildHierarchyMenuItem.Enabled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void exportClassStructuresMenuItem_Click(object sender, EventArgs e)
|
private void exportClassStructuresMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (classesListView.Items.Count > 0)
|
if (classesListView.Items.Count > 0)
|
||||||
|
@ -441,7 +406,7 @@ namespace AssetStudioGUI
|
||||||
|
|
||||||
private void showExpOpt_Click(object sender, EventArgs e)
|
private void showExpOpt_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
ExportOptions exportOpt = new ExportOptions();
|
var exportOpt = new ExportOptions();
|
||||||
exportOpt.ShowDialog();
|
exportOpt.ShowDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -654,6 +619,15 @@ namespace AssetStudioGUI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void preview_Resize(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (glControlLoaded && glControl1.Visible)
|
||||||
|
{
|
||||||
|
ChangeGLSize(glControl1.Size);
|
||||||
|
glControl1.Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void PreviewAsset(AssetItem assetItem)
|
private void PreviewAsset(AssetItem assetItem)
|
||||||
{
|
{
|
||||||
if (assetItem == null)
|
if (assetItem == null)
|
||||||
|
@ -896,7 +870,7 @@ namespace AssetStudioGUI
|
||||||
var m_AudioData = m_AudioClip.m_AudioData.Value;
|
var m_AudioData = m_AudioClip.m_AudioData.Value;
|
||||||
if (m_AudioData == null || m_AudioData.Length == 0)
|
if (m_AudioData == null || m_AudioData.Length == 0)
|
||||||
return;
|
return;
|
||||||
FMOD.CREATESOUNDEXINFO exinfo = new FMOD.CREATESOUNDEXINFO();
|
var exinfo = new FMOD.CREATESOUNDEXINFO();
|
||||||
|
|
||||||
exinfo.cbsize = Marshal.SizeOf(exinfo);
|
exinfo.cbsize = Marshal.SizeOf(exinfo);
|
||||||
exinfo.length = (uint)m_AudioClip.m_Size;
|
exinfo.length = (uint)m_AudioClip.m_Size;
|
||||||
|
@ -1173,6 +1147,375 @@ namespace AssetStudioGUI
|
||||||
textPreviewBox.Visible = true;
|
textPreviewBox.Visible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SetProgressBarValue(int value)
|
||||||
|
{
|
||||||
|
if (InvokeRequired)
|
||||||
|
{
|
||||||
|
BeginInvoke(new Action(() => { progressBar1.Value = value; }));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
progressBar1.Value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StatusStripUpdate(string statusText)
|
||||||
|
{
|
||||||
|
if (InvokeRequired)
|
||||||
|
{
|
||||||
|
BeginInvoke(new Action(() => { toolStripStatusLabel1.Text = statusText; }));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
toolStripStatusLabel1.Text = statusText;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public AssetStudioGUIForm()
|
||||||
|
{
|
||||||
|
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
|
||||||
|
InitializeComponent();
|
||||||
|
delayTimer = new System.Timers.Timer(800);
|
||||||
|
delayTimer.Elapsed += new ElapsedEventHandler(delayTimer_Elapsed);
|
||||||
|
displayAll.Checked = Properties.Settings.Default.displayAll;
|
||||||
|
displayInfo.Checked = Properties.Settings.Default.displayInfo;
|
||||||
|
enablePreview.Checked = Properties.Settings.Default.enablePreview;
|
||||||
|
FMODinit();
|
||||||
|
|
||||||
|
Logger.Default = new GUILogger(StatusStripUpdate);
|
||||||
|
Progress.Default = new GUIProgress(SetProgressBarValue);
|
||||||
|
Studio.StatusStripUpdate = StatusStripUpdate;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void ResetForm()
|
||||||
|
{
|
||||||
|
Text = "AssetStudioGUI";
|
||||||
|
assetsManager.Clear();
|
||||||
|
exportableAssets.Clear();
|
||||||
|
visibleAssets.Clear();
|
||||||
|
sceneTreeView.Nodes.Clear();
|
||||||
|
assetListView.VirtualListSize = 0;
|
||||||
|
assetListView.Items.Clear();
|
||||||
|
classesListView.Items.Clear();
|
||||||
|
classesListView.Groups.Clear();
|
||||||
|
previewPanel.BackgroundImage = Properties.Resources.preview;
|
||||||
|
imageTexture?.Dispose();
|
||||||
|
previewPanel.BackgroundImageLayout = ImageLayout.Center;
|
||||||
|
assetInfoLabel.Visible = false;
|
||||||
|
assetInfoLabel.Text = null;
|
||||||
|
textPreviewBox.Visible = false;
|
||||||
|
fontPreviewBox.Visible = false;
|
||||||
|
glControl1.Visible = false;
|
||||||
|
lastSelectedItem = null;
|
||||||
|
lastLoadedAsset = null;
|
||||||
|
sortColumn = -1;
|
||||||
|
reverseSort = false;
|
||||||
|
enableFiltering = false;
|
||||||
|
listSearch.Text = " Filter ";
|
||||||
|
|
||||||
|
var count = filterTypeToolStripMenuItem.DropDownItems.Count;
|
||||||
|
for (var i = 1; i < count; i++)
|
||||||
|
{
|
||||||
|
filterTypeToolStripMenuItem.DropDownItems.RemoveAt(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
FMODreset();
|
||||||
|
|
||||||
|
if (scriptDumper != null)
|
||||||
|
{
|
||||||
|
scriptDumper.Dispose();
|
||||||
|
scriptDumper = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assetListView_MouseClick(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Button == MouseButtons.Right && assetListView.SelectedIndices.Count > 0)
|
||||||
|
{
|
||||||
|
goToSceneHierarchyToolStripMenuItem.Visible = false;
|
||||||
|
showOriginalFileToolStripMenuItem.Visible = false;
|
||||||
|
exportAnimatorwithselectedAnimationClipMenuItem.Visible = false;
|
||||||
|
|
||||||
|
if (assetListView.SelectedIndices.Count == 1)
|
||||||
|
{
|
||||||
|
goToSceneHierarchyToolStripMenuItem.Visible = true;
|
||||||
|
showOriginalFileToolStripMenuItem.Visible = true;
|
||||||
|
}
|
||||||
|
if (assetListView.SelectedIndices.Count >= 1)
|
||||||
|
{
|
||||||
|
var selectedAssets = GetSelectedAssets();
|
||||||
|
if (selectedAssets.Any(x => x.Type == ClassIDType.Animator) && selectedAssets.Any(x => x.Type == ClassIDType.AnimationClip))
|
||||||
|
{
|
||||||
|
exportAnimatorwithselectedAnimationClipMenuItem.Visible = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
contextMenuStrip1.Show(assetListView, e.X, e.Y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void exportSelectedAssetsToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ExportAssets(2, ExportType.Convert);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showOriginalFileToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var selectasset = (AssetItem)assetListView.Items[assetListView.SelectedIndices[0]];
|
||||||
|
var args = $"/select, \"{selectasset.SourceFile.originalPath ?? selectasset.SourceFile.fullName}\"";
|
||||||
|
var pfi = new ProcessStartInfo("explorer.exe", args);
|
||||||
|
Process.Start(pfi);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void exportAnimatorwithAnimationClipMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
AssetItem animator = null;
|
||||||
|
List<AssetItem> animationList = new List<AssetItem>();
|
||||||
|
var selectedAssets = GetSelectedAssets();
|
||||||
|
foreach (var assetPreloadData in selectedAssets)
|
||||||
|
{
|
||||||
|
if (assetPreloadData.Type == ClassIDType.Animator)
|
||||||
|
{
|
||||||
|
animator = assetPreloadData;
|
||||||
|
}
|
||||||
|
else if (assetPreloadData.Type == ClassIDType.AnimationClip)
|
||||||
|
{
|
||||||
|
animationList.Add(assetPreloadData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (animator != null)
|
||||||
|
{
|
||||||
|
var saveFolderDialog1 = new OpenFolderDialog();
|
||||||
|
if (saveFolderDialog1.ShowDialog(this) == DialogResult.OK)
|
||||||
|
{
|
||||||
|
var exportPath = saveFolderDialog1.Folder + "\\Animator\\";
|
||||||
|
ExportAnimatorWithAnimationClip(animator, animationList, exportPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void exportSelectedObjectsToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ExportObjects(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void exportObjectswithAnimationClipMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ExportObjects(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ExportObjects(bool animation)
|
||||||
|
{
|
||||||
|
if (sceneTreeView.Nodes.Count > 0)
|
||||||
|
{
|
||||||
|
var saveFolderDialog1 = new OpenFolderDialog();
|
||||||
|
if (saveFolderDialog1.ShowDialog(this) == DialogResult.OK)
|
||||||
|
{
|
||||||
|
var exportPath = saveFolderDialog1.Folder + "\\GameObject\\";
|
||||||
|
List<AssetItem> animationList = null;
|
||||||
|
if (animation)
|
||||||
|
{
|
||||||
|
animationList = GetSelectedAssets().Where(x => x.Type == ClassIDType.AnimationClip).ToList();
|
||||||
|
if (animationList.Count == 0)
|
||||||
|
{
|
||||||
|
animationList = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ExportObjectsWithAnimationClip(exportPath, sceneTreeView.Nodes, animationList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StatusStripUpdate("No Objects available for export");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void exportSelectedObjectsmergeToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ExportMergeObjects(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void exportSelectedObjectsmergeWithAnimationClipToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ExportMergeObjects(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ExportMergeObjects(bool animation)
|
||||||
|
{
|
||||||
|
if (sceneTreeView.Nodes.Count > 0)
|
||||||
|
{
|
||||||
|
var gameObjects = new List<GameObject>();
|
||||||
|
GetSelectedParentNode(sceneTreeView.Nodes, gameObjects);
|
||||||
|
var saveFileDialog = new SaveFileDialog();
|
||||||
|
saveFileDialog.FileName = gameObjects[0].m_Name + " (merge).fbx";
|
||||||
|
saveFileDialog.AddExtension = false;
|
||||||
|
saveFileDialog.Filter = "Fbx file (*.fbx)|*.fbx";
|
||||||
|
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
var exportPath = saveFileDialog.FileName;
|
||||||
|
List<AssetItem> animationList = null;
|
||||||
|
if (animation)
|
||||||
|
{
|
||||||
|
animationList = GetSelectedAssets().Where(x => x.Type == ClassIDType.AnimationClip).ToList();
|
||||||
|
if (animationList.Count == 0)
|
||||||
|
{
|
||||||
|
animationList = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ExportObjectsMergeWithAnimationClip(exportPath, gameObjects, animationList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void goToSceneHierarchyToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var selectasset = (AssetItem)assetListView.Items[assetListView.SelectedIndices[0]];
|
||||||
|
if (selectasset.TreeNode != null)
|
||||||
|
{
|
||||||
|
sceneTreeView.SelectedNode = selectasset.TreeNode;
|
||||||
|
tabControl1.SelectedTab = tabPage1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void exportAllAssetsMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ExportAssets(1, ExportType.Convert);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void exportSelectedAssetsMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ExportAssets(2, ExportType.Convert);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void exportFilteredAssetsMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ExportAssets(3, ExportType.Convert);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void toolStripMenuItem4_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ExportAssets(1, ExportType.Raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void toolStripMenuItem5_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ExportAssets(2, ExportType.Raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void toolStripMenuItem6_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ExportAssets(3, ExportType.Raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void toolStripMenuItem7_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ExportAssets(1, ExportType.Dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void toolStripMenuItem8_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ExportAssets(2, ExportType.Dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void toolStripMenuItem9_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ExportAssets(3, ExportType.Dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void exportAllObjectssplitToolStripMenuItem1_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (sceneTreeView.Nodes.Count > 0)
|
||||||
|
{
|
||||||
|
var saveFolderDialog1 = new OpenFolderDialog();
|
||||||
|
if (saveFolderDialog1.ShowDialog(this) == DialogResult.OK)
|
||||||
|
{
|
||||||
|
var savePath = saveFolderDialog1.Folder + "\\";
|
||||||
|
ExportSplitObjects(savePath, sceneTreeView.Nodes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StatusStripUpdate("No Objects available for export");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<AssetItem> GetSelectedAssets()
|
||||||
|
{
|
||||||
|
var selectedAssets = new List<AssetItem>(assetListView.SelectedIndices.Count);
|
||||||
|
foreach (int index in assetListView.SelectedIndices)
|
||||||
|
{
|
||||||
|
selectedAssets.Add((AssetItem)assetListView.Items[index]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return selectedAssets;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FilterAssetList()
|
||||||
|
{
|
||||||
|
assetListView.BeginUpdate();
|
||||||
|
assetListView.SelectedIndices.Clear();
|
||||||
|
var show = new List<ClassIDType>();
|
||||||
|
if (!allToolStripMenuItem.Checked)
|
||||||
|
{
|
||||||
|
for (var i = 1; i < filterTypeToolStripMenuItem.DropDownItems.Count; i++)
|
||||||
|
{
|
||||||
|
var item = (ToolStripMenuItem)filterTypeToolStripMenuItem.DropDownItems[i];
|
||||||
|
if (item.Checked)
|
||||||
|
{
|
||||||
|
show.Add((ClassIDType)Enum.Parse(typeof(ClassIDType), item.Text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
visibleAssets = exportableAssets.FindAll(x => show.Contains(x.Type));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
visibleAssets = exportableAssets;
|
||||||
|
}
|
||||||
|
if (listSearch.Text != " Filter ")
|
||||||
|
{
|
||||||
|
visibleAssets = visibleAssets.FindAll(
|
||||||
|
x => x.Text.IndexOf(listSearch.Text, StringComparison.OrdinalIgnoreCase) >= 0 ||
|
||||||
|
x.SubItems[1].Text.IndexOf(listSearch.Text, StringComparison.OrdinalIgnoreCase) >= 0 ||
|
||||||
|
x.SubItems[3].Text.IndexOf(listSearch.Text, StringComparison.OrdinalIgnoreCase) >= 0);
|
||||||
|
}
|
||||||
|
assetListView.VirtualListSize = visibleAssets.Count;
|
||||||
|
assetListView.EndUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ExportAssets(int type, ExportType exportType)
|
||||||
|
{
|
||||||
|
if (exportableAssets.Count > 0)
|
||||||
|
{
|
||||||
|
var saveFolderDialog1 = new OpenFolderDialog();
|
||||||
|
if (saveFolderDialog1.ShowDialog(this) == DialogResult.OK)
|
||||||
|
{
|
||||||
|
timer.Stop();
|
||||||
|
|
||||||
|
List<AssetItem> toExportAssets = null;
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case 1: //All Assets
|
||||||
|
toExportAssets = exportableAssets;
|
||||||
|
break;
|
||||||
|
case 2: //Selected Assets
|
||||||
|
toExportAssets = GetSelectedAssets();
|
||||||
|
break;
|
||||||
|
case 3: //Filtered Assets
|
||||||
|
toExportAssets = visibleAssets;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Studio.ExportAssets(saveFolderDialog1.Folder, toExportAssets, exportType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StatusStripUpdate("No exportable assets loaded");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#region FMOD
|
||||||
private void FMODinit()
|
private void FMODinit()
|
||||||
{
|
{
|
||||||
FMODreset();
|
FMODreset();
|
||||||
|
@ -1440,47 +1783,9 @@ namespace AssetStudioGUI
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
private void SetProgressBarValue(int value)
|
#region GLControl
|
||||||
{
|
|
||||||
if (InvokeRequired)
|
|
||||||
{
|
|
||||||
BeginInvoke(new Action(() => { progressBar1.Value = value; }));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
progressBar1.Value = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void StatusStripUpdate(string statusText)
|
|
||||||
{
|
|
||||||
if (InvokeRequired)
|
|
||||||
{
|
|
||||||
BeginInvoke(new Action(() => { toolStripStatusLabel1.Text = statusText; }));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
toolStripStatusLabel1.Text = statusText;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public AssetStudioGUIForm()
|
|
||||||
{
|
|
||||||
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
|
|
||||||
InitializeComponent();
|
|
||||||
delayTimer = new System.Timers.Timer(800);
|
|
||||||
delayTimer.Elapsed += new ElapsedEventHandler(delayTimer_Elapsed);
|
|
||||||
displayAll.Checked = Properties.Settings.Default.displayAll;
|
|
||||||
displayInfo.Checked = Properties.Settings.Default.displayInfo;
|
|
||||||
enablePreview.Checked = Properties.Settings.Default.enablePreview;
|
|
||||||
FMODinit();
|
|
||||||
|
|
||||||
Logger.Default = new GUILogger(StatusStripUpdate);
|
|
||||||
Progress.Default = new GUIProgress(SetProgressBarValue);
|
|
||||||
Studio.StatusStripUpdate = StatusStripUpdate;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void InitOpenTK()
|
private void InitOpenTK()
|
||||||
{
|
{
|
||||||
ChangeGLSize(glControl1.Size);
|
ChangeGLSize(glControl1.Size);
|
||||||
|
@ -1598,15 +1903,6 @@ namespace AssetStudioGUI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void preview_Resize(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (glControlLoaded && glControl1.Visible)
|
|
||||||
{
|
|
||||||
ChangeGLSize(glControl1.Size);
|
|
||||||
glControl1.Invalidate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void glControl1_Load(object sender, EventArgs e)
|
private void glControl1_Load(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
InitOpenTK();
|
InitOpenTK();
|
||||||
|
@ -1706,332 +2002,6 @@ namespace AssetStudioGUI
|
||||||
rmdown = false;
|
rmdown = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
private void ResetForm()
|
|
||||||
{
|
|
||||||
Text = "AssetStudioGUI";
|
|
||||||
assetsManager.Clear();
|
|
||||||
exportableAssets.Clear();
|
|
||||||
visibleAssets.Clear();
|
|
||||||
sceneTreeView.Nodes.Clear();
|
|
||||||
assetListView.VirtualListSize = 0;
|
|
||||||
assetListView.Items.Clear();
|
|
||||||
classesListView.Items.Clear();
|
|
||||||
classesListView.Groups.Clear();
|
|
||||||
previewPanel.BackgroundImage = Properties.Resources.preview;
|
|
||||||
imageTexture?.Dispose();
|
|
||||||
previewPanel.BackgroundImageLayout = ImageLayout.Center;
|
|
||||||
assetInfoLabel.Visible = false;
|
|
||||||
assetInfoLabel.Text = null;
|
|
||||||
textPreviewBox.Visible = false;
|
|
||||||
fontPreviewBox.Visible = false;
|
|
||||||
glControl1.Visible = false;
|
|
||||||
lastSelectedItem = null;
|
|
||||||
lastLoadedAsset = null;
|
|
||||||
sortColumn = -1;
|
|
||||||
reverseSort = false;
|
|
||||||
enableFiltering = false;
|
|
||||||
listSearch.Text = " Filter ";
|
|
||||||
|
|
||||||
var count = filterTypeToolStripMenuItem.DropDownItems.Count;
|
|
||||||
for (var i = 1; i < count; i++)
|
|
||||||
{
|
|
||||||
filterTypeToolStripMenuItem.DropDownItems.RemoveAt(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
FMODreset();
|
|
||||||
|
|
||||||
if (scriptDumper != null)
|
|
||||||
{
|
|
||||||
scriptDumper.Dispose();
|
|
||||||
scriptDumper = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void assetListView_MouseClick(object sender, MouseEventArgs e)
|
|
||||||
{
|
|
||||||
if (e.Button == MouseButtons.Right && assetListView.SelectedIndices.Count > 0)
|
|
||||||
{
|
|
||||||
jumpToSceneHierarchyToolStripMenuItem.Visible = false;
|
|
||||||
showOriginalFileToolStripMenuItem.Visible = false;
|
|
||||||
exportAnimatorwithselectedAnimationClipMenuItem.Visible = false;
|
|
||||||
|
|
||||||
if (assetListView.SelectedIndices.Count == 1)
|
|
||||||
{
|
|
||||||
jumpToSceneHierarchyToolStripMenuItem.Visible = true;
|
|
||||||
showOriginalFileToolStripMenuItem.Visible = true;
|
|
||||||
}
|
|
||||||
if (assetListView.SelectedIndices.Count >= 1)
|
|
||||||
{
|
|
||||||
var selectedAssets = GetSelectedAssets();
|
|
||||||
if (selectedAssets.Any(x => x.Type == ClassIDType.Animator) && selectedAssets.Any(x => x.Type == ClassIDType.AnimationClip))
|
|
||||||
{
|
|
||||||
exportAnimatorwithselectedAnimationClipMenuItem.Visible = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
contextMenuStrip1.Show(assetListView, e.X, e.Y);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void exportSelectedAssetsToolStripMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
ExportAssets(2, ExportType.Convert);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showOriginalFileToolStripMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
var selectasset = (AssetItem)assetListView.Items[assetListView.SelectedIndices[0]];
|
|
||||||
var args = $"/select, \"{selectasset.SourceFile.originalPath ?? selectasset.SourceFile.fullName}\"";
|
|
||||||
var pfi = new ProcessStartInfo("explorer.exe", args);
|
|
||||||
Process.Start(pfi);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void exportAnimatorwithAnimationClipMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
AssetItem animator = null;
|
|
||||||
List<AssetItem> animationList = new List<AssetItem>();
|
|
||||||
var selectedAssets = GetSelectedAssets();
|
|
||||||
foreach (var assetPreloadData in selectedAssets)
|
|
||||||
{
|
|
||||||
if (assetPreloadData.Type == ClassIDType.Animator)
|
|
||||||
{
|
|
||||||
animator = assetPreloadData;
|
|
||||||
}
|
|
||||||
else if (assetPreloadData.Type == ClassIDType.AnimationClip)
|
|
||||||
{
|
|
||||||
animationList.Add(assetPreloadData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (animator != null)
|
|
||||||
{
|
|
||||||
var saveFolderDialog1 = new OpenFolderDialog();
|
|
||||||
if (saveFolderDialog1.ShowDialog(this) == DialogResult.OK)
|
|
||||||
{
|
|
||||||
var exportPath = saveFolderDialog1.Folder + "\\Animator\\";
|
|
||||||
ExportAnimatorWithAnimationClip(animator, animationList, exportPath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void exportSelectedObjectsToolStripMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
ExportObjects(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void exportObjectswithAnimationClipMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
ExportObjects(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ExportObjects(bool animation)
|
|
||||||
{
|
|
||||||
if (sceneTreeView.Nodes.Count > 0)
|
|
||||||
{
|
|
||||||
var saveFolderDialog1 = new OpenFolderDialog();
|
|
||||||
if (saveFolderDialog1.ShowDialog(this) == DialogResult.OK)
|
|
||||||
{
|
|
||||||
var exportPath = saveFolderDialog1.Folder + "\\GameObject\\";
|
|
||||||
List<AssetItem> animationList = null;
|
|
||||||
if (animation)
|
|
||||||
{
|
|
||||||
animationList = GetSelectedAssets().Where(x => x.Type == ClassIDType.AnimationClip).ToList();
|
|
||||||
if (animationList.Count == 0)
|
|
||||||
{
|
|
||||||
animationList = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ExportObjectsWithAnimationClip(exportPath, sceneTreeView.Nodes, animationList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
StatusStripUpdate("No Objects available for export");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void exportSelectedObjectsmergeToolStripMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
ExportMergeObjects(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void exportSelectedObjectsmergeWithAnimationClipToolStripMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
ExportMergeObjects(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ExportMergeObjects(bool animation)
|
|
||||||
{
|
|
||||||
if (sceneTreeView.Nodes.Count > 0)
|
|
||||||
{
|
|
||||||
var gameObjects = new List<GameObject>();
|
|
||||||
GetSelectedParentNode(sceneTreeView.Nodes, gameObjects);
|
|
||||||
var saveFileDialog = new SaveFileDialog();
|
|
||||||
saveFileDialog.FileName = gameObjects[0].m_Name + " (merge).fbx";
|
|
||||||
saveFileDialog.AddExtension = false;
|
|
||||||
saveFileDialog.Filter = "Fbx file (*.fbx)|*.fbx";
|
|
||||||
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
|
||||||
{
|
|
||||||
var exportPath = saveFileDialog.FileName;
|
|
||||||
List<AssetItem> animationList = null;
|
|
||||||
if (animation)
|
|
||||||
{
|
|
||||||
animationList = GetSelectedAssets().Where(x => x.Type == ClassIDType.AnimationClip).ToList();
|
|
||||||
if (animationList.Count == 0)
|
|
||||||
{
|
|
||||||
animationList = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ExportObjectsMergeWithAnimationClip(exportPath, gameObjects, animationList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void jumpToSceneHierarchyToolStripMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
var selectasset = (AssetItem)assetListView.Items[assetListView.SelectedIndices[0]];
|
|
||||||
if (selectasset.TreeNode != null)
|
|
||||||
{
|
|
||||||
sceneTreeView.SelectedNode = selectasset.TreeNode;
|
|
||||||
tabControl1.SelectedTab = tabPage1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void exportAllAssetsMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
ExportAssets(1, ExportType.Convert);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void exportSelectedAssetsMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
ExportAssets(2, ExportType.Convert);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void exportFilteredAssetsMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
ExportAssets(3, ExportType.Convert);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void toolStripMenuItem4_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
ExportAssets(1, ExportType.Raw);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void toolStripMenuItem5_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
ExportAssets(2, ExportType.Raw);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void toolStripMenuItem6_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
ExportAssets(3, ExportType.Raw);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void toolStripMenuItem7_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
ExportAssets(1, ExportType.Dump);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void toolStripMenuItem8_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
ExportAssets(2, ExportType.Dump);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void toolStripMenuItem9_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
ExportAssets(3, ExportType.Dump);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void exportAllObjectssplitToolStripMenuItem1_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (sceneTreeView.Nodes.Count > 0)
|
|
||||||
{
|
|
||||||
var saveFolderDialog1 = new OpenFolderDialog();
|
|
||||||
if (saveFolderDialog1.ShowDialog(this) == DialogResult.OK)
|
|
||||||
{
|
|
||||||
var savePath = saveFolderDialog1.Folder + "\\";
|
|
||||||
ExportSplitObjects(savePath, sceneTreeView.Nodes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
StatusStripUpdate("No Objects available for export");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<AssetItem> GetSelectedAssets()
|
|
||||||
{
|
|
||||||
var selectedAssets = new List<AssetItem>(assetListView.SelectedIndices.Count);
|
|
||||||
foreach (int index in assetListView.SelectedIndices)
|
|
||||||
{
|
|
||||||
selectedAssets.Add((AssetItem)assetListView.Items[index]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return selectedAssets;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void FilterAssetList()
|
|
||||||
{
|
|
||||||
assetListView.BeginUpdate();
|
|
||||||
assetListView.SelectedIndices.Clear();
|
|
||||||
var show = new List<ClassIDType>();
|
|
||||||
if (!allToolStripMenuItem.Checked)
|
|
||||||
{
|
|
||||||
for (var i = 1; i < filterTypeToolStripMenuItem.DropDownItems.Count; i++)
|
|
||||||
{
|
|
||||||
var item = (ToolStripMenuItem)filterTypeToolStripMenuItem.DropDownItems[i];
|
|
||||||
if (item.Checked)
|
|
||||||
{
|
|
||||||
show.Add((ClassIDType)Enum.Parse(typeof(ClassIDType), item.Text));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
visibleAssets = exportableAssets.FindAll(x => show.Contains(x.Type));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
visibleAssets = exportableAssets;
|
|
||||||
}
|
|
||||||
if (listSearch.Text != " Filter ")
|
|
||||||
{
|
|
||||||
visibleAssets = visibleAssets.FindAll(
|
|
||||||
x => x.Text.IndexOf(listSearch.Text, StringComparison.OrdinalIgnoreCase) >= 0 ||
|
|
||||||
x.SubItems[1].Text.IndexOf(listSearch.Text, StringComparison.OrdinalIgnoreCase) >= 0 ||
|
|
||||||
x.SubItems[3].Text.IndexOf(listSearch.Text, StringComparison.OrdinalIgnoreCase) >= 0);
|
|
||||||
}
|
|
||||||
assetListView.VirtualListSize = visibleAssets.Count;
|
|
||||||
assetListView.EndUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ExportAssets(int type, ExportType exportType)
|
|
||||||
{
|
|
||||||
if (exportableAssets.Count > 0)
|
|
||||||
{
|
|
||||||
var saveFolderDialog1 = new OpenFolderDialog();
|
|
||||||
if (saveFolderDialog1.ShowDialog(this) == DialogResult.OK)
|
|
||||||
{
|
|
||||||
timer.Stop();
|
|
||||||
|
|
||||||
List<AssetItem> toExportAssets = null;
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case 1: //All Assets
|
|
||||||
toExportAssets = exportableAssets;
|
|
||||||
break;
|
|
||||||
case 2: //Selected Assets
|
|
||||||
toExportAssets = GetSelectedAssets();
|
|
||||||
break;
|
|
||||||
case 3: //Filtered Assets
|
|
||||||
toExportAssets = visibleAssets;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
Studio.ExportAssets(saveFolderDialog1.Folder, toExportAssets, exportType);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
StatusStripUpdate("No exportable assets loaded");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,14 +96,15 @@ namespace AssetStudioGUI
|
||||||
return extractedCount;
|
return extractedCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void BuildAssetList(Dictionary<Object, AssetItem> tempDic, out string productName)
|
public static Tuple<string, List<TreeNode>> BuildAssetData()
|
||||||
{
|
{
|
||||||
StatusStripUpdate("Building asset list...");
|
StatusStripUpdate("Building asset list...");
|
||||||
|
|
||||||
productName = string.Empty;
|
string productName = null;
|
||||||
var assetsNameHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
var assetsNameHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||||
var progressCount = assetsManager.assetsFileList.Sum(x => x.Objects.Count);
|
var objectCount = assetsManager.assetsFileList.Sum(x => x.Objects.Count);
|
||||||
int j = 0;
|
var objectAssetItemDic = new Dictionary<Object, AssetItem>(objectCount);
|
||||||
|
int i = 0;
|
||||||
Progress.Reset();
|
Progress.Reset();
|
||||||
foreach (var assetsFile in assetsManager.assetsFileList)
|
foreach (var assetsFile in assetsManager.assetsFileList)
|
||||||
{
|
{
|
||||||
|
@ -112,8 +113,8 @@ namespace AssetStudioGUI
|
||||||
foreach (var asset in assetsFile.Objects.Values)
|
foreach (var asset in assetsFile.Objects.Values)
|
||||||
{
|
{
|
||||||
var assetItem = new AssetItem(asset);
|
var assetItem = new AssetItem(asset);
|
||||||
tempDic.Add(asset, assetItem);
|
objectAssetItemDic.Add(asset, assetItem);
|
||||||
assetItem.UniqueID = " #" + j;
|
assetItem.UniqueID = " #" + i;
|
||||||
var exportable = false;
|
var exportable = false;
|
||||||
switch (asset)
|
switch (asset)
|
||||||
{
|
{
|
||||||
|
@ -195,8 +196,7 @@ namespace AssetStudioGUI
|
||||||
{
|
{
|
||||||
tempExportableAssets.Add(assetItem);
|
tempExportableAssets.Add(assetItem);
|
||||||
}
|
}
|
||||||
|
Progress.Report(++i, objectCount);
|
||||||
Progress.Report(++j, progressCount);
|
|
||||||
}
|
}
|
||||||
foreach (var item in tempExportableAssets)
|
foreach (var item in tempExportableAssets)
|
||||||
{
|
{
|
||||||
|
@ -213,19 +213,15 @@ namespace AssetStudioGUI
|
||||||
exportableAssets.AddRange(tempExportableAssets);
|
exportableAssets.AddRange(tempExportableAssets);
|
||||||
tempExportableAssets.Clear();
|
tempExportableAssets.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
visibleAssets = exportableAssets;
|
visibleAssets = exportableAssets;
|
||||||
assetsNameHash.Clear();
|
assetsNameHash.Clear();
|
||||||
}
|
|
||||||
|
|
||||||
public static List<TreeNode> BuildTreeStructure(Dictionary<Object, AssetItem> tempDic)
|
|
||||||
{
|
|
||||||
StatusStripUpdate("Building tree structure...");
|
StatusStripUpdate("Building tree structure...");
|
||||||
|
|
||||||
var treeNodeCollection = new List<TreeNode>();
|
var treeNodeCollection = new List<TreeNode>();
|
||||||
var treeNodeDictionary = new Dictionary<GameObject, GameObjectTreeNode>();
|
var treeNodeDictionary = new Dictionary<GameObject, GameObjectTreeNode>();
|
||||||
var progressCount = assetsManager.assetsFileList.Count;
|
var assetsFileCount = assetsManager.assetsFileList.Count;
|
||||||
int i = 0;
|
int j = 0;
|
||||||
Progress.Reset();
|
Progress.Reset();
|
||||||
foreach (var assetsFile in assetsManager.assetsFileList)
|
foreach (var assetsFile in assetsManager.assetsFileList)
|
||||||
{
|
{
|
||||||
|
@ -241,24 +237,26 @@ namespace AssetStudioGUI
|
||||||
treeNodeDictionary.Add(m_GameObject, currentNode);
|
treeNodeDictionary.Add(m_GameObject, currentNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_GameObject.m_MeshFilter != null)
|
foreach (var pptr in m_GameObject.m_Components)
|
||||||
{
|
{
|
||||||
if (m_GameObject.m_MeshFilter.m_Mesh.TryGet(out var m_Mesh))
|
if (pptr.TryGet(out var m_Component))
|
||||||
{
|
{
|
||||||
var item = tempDic[m_Mesh];
|
objectAssetItemDic[m_Component].TreeNode = currentNode;
|
||||||
item.TreeNode = currentNode;
|
if (m_Component is MeshFilter m_MeshFilter)
|
||||||
|
{
|
||||||
|
if (m_MeshFilter.m_Mesh.TryGet(out var m_Mesh))
|
||||||
|
{
|
||||||
|
objectAssetItemDic[m_Mesh].TreeNode = currentNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (m_Component is SkinnedMeshRenderer m_SkinnedMeshRenderer)
|
||||||
|
{
|
||||||
|
if (m_SkinnedMeshRenderer.m_Mesh.TryGet(out var m_Mesh))
|
||||||
|
{
|
||||||
|
objectAssetItemDic[m_Mesh].TreeNode = currentNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tempDic[m_GameObject.m_MeshFilter].TreeNode = currentNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_GameObject.m_SkinnedMeshRenderer != null)
|
|
||||||
{
|
|
||||||
if (m_GameObject.m_SkinnedMeshRenderer.m_Mesh.TryGet(out var m_Mesh))
|
|
||||||
{
|
|
||||||
var item = tempDic[m_Mesh];
|
|
||||||
item.TreeNode = currentNode;
|
|
||||||
}
|
|
||||||
tempDic[m_GameObject.m_SkinnedMeshRenderer].TreeNode = currentNode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var parentNode = fileNode;
|
var parentNode = fileNode;
|
||||||
|
@ -287,12 +285,13 @@ namespace AssetStudioGUI
|
||||||
treeNodeCollection.Add(fileNode);
|
treeNodeCollection.Add(fileNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
Progress.Report(++i, progressCount);
|
Progress.Report(++j, assetsFileCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
treeNodeDictionary.Clear();
|
treeNodeDictionary.Clear();
|
||||||
|
|
||||||
return treeNodeCollection;
|
objectAssetItemDic.Clear();
|
||||||
|
|
||||||
|
return new Tuple<string, List<TreeNode>>(productName, treeNodeCollection);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Dictionary<string, SortedDictionary<int, TypeTreeItem>> BuildClassStructure()
|
public static Dictionary<string, SortedDictionary<int, TypeTreeItem>> BuildClassStructure()
|
||||||
|
|
Loading…
Reference in New Issue