diff --git a/Assets/Scripts/Studio/Command/AssetManagerCommand/LoadLocalAssetCommand.cs b/Assets/Scripts/Studio/Command/AssetManagerCommand/LoadLocalAssetCommand.cs deleted file mode 100644 index 3fd849aa..00000000 --- a/Assets/Scripts/Studio/Command/AssetManagerCommand/LoadLocalAssetCommand.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Studio.Command; -using Studio.Manage; - -namespace Studio -{ - public class LoadLocalAssetCommand : IIrreversibleCommand - { - public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } - - public bool CanExecute() - { - throw new System.NotImplementedException(); - } - - public void Execute() - { - var assetManager = ManagerHub.instance.Get(); - var canvas_Popup = CanvasManager.instance.GetCanvas(); - assetManager.CombineAssetFolderPaths(canvas_Popup.panel_assetmanager.GetAssetManagerData().localAssetsPaths); - assetManager.CombineAssetFolderPaths(canvas_Popup.panel_assetsetting.GetAssetManagerData().localAssetsPaths); - assetManager.LoadLocalFBXDirectorys(); - } - } -} diff --git a/Assets/Scripts/Studio/Command/AssetManagerCommand/LoadLocalAssetCommand.cs.meta b/Assets/Scripts/Studio/Command/AssetManagerCommand/LoadLocalAssetCommand.cs.meta deleted file mode 100644 index a9f3b31a..00000000 --- a/Assets/Scripts/Studio/Command/AssetManagerCommand/LoadLocalAssetCommand.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 3b90a946289e83746bd7ab964aeec940 \ No newline at end of file diff --git a/Assets/Scripts/Studio/Managers/AssetManager.cs b/Assets/Scripts/Studio/Managers/AssetManager.cs index fc988603..45b25db6 100644 --- a/Assets/Scripts/Studio/Managers/AssetManager.cs +++ b/Assets/Scripts/Studio/Managers/AssetManager.cs @@ -16,7 +16,15 @@ namespace Studio.Manage private List folderPathList = new List(); private Dictionary itemDict = new Dictionary(); + private Dictionary assetSettingPaths = new Dictionary(); + private Dictionary assetManagerPaths = new Dictionary(); + + public Action> onAddMangerPaths; + public Action> onAddSettingPaths; + public Action onAssetManagerDatas; + public Action onSetAssetManager; + public Action onSetAssetSetting; public override void Init() { @@ -29,8 +37,11 @@ namespace Studio.Manage var projectManager = ManagerHub.instance.Get(); fbxFileManager.onLoadComplete += OnLoadCustomAsset; - onAssetManagerDatas += canvas_Popup.panel_assetmanager.SetAssetManager; - onAssetManagerDatas += canvas_Popup.panel_assetsetting.SetAssetManager; + onAddSettingPaths += canvas_Popup.panel_assetsetting.SetAssetPathItmes; + onAddMangerPaths += canvas_Popup.panel_assetmanager.SetAssetPathItmes; + + onSetAssetManager += canvas_Popup.panel_assetmanager.SetAssetManager; + onSetAssetSetting += canvas_Popup.panel_assetsetting.SetAssetManager; onAssetManagerDatas += (data) => projectManager.OpenProjectSettingsDataAfterDataLoad(); } @@ -39,8 +50,40 @@ namespace Studio.Manage localAssetPaths.Clear(); folderPathList.Clear(); } + public void LoadAssetManagerFBXDirectorys(int index, string folderPath) + { + if (!assetManagerPaths.ContainsKey(index)) + { + assetManagerPaths.Add(index, folderPath); + } + else + { + assetManagerPaths[index] = folderPath; + } + onAddSettingPaths?.Invoke(assetManagerPaths); + CombineAssetFolderPaths(assetManagerPaths.Values.ToList()); + } + public void LoadAssetSettingFBXDirectorys(int index, string folderPath) + { + if (!assetSettingPaths.ContainsKey(index)) + { + assetSettingPaths.Add(index, folderPath); + } + else + { + assetSettingPaths[index] = folderPath; + } + onAddMangerPaths?.Invoke(assetSettingPaths); + CombineAssetFolderPaths(assetSettingPaths.Values.ToList()); + } + public void CombineAssetFolderPaths(List folderPaths) { + ClearFolderPathList(); + + if (folderPaths == null) + return; + foreach(var folderPath in folderPaths) { if (folderPathList.Contains(folderPath)) @@ -50,6 +93,8 @@ namespace Studio.Manage folderPathList.Add(folderPath); localAssetPaths.Add(folderPath); } + + LoadLocalFBXDirectorys(); } public void LoadLocalFBXDirectorys() { @@ -60,6 +105,11 @@ namespace Studio.Manage assetManagerData.localAssetsPaths.AddRange(folderPathList); onAssetManagerDatas?.Invoke(assetManagerData); } + public void SetAssetManager(AssetManagerData data) + { + onSetAssetManager?.Invoke(data); + onSetAssetSetting?.Invoke(data); + } private void OnLoadCustomAsset() { diff --git a/Assets/Scripts/Studio/Managers/FBXFileManager.cs b/Assets/Scripts/Studio/Managers/FBXFileManager.cs index 6d81978c..739133d1 100644 --- a/Assets/Scripts/Studio/Managers/FBXFileManager.cs +++ b/Assets/Scripts/Studio/Managers/FBXFileManager.cs @@ -48,6 +48,7 @@ namespace Studio.AssetTool } public void ClearFilePaths() { + dataRepo.assetDatas.Clear(); filePaths.Clear(); } public void LoadLocalFBXDirectorys(List folderPaths) @@ -62,6 +63,11 @@ namespace Studio.AssetTool public void LoadLocalFBXDirectory(string folderPath) { + if (!Directory.Exists(folderPath)) + { + return; + } + var files = Directory.GetFiles(folderPath, "*.fbx", SearchOption.AllDirectories); foreach (var file in files) @@ -93,7 +99,6 @@ namespace Studio.AssetTool if (dataRepo.TryGetDataFromName(assetName, out var p)) { - OnLoadComplete(p); continue; } diff --git a/Assets/Scripts/Studio/Managers/ProjectManager.cs b/Assets/Scripts/Studio/Managers/ProjectManager.cs index 9eaf9597..f07fff5e 100644 --- a/Assets/Scripts/Studio/Managers/ProjectManager.cs +++ b/Assets/Scripts/Studio/Managers/ProjectManager.cs @@ -133,7 +133,7 @@ namespace Studio.Manage sceneSettingService.SetMQTTSettingData(curProjectData.sceneStartSetting.mqttSetting); assetManager.CombineAssetFolderPaths(curProjectData.assetManagerData.localAssetsPaths); - assetManager.LoadLocalFBXDirectorys(); + assetManager.SetAssetManager(curProjectData.assetManagerData); } else { diff --git a/Assets/Scripts/Studio/UI/Canvas/Canvas_Popup.cs b/Assets/Scripts/Studio/UI/Canvas/Canvas_Popup.cs index efc74811..b4744b0c 100644 --- a/Assets/Scripts/Studio/UI/Canvas/Canvas_Popup.cs +++ b/Assets/Scripts/Studio/UI/Canvas/Canvas_Popup.cs @@ -79,13 +79,14 @@ namespace Studio canvasHandler = new PopupCanvasHandler(this); + var assetManager = ManagerHub.instance.Get(); var dataManager = FindAnyObjectByType(); var quitManager = FindAnyObjectByType(); panel_newprojectinfo.onClickCreate += () => CommandInvoker.instance.Invoke(new NewProjectCommand()); panel_openprojectinfo.onClickOpen += () => CommandInvoker.instance.Invoke(new OpenProjectCommand()); - panel_assetmanager.onSelectedURLs += () => CommandInvoker.instance.Invoke(new LoadLocalAssetCommand()); - panel_assetsetting.onSelectedURLs += () => CommandInvoker.instance.Invoke(new LoadLocalAssetCommand()); + panel_assetmanager.onSelectedURL += assetManager.LoadAssetManagerFBXDirectorys; + panel_assetsetting.onSelectedURL += assetManager.LoadAssetSettingFBXDirectorys; panel_saveandnewchecker.onClickSaveAndNew += () => CommandInvoker.instance.Invoke(new SaveAndNewProjectCommand()); panel_saveandopenchecker.onClickSaveAndOpen += () => CommandInvoker.instance.Invoke(new SaveAndOpenProjectCommand()); diff --git a/Assets/Scripts/Studio/UI/Elements/UI_FolderPathItem.cs b/Assets/Scripts/Studio/UI/Elements/UI_FolderPathItem.cs index 8b34c9e0..6494a313 100644 --- a/Assets/Scripts/Studio/UI/Elements/UI_FolderPathItem.cs +++ b/Assets/Scripts/Studio/UI/Elements/UI_FolderPathItem.cs @@ -12,7 +12,7 @@ namespace Studio.UI private TMP_InputField InputField_URL; private Button Button_SelectedFolder; - public Action onEndEditInputFieldURL; + public Action onEndEditInputFieldURL; public override void AfterAwake() { @@ -28,7 +28,7 @@ namespace Studio.UI if (string.IsNullOrEmpty(input)) return; - onEndEditInputFieldURL?.Invoke(); + onEndEditInputFieldURL?.Invoke(this); } private void OnClickSelectedFolderButton() { diff --git a/Assets/Scripts/Studio/UI/Panel/Panel_AssetManager.cs b/Assets/Scripts/Studio/UI/Panel/Panel_AssetManager.cs index 8fae35ff..98d7f129 100644 --- a/Assets/Scripts/Studio/UI/Panel/Panel_AssetManager.cs +++ b/Assets/Scripts/Studio/UI/Panel/Panel_AssetManager.cs @@ -1,6 +1,7 @@ using Studio.Util; using System; using System.Collections.Generic; +using System.Linq; using UnityEngine; using UnityEngine.UI; using XRLib.UI; @@ -26,9 +27,9 @@ namespace Studio.UI private UI_FolderPathItem prf_folderPathItem; private List folderPathItems = new List(); - private List selectedURLs = new List(); + private Dictionary selectedURLs = new Dictionary(); - public Action onSelectedURLs; + public Action onSelectedURL; public override void AfterAwake() { @@ -70,29 +71,55 @@ namespace Studio.UI } private void OnClickAddFolderPathItemButton() { - selectedURLs.Clear(); - var item = Instantiate(prf_folderPathItem, Content_LocalAssets); folderPathItems.Add(item); item.onEndEditInputFieldURL += LoadAsstsPath; - + selectedURLs.Add(folderPathItems.IndexOf(item), item.GetURL()); + Button_AddFolderPathItem.transform.SetAsLastSibling(); } - private void LoadAsstsPath() + private void LoadAsstsPath(UI_FolderPathItem item) { - foreach(var item in folderPathItems) + for(int i = 0; i < folderPathItems.Count; i++) { - selectedURLs.Add(item.GetURL()); + if(folderPathItems[i] == item) + { + onSelectedURL?.Invoke(i, item.GetURL()); + } } - onSelectedURLs?.Invoke(); } public AssetManagerData GetAssetManagerData() { var assetManagerData = new AssetManagerData(); - assetManagerData.localAssetsPaths.AddRange(selectedURLs); + assetManagerData.localAssetsPaths.AddRange(selectedURLs.Values.ToList()); return assetManagerData; } + public void SetAssetPathItmes(Dictionary paths) + { + var keys = paths.Keys.ToList(); + + for (int i = 0; i < keys.Count; i++) + { + int key = keys[i]; + + if (selectedURLs.ContainsKey(key)) + { + folderPathItems[i].SetData(paths[key]); + selectedURLs[key] = paths[key]; + } + else + { + var item = Instantiate(prf_folderPathItem, Content_LocalAssets); + item.onEndEditInputFieldURL += LoadAsstsPath; + item.SetData(paths[key]); + folderPathItems.Add(item); + selectedURLs.Add(key, item.GetURL()); + + Button_AddFolderPathItem.transform.SetAsLastSibling(); + } + } + } public void SetAssetManager(AssetManagerData assetManagerData) { selectedURLs.Clear(); @@ -106,13 +133,13 @@ namespace Studio.UI if (assetManagerData == null) return; - foreach (var localPath in assetManagerData.localAssetsPaths) + for (int i = 0; i < assetManagerData.localAssetsPaths.Count; i++) { var item = Instantiate(prf_folderPathItem, Content_LocalAssets); item.onEndEditInputFieldURL += LoadAsstsPath; - item.SetData(localPath); + item.SetData(assetManagerData.localAssetsPaths[i]); folderPathItems.Add(item); - selectedURLs.Add(item.GetURL()); + selectedURLs.Add(i,item.GetURL()); Button_AddFolderPathItem.transform.SetAsLastSibling(); } diff --git a/Assets/Scripts/Studio/UI/Panel/Panel_AssetSetting.cs b/Assets/Scripts/Studio/UI/Panel/Panel_AssetSetting.cs index 95c0538c..551c359b 100644 --- a/Assets/Scripts/Studio/UI/Panel/Panel_AssetSetting.cs +++ b/Assets/Scripts/Studio/UI/Panel/Panel_AssetSetting.cs @@ -1,6 +1,7 @@ using Studio.Util; using System; using System.Collections.Generic; +using System.Linq; using UnityEngine; using UnityEngine.UI; using XRLib.UI; @@ -25,9 +26,9 @@ namespace Studio.UI private UI_FolderPathItem prf_folderPathItem; private List folderPathItems = new List(); - private List selectedURLs = new List(); + private Dictionary selectedURLs = new Dictionary(); - public Action onSelectedURLs; + public Action onSelectedURL; public override void AfterAwake() { @@ -64,29 +65,55 @@ namespace Studio.UI } private void OnClickAddFolderPathItemButton() { - selectedURLs.Clear(); - var item = Instantiate(prf_folderPathItem, Content_LocalAssets); folderPathItems.Add(item); item.onEndEditInputFieldURL += LoadAsstsPath; + selectedURLs.Add(folderPathItems.IndexOf(item), item.GetURL()); Button_AddFolderPathItem.transform.SetAsLastSibling(); } - private void LoadAsstsPath() + private void LoadAsstsPath(UI_FolderPathItem item) { - foreach (var item in folderPathItems) + for (int i = 0; i < folderPathItems.Count; i++) { - selectedURLs.Add(item.GetURL()); + if (folderPathItems[i] == item) + { + onSelectedURL?.Invoke(i, item.GetURL()); + } } - onSelectedURLs?.Invoke(); } public AssetManagerData GetAssetManagerData() { var assetManagerData = new AssetManagerData(); - assetManagerData.localAssetsPaths.AddRange(selectedURLs); + assetManagerData.localAssetsPaths.AddRange(selectedURLs.Values.ToList()); return assetManagerData; } + public void SetAssetPathItmes(Dictionary paths) + { + var keys = paths.Keys.ToList(); + + for (int i = 0; i < keys.Count; i++) + { + int key = keys[i]; + + if (selectedURLs.ContainsKey(key)) + { + folderPathItems[i].SetData(paths[key]); + selectedURLs[key] = paths[key]; + } + else + { + var item = Instantiate(prf_folderPathItem, Content_LocalAssets); + item.onEndEditInputFieldURL += LoadAsstsPath; + item.SetData(paths[key]); + folderPathItems.Add(item); + selectedURLs.Add(key, item.GetURL()); + + Button_AddFolderPathItem.transform.SetAsLastSibling(); + } + } + } public void SetAssetManager(AssetManagerData assetManagerData) { selectedURLs.Clear(); @@ -100,13 +127,13 @@ namespace Studio.UI if (assetManagerData == null) return; - foreach (var localPath in assetManagerData.localAssetsPaths) + for (int i = 0; i < assetManagerData.localAssetsPaths.Count; i++) { var item = Instantiate(prf_folderPathItem, Content_LocalAssets); item.onEndEditInputFieldURL += LoadAsstsPath; - item.SetData(localPath); + item.SetData(assetManagerData.localAssetsPaths[i]); folderPathItems.Add(item); - selectedURLs.Add(item.GetURL()); + selectedURLs.Add(i, item.GetURL()); Button_AddFolderPathItem.transform.SetAsLastSibling(); }