diff --git a/Unity Studio/AudioClip.cs b/Unity Studio/AudioClip.cs index 67854fb..239cbb6 100644 --- a/Unity Studio/AudioClip.cs +++ b/Unity Studio/AudioClip.cs @@ -105,6 +105,10 @@ namespace Unity_Studio extension = ".fsb"; preloadData.InfoText += "FSB"; break; + case 2://FSB5 + extension = ".fsb"; + preloadData.InfoText += "FSB"; + break; case 13: extension = ".mp3"; preloadData.InfoText += "MP3"; diff --git a/Unity Studio/UnityStudioForm.Designer.cs b/Unity Studio/UnityStudioForm.Designer.cs index 01b52e2..bed0fc0 100644 --- a/Unity Studio/UnityStudioForm.Designer.cs +++ b/Unity Studio/UnityStudioForm.Designer.cs @@ -62,7 +62,6 @@ this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabPage1 = new System.Windows.Forms.TabPage(); - this.sceneTreeView = new Unity_Studio.GOHierarchy(); this.treeSearch = new System.Windows.Forms.TextBox(); this.tabPage2 = new System.Windows.Forms.TabPage(); this.assetListView = new System.Windows.Forms.ListView(); @@ -75,6 +74,7 @@ this.previewPanel = new System.Windows.Forms.Panel(); this.assetInfoLabel = new System.Windows.Forms.Label(); this.FMODpanel = new System.Windows.Forms.Panel(); + this.FMODcopyright = new System.Windows.Forms.Label(); this.FMODinfoLabel = new System.Windows.Forms.Label(); this.FMODtimerLabel = new System.Windows.Forms.Label(); this.FMODstatusLabel = new System.Windows.Forms.Label(); @@ -100,7 +100,7 @@ this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); this.saveFolderDialog1 = new System.Windows.Forms.SaveFileDialog(); this.treeTip = new System.Windows.Forms.ToolTip(this.components); - this.FMODcopyright = new System.Windows.Forms.Label(); + this.sceneTreeView = new Unity_Studio.GOHierarchy(); this.menuStrip1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel1.SuspendLayout(); @@ -391,8 +391,6 @@ this.splitContainer1.SplitterDistance = 420; this.splitContainer1.TabIndex = 2; this.splitContainer1.TabStop = false; - this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved); - this.splitContainer1.Resize += new System.EventHandler(this.splitContainer1_Resize); // // tabControl1 // @@ -419,17 +417,6 @@ this.tabPage1.Text = "Scene Hierarchy"; this.tabPage1.UseVisualStyleBackColor = true; // - // sceneTreeView - // - this.sceneTreeView.CheckBoxes = true; - this.sceneTreeView.Dock = System.Windows.Forms.DockStyle.Fill; - this.sceneTreeView.HideSelection = false; - this.sceneTreeView.Location = new System.Drawing.Point(0, 20); - this.sceneTreeView.Name = "sceneTreeView"; - this.sceneTreeView.Size = new System.Drawing.Size(410, 588); - this.sceneTreeView.TabIndex = 1; - this.sceneTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.sceneTreeView_AfterCheck); - // // treeSearch // this.treeSearch.Dock = System.Windows.Forms.DockStyle.Top; @@ -455,6 +442,7 @@ this.tabPage2.TabIndex = 1; this.tabPage2.Text = "Asset List"; this.tabPage2.UseVisualStyleBackColor = true; + this.tabPage2.Resize += new System.EventHandler(this.tabPage2_Resize); // // assetListView // @@ -491,6 +479,7 @@ // columnHeaderSize // this.columnHeaderSize.Text = "Size"; + this.columnHeaderSize.Width = 23; // // listSearch // @@ -569,6 +558,16 @@ this.FMODpanel.TabIndex = 2; this.FMODpanel.Visible = false; // + // FMODcopyright + // + this.FMODcopyright.AutoSize = true; + this.FMODcopyright.ForeColor = System.Drawing.SystemColors.ControlLight; + this.FMODcopyright.Location = new System.Drawing.Point(117, 187); + this.FMODcopyright.Name = "FMODcopyright"; + this.FMODcopyright.Size = new System.Drawing.Size(283, 13); + this.FMODcopyright.TabIndex = 9; + this.FMODcopyright.Text = "Audio Engine supplied by FMOD by Firelight Technologies."; + // // FMODinfoLabel // this.FMODinfoLabel.ForeColor = System.Drawing.SystemColors.ControlLightLight; @@ -803,15 +802,16 @@ this.saveFolderDialog1.RestoreDirectory = true; this.saveFolderDialog1.Title = "Browse for folder"; // - // FMODcopyright + // sceneTreeView // - this.FMODcopyright.AutoSize = true; - this.FMODcopyright.ForeColor = System.Drawing.SystemColors.ControlLight; - this.FMODcopyright.Location = new System.Drawing.Point(117, 187); - this.FMODcopyright.Name = "FMODcopyright"; - this.FMODcopyright.Size = new System.Drawing.Size(283, 13); - this.FMODcopyright.TabIndex = 9; - this.FMODcopyright.Text = "Audio Engine supplied by FMOD by Firelight Technologies."; + this.sceneTreeView.CheckBoxes = true; + this.sceneTreeView.Dock = System.Windows.Forms.DockStyle.Fill; + this.sceneTreeView.HideSelection = false; + this.sceneTreeView.Location = new System.Drawing.Point(0, 20); + this.sceneTreeView.Name = "sceneTreeView"; + this.sceneTreeView.Size = new System.Drawing.Size(410, 588); + this.sceneTreeView.TabIndex = 1; + this.sceneTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.sceneTreeView_AfterCheck); // // UnityStudioForm // diff --git a/Unity Studio/UnityStudioForm.cs b/Unity Studio/UnityStudioForm.cs index 71004de..d900e34 100644 --- a/Unity Studio/UnityStudioForm.cs +++ b/Unity Studio/UnityStudioForm.cs @@ -14,10 +14,9 @@ using Tao.DevIl; using System.Web.Script.Serialization; -//Load parent nodes even if they are not selected to provide transformations? -//For extracting bundles, first check if file exists then decompress - -//rigurous search for search files; look into Path.Combine +/*TODO +Load parent nodes even if they are not selected to provide transformations? +For extracting bundles, first check if file exists then decompress*/ namespace Unity_Studio { @@ -25,8 +24,8 @@ namespace Unity_Studio { private List unityFiles = new List(); //files to load public static List assetsfileList = new List(); //loaded files - private List exportableAssets = new List(); //used to hold all listItems while the list is being filtered - private List visibleAssets = new List(); //used to build the listView + private List exportableAssets = new List(); //used to hold all assets while the ListView is filtered + private List visibleAssets = new List(); //used to build the ListView from all or filtered assets private AssetPreloadData lastSelectedItem = null; private AssetPreloadData lastLoadedAsset = null; //private AssetsFile mainDataFile = null; @@ -40,7 +39,6 @@ namespace Unity_Studio private FMOD.Sound sound = null; private FMOD.Channel channel = null; private FMOD.SoundGroup masterSoundGroup = null; - private FMOD.MODE loopMode = FMOD.MODE.LOOP_OFF; private uint FMODlenms = 0; private float FMODVolume = 0.8f; @@ -48,10 +46,11 @@ namespace Unity_Studio private Bitmap imageTexture = null; - private bool startFilter = false; - private bool isNameSorted = false; - private bool isTypeSorted = false; - private bool isSizeSorted = false; + //asset list sortign helpers + private int firstSortColumn = -1; + private int secondSortColumn = 0; + private bool reverseSort = false; + private bool enableFiltering = false; //tree search private int nextGObject = 0; @@ -753,9 +752,10 @@ namespace Unity_Studio visibleAssets = exportableAssets; assetListView.VirtualListSize = visibleAssets.Count; - assetListView.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent); - assetListView.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent); - resizeNameColumn(); + //won't work because ListView is not visible + //assetListView.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent); + //assetListView.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent); + //resizeAssetListColumns(); assetListView.EndUpdate(); progressBar1.Value = 0; @@ -868,6 +868,7 @@ namespace Unity_Studio { case 0: treeSearch.Select(); break; case 1: + resizeAssetListColumns(); //required because the ListView is not visible on app launch classPreviewPanel.Visible = false; previewPanel.Visible = true; listSearch.Select(); @@ -966,9 +967,62 @@ namespace Unity_Studio } + private void resizeAssetListColumns() + { + assetListView.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.HeaderSize); + assetListView.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent); + assetListView.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.HeaderSize); + assetListView.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent); + + var test = SystemInformation.VerticalScrollBarWidth; + var vscroll = ((float)visibleAssets.Count / (float)assetListView.Height) > 0.0567f; + columnHeaderName.Width = assetListView.Width - columnHeaderType.Width - columnHeaderSize.Width - (vscroll ? 25 : 5); + } + + private void tabPage2_Resize(object sender, EventArgs e) + { + resizeAssetListColumns(); + } + + /*private void splitContainer1_Resize(object sender, EventArgs e) + { + switch (tabControl1.SelectedIndex) + { + case 1: resizeAssetListColumns(); break; + } + } + + private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e) + { + switch (tabControl1.SelectedIndex) + { + case 1: resizeAssetListColumns(); break; + } + }*/ + + private void listSearch_Enter(object sender, EventArgs e) + { + if (listSearch.Text == " Filter ") + { + listSearch.Text = ""; + listSearch.ForeColor = System.Drawing.SystemColors.WindowText; + enableFiltering = true; + } + } + + private void listSearch_Leave(object sender, EventArgs e) + { + if (listSearch.Text == "") + { + enableFiltering = false; + listSearch.Text = " Filter "; + listSearch.ForeColor = System.Drawing.SystemColors.GrayText; + } + } + private void ListSearchTextChanged(object sender, EventArgs e) { - if (startFilter) + if (enableFiltering) { assetListView.BeginUpdate(); assetListView.SelectedIndices.Clear(); @@ -979,65 +1033,49 @@ namespace Unity_Studio } } - private void listSearch_Enter(object sender, EventArgs e) - { - if (listSearch.Text == " Filter ") - { - listSearch.Text = ""; - listSearch.ForeColor = System.Drawing.SystemColors.WindowText; - startFilter = true; - } - } - - private void listSearch_Leave(object sender, EventArgs e) - { - if (listSearch.Text == "") - { - startFilter = false; - listSearch.Text = " Filter "; - listSearch.ForeColor = System.Drawing.SystemColors.GrayText; - } - } private void assetListView_ColumnClick(object sender, ColumnClickEventArgs e) { + if (firstSortColumn != e.Column) + { + reverseSort = false; + secondSortColumn = firstSortColumn; + } + else { reverseSort = !reverseSort; } + firstSortColumn = e.Column; + assetListView.BeginUpdate(); assetListView.SelectedIndices.Clear(); switch (e.Column) { case 0: - if (isNameSorted) { visibleAssets.Reverse(); } - else + visibleAssets.Sort(delegate (AssetPreloadData a, AssetPreloadData b) { - visibleAssets.Sort((x, y) => x.Text.CompareTo(y.Text)); - isNameSorted = true; - } - + int xdiff = reverseSort ? b.Text.CompareTo(a.Text) : a.Text.CompareTo(b.Text); + if (xdiff != 0) return xdiff; + else return secondSortColumn == 1 ? a.TypeString.CompareTo(b.TypeString) : a.exportSize.CompareTo(b.exportSize); + }); break; case 1: - if (isTypeSorted) { visibleAssets.Reverse(); } - else + visibleAssets.Sort(delegate (AssetPreloadData a, AssetPreloadData b) { - visibleAssets.Sort((x, y) => x.TypeString.CompareTo(y.TypeString)); - isTypeSorted = true; - } + int xdiff = reverseSort ? b.TypeString.CompareTo(a.TypeString) : a.TypeString.CompareTo(b.TypeString); + if (xdiff != 0) return xdiff; + else return secondSortColumn == 2 ? a.exportSize.CompareTo(b.exportSize) : a.Text.CompareTo(b.Text); + }); break; case 2: - if (isSizeSorted) { visibleAssets.Reverse(); } - else + visibleAssets.Sort(delegate (AssetPreloadData a, AssetPreloadData b) { - visibleAssets.Sort((x, y) => x.exportSize.CompareTo(y.exportSize)); - isSizeSorted = true; - } + int xdiff = reverseSort ? b.exportSize.CompareTo(a.exportSize) : a.exportSize.CompareTo(b.exportSize); + if (xdiff != 0) return xdiff; + else return secondSortColumn == 1 ? a.TypeString.CompareTo(b.TypeString) : a.Text.CompareTo(b.Text); + }); break; } assetListView.EndUpdate(); - } - private void resizeNameColumn() - { - var vscroll = ((float)assetListView.VirtualListSize / (float)assetListView.Height) > 0.0567f; - columnHeaderName.Width = assetListView.Width - columnHeaderType.Width - columnHeaderSize.Width - (vscroll ? 25 : 5); + resizeAssetListColumns(); } private void selectAsset(object sender, ListViewItemSelectionChangedEventArgs e) @@ -1090,23 +1128,6 @@ namespace Unity_Studio } - private void splitContainer1_Resize(object sender, EventArgs e) - { - switch (tabControl1.TabIndex) - { - case 1: resizeNameColumn(); break; - } - } - - private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e) - { - switch (tabControl1.TabIndex) - { - case 1: resizeNameColumn(); break; - } - } - - private void PreviewAsset(AssetPreloadData asset) { switch (asset.Type2) @@ -1158,7 +1179,7 @@ namespace Unity_Studio { AudioClip m_AudioClip = new AudioClip(asset, true); - if (m_AudioClip.m_Type != 22 && m_AudioClip.m_Type != 1) + if (m_AudioClip.m_Type == 13 && m_AudioClip.m_Type == 14 && m_AudioClip.m_Type == 20) { //MemoryStream memoryStream = new MemoryStream(m_AudioData, true); //System.Media.SoundPlayer soundPlayer = new System.Media.SoundPlayer(memoryStream); @@ -3030,7 +3051,6 @@ namespace Unity_Studio enablePreview.Checked = (bool)Properties.Settings.Default["enablePreview"]; openAfterExport.Checked = (bool)Properties.Settings.Default["openAfterExport"]; assetGroupOptions.SelectedIndex = (int)Properties.Settings.Default["assetGroupOption"]; - resizeNameColumn(); } private void resetForm() @@ -3064,6 +3084,10 @@ namespace Unity_Studio fontPreviewBox.Visible = false; lastSelectedItem = null; lastLoadedAsset = null; + firstSortColumn = -1; + secondSortColumn = 0; + reverseSort = false; + enableFiltering = false; FMODinit();