diff --git a/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs b/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs index 533bc14b..3b16ca88 100644 --- a/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs +++ b/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs @@ -64,25 +64,6 @@ namespace XED.Asset renderObjectPrefab = Resources.Load("Prefabs/PRF_RenderObject"); } - public void OnRemoveObject(List objects) - { - if (objects.Count == 0) - { - return; - } - List removeList = new List(); - List siblingIndex = new List(); - for (int i = 0; i < objects.Count; i++) - { - ConnectedAsset searchAsset = connectedAssets.Find((x) => x.renderObject == objects[i]); - removeList.Add(searchAsset); - siblingIndex.Add(searchAsset.hierarchyItem.GetSiblingIndex()); - } - var command = new RemoveObjectCommand(removeList, siblingIndex, this); - EventConnector.instance.GetCanvas().panel_objectinfo.ResetObjectInfo(); - CommandInvoker.instance.Invoke(command); - } - public void OnCopyObject(List objects) { if (objects.Count == 0) @@ -99,8 +80,8 @@ namespace XED.Asset copyList.Add(copyAsset); connectedAssets.Add(copyAsset); } - var command = new CopyObjectCommand(copySources, copyList, this); - CommandInvoker.instance.Invoke(command); + var command = new CopyObjectCommand(); + } IEnumerator ChangeSelectedAssetTransform() @@ -197,18 +178,21 @@ namespace XED.Asset selectRenderObject.transform.localScale = new Vector3(asset.scale.x, asset.scale.y, asset.scale.z); OnAssetDropped(item); } + public void OnRestoreHierarchy(HierarchyItem parentItem, HierarchyItem childItem) { componentScrollView.selectedItems.Add(childItem); componentScrollView.SetToChildItem(childItem, parentItem); componentScrollView.DeselectAll(); } + public void OnDeselectAll() { var canvas_Popup = EventConnector.instance.GetCanvas(); canvas_Popup.panel_objectinfo.gameObject.SetActive(false); componentScrollView.DeselectAll(); } + public void OrderByHierarchy(List objectsToOrder) { SortedDictionary itemToObject = new SortedDictionary(); @@ -220,6 +204,7 @@ namespace XED.Asset } objectsToOrder = itemToObject.Values.ToList(); } + Vector3? GetMousePointOnYPlane(float maxDistance) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); @@ -234,12 +219,6 @@ namespace XED.Asset return null; } - internal void ClearObjects() - { - List objects = connectedAssets.Select(x => x.renderObject).ToList(); - OnRemoveObject(objects); - } - internal void OnSelectObjects(string name, List selectedObjects) { var canvas_Popup = EventConnector.instance.GetCanvas(); diff --git a/Assets/Scripts/Studio/AssetTool/RenderObjectHandler.cs b/Assets/Scripts/Studio/AssetTool/RenderObjectHandler.cs index 4205325d..722f996c 100644 --- a/Assets/Scripts/Studio/AssetTool/RenderObjectHandler.cs +++ b/Assets/Scripts/Studio/AssetTool/RenderObjectHandler.cs @@ -16,7 +16,7 @@ namespace XED.Util public class RenderObjectHandler : Manager, IModeController, IInputHandler { public ModePanel.ProgramMode mode => ModePanel.ProgramMode.ObjectLayout; - List selectedRenderObjects = new List(); + public List selectedRenderObjects = new List(); List copyRenderObjects = new List(); List selectedGameObjects = new List(); CustomAssetRenderObject prevSelectedObject; @@ -137,7 +137,7 @@ namespace XED.Util } else { - ResetRTG(); + CommandInvoker.instance.Invoke(new ResetGizmoCommand()); DeselectAll(); } @@ -214,26 +214,6 @@ namespace XED.Util ManagerHub.instance.Get().assetEventHandler.OnSelectObjectFromObjectHandler(selectedRenderObjects); rtgController.SetGizmoTargetObjects(selectedGameObjects); } - public void ResetRTG() - { - var command = new ResetGizmoCommand(rtgController); - CommandInvoker.instance.Invoke(command); - } - public void SetRTGMove() - { - var command = new ActivateMoveGizmoCommand(rtgController); - CommandInvoker.instance.Invoke(command); - } - public void SetRTGScale() - { - var command = new ActivateScaleGizmoCommand(rtgController); - CommandInvoker.instance.Invoke(command); - } - public void SetRTGRotate() - { - var command = new ActivateRotateGizmoCommand(rtgController); - CommandInvoker.instance.Invoke(command); - } public void OnTransformBegin() { lockHandler = true; @@ -255,30 +235,11 @@ namespace XED.Util } } } - public void RemoveItem() - { - if (selectedRenderObjects.Count == 0) return; - - ManagerHub.instance.Get().OnRemoveObject(selectedRenderObjects); - } - public void CopyItem() - { - if (selectedRenderObjects.Count == 0) - return; - - ManagerHub.instance.Get().OnCopyObject(selectedRenderObjects); - } public void SaveItemsToCopy() { copyRenderObjects.Clear(); copyRenderObjects.AddRange(selectedRenderObjects); } - public void CopySavedItems() - { - if (copyRenderObjects.Count == 0) - return; - ManagerHub.instance.Get().OnCopyObject(copyRenderObjects); - } public void ResetGizmoTargetObjects() { rtgController.SetGizmoTargetObjects(selectedGameObjects); @@ -441,17 +402,17 @@ namespace XED.Util downKeyActions.Add(KeyCode.Mouse0, OnMousePointerDown); upKeyActions.Add(KeyCode.Mouse0, OnMousePointerUp); - getKeyActions.Add(KeyCode.Q, SetRTGMove); - getKeyActions.Add(KeyCode.W, SetRTGRotate); - getKeyActions.Add(KeyCode.E, SetRTGScale); - getKeyActions.Add(KeyCode.R, ResetRTG); + getKeyActions.Add(KeyCode.Q, () => CommandInvoker.instance.Invoke(new ActivateMoveGizmoCommand())); + getKeyActions.Add(KeyCode.W, () => CommandInvoker.instance.Invoke(new ActivateRotateGizmoCommand())); + getKeyActions.Add(KeyCode.E, () => CommandInvoker.instance.Invoke(new ActivateScaleGizmoCommand())); + getKeyActions.Add(KeyCode.R, () => CommandInvoker.instance.Invoke(new ResetGizmoCommand())); getKeyActions.Add(KeyCode.V, VertexSnap); var shortcutTable = new Dictionary>(); #if UNITY_EDITOR shortcutTable.Add(KeyCode.LeftShift, new Dictionary()); shortcutTable[KeyCode.LeftShift].Add(KeyCode.C, SaveItemsToCopy); - shortcutTable[KeyCode.LeftShift].Add(KeyCode.V, CopySavedItems); + shortcutTable[KeyCode.LeftShift].Add(KeyCode.V, () => CommandInvoker.instance.Invoke(new CopyObjectCommand())); #else shortcutTable.Add(KeyCode.LeftControl, new Dictionary()); shortcutTable[KeyCode.LeftControl].Add(KeyCode.C, SaveItemsToCopy); diff --git a/Assets/Scripts/Studio/Command/CameraCommand/MoveToTargetCommand.cs b/Assets/Scripts/Studio/Command/CameraCommand/MoveToTargetCommand.cs index 14c5333b..52d091aa 100644 --- a/Assets/Scripts/Studio/Command/CameraCommand/MoveToTargetCommand.cs +++ b/Assets/Scripts/Studio/Command/CameraCommand/MoveToTargetCommand.cs @@ -1,6 +1,8 @@ using System.IO; using UnityEngine; +using XED.Asset; using XED.Command; +using XED.Manage; namespace XED { @@ -26,8 +28,11 @@ namespace XED public void Execute() { - Camera.main.transform.rotation = Quaternion.Euler(viewAngle); + var cameraManager = ManagerHub.instance.Get(); + Vector3 viewAngle = new Vector3(45, 145, 0); + + Camera.main.transform.rotation = Quaternion.Euler(viewAngle); Camera.main.transform.position = target.position; Camera.main.transform.position += -Camera.main.transform.forward * cameraDistance; } diff --git a/Assets/Scripts/Studio/Command/GizmoCommand/ActivateMoveGizmoCommand.cs b/Assets/Scripts/Studio/Command/GizmoCommand/ActivateMoveGizmoCommand.cs index 8a828a0b..cceb658a 100644 --- a/Assets/Scripts/Studio/Command/GizmoCommand/ActivateMoveGizmoCommand.cs +++ b/Assets/Scripts/Studio/Command/GizmoCommand/ActivateMoveGizmoCommand.cs @@ -1,14 +1,13 @@ +using XED.Manage; using XED.RuntimeGizmo; namespace XED.Command { public class ActivateMoveGizmoCommand : IIrreversibleCommand { - private RTGController rtgController; - - public ActivateMoveGizmoCommand(RTGController rtgController) + public ActivateMoveGizmoCommand() { - this.rtgController = rtgController; + } public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } @@ -20,6 +19,7 @@ namespace XED.Command public void Execute() { + var rtgController = new RTGController(); rtgController.SetWorkGizmoId(RTGController.GizmoId.Move); } } diff --git a/Assets/Scripts/Studio/Command/GizmoCommand/ActivateRotateGizmoCommand.cs b/Assets/Scripts/Studio/Command/GizmoCommand/ActivateRotateGizmoCommand.cs index bca446f4..25319e69 100644 --- a/Assets/Scripts/Studio/Command/GizmoCommand/ActivateRotateGizmoCommand.cs +++ b/Assets/Scripts/Studio/Command/GizmoCommand/ActivateRotateGizmoCommand.cs @@ -4,11 +4,9 @@ namespace XED.Command { public class ActivateRotateGizmoCommand : IIrreversibleCommand { - private RTGController rtgController; - - public ActivateRotateGizmoCommand(RTGController rtgController) + public ActivateRotateGizmoCommand() { - this.rtgController = rtgController; + } public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } @@ -20,6 +18,7 @@ namespace XED.Command public void Execute() { + var rtgController = new RTGController(); rtgController.SetWorkGizmoId(RTGController.GizmoId.Rotate); } } diff --git a/Assets/Scripts/Studio/Command/GizmoCommand/ActivateScaleGizmoCommand.cs b/Assets/Scripts/Studio/Command/GizmoCommand/ActivateScaleGizmoCommand.cs index 616014c2..ad7f74d7 100644 --- a/Assets/Scripts/Studio/Command/GizmoCommand/ActivateScaleGizmoCommand.cs +++ b/Assets/Scripts/Studio/Command/GizmoCommand/ActivateScaleGizmoCommand.cs @@ -4,11 +4,9 @@ namespace XED.Command { public class ActivateScaleGizmoCommand : IIrreversibleCommand { - private RTGController rtgController; - - public ActivateScaleGizmoCommand(RTGController rtgController) + public ActivateScaleGizmoCommand() { - this.rtgController = rtgController; + } public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } @@ -20,6 +18,7 @@ namespace XED.Command public void Execute() { + var rtgController = new RTGController(); rtgController.SetWorkGizmoId(RTGController.GizmoId.Scale); } } diff --git a/Assets/Scripts/Studio/Command/GizmoCommand/ResetGizmoCommand.cs b/Assets/Scripts/Studio/Command/GizmoCommand/ResetGizmoCommand.cs index 022d4f9b..66c4dfaf 100644 --- a/Assets/Scripts/Studio/Command/GizmoCommand/ResetGizmoCommand.cs +++ b/Assets/Scripts/Studio/Command/GizmoCommand/ResetGizmoCommand.cs @@ -4,11 +4,9 @@ namespace XED.Command { public class ResetGizmoCommand : IIrreversibleCommand { - private RTGController rtgController; - - public ResetGizmoCommand(RTGController rtgController) + public ResetGizmoCommand() { - this.rtgController = rtgController; + } public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } @@ -20,6 +18,7 @@ namespace XED.Command public void Execute() { + var rtgController = new RTGController(); rtgController.SetWorkGizmoId(RTGController.GizmoId.None); } } diff --git a/Assets/Scripts/Studio/Command/ObjectCommand.meta b/Assets/Scripts/Studio/Command/ObjectCommand.meta new file mode 100644 index 00000000..6790f991 --- /dev/null +++ b/Assets/Scripts/Studio/Command/ObjectCommand.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0191b75d8fd469042a9f5920e1c54738 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Studio/Command/CopyObjectCommand.cs b/Assets/Scripts/Studio/Command/ObjectCommand/CopyObjectCommand.cs similarity index 88% rename from Assets/Scripts/Studio/Command/CopyObjectCommand.cs rename to Assets/Scripts/Studio/Command/ObjectCommand/CopyObjectCommand.cs index a272f087..dae8f1a6 100644 --- a/Assets/Scripts/Studio/Command/CopyObjectCommand.cs +++ b/Assets/Scripts/Studio/Command/ObjectCommand/CopyObjectCommand.cs @@ -9,15 +9,12 @@ namespace XED.Command { public class CopyObjectCommand : IReversibleCommand { - private List copySources; private List copyList; private CustomAssetConnector connector; - public CopyObjectCommand(List copySources, List copyList, CustomAssetConnector connector) + public CopyObjectCommand() { - this.copySources = copySources; - this.copyList = copyList; - this.connector = connector; + } public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } @@ -29,6 +26,23 @@ namespace XED.Command public void Execute() { + var renderObjectHandler = ManagerHub.instance.Get(); + connector = ManagerHub.instance.Get(); + + if (renderObjectHandler.selectedRenderObjects.Count == 0) + return; + + List copySources = new List(); + copyList = new List(); + for (int i = 0; i < renderObjectHandler.selectedRenderObjects.Count; i++) + { + ConnectedAsset searchAsset = connector.connectedAssets.Find((x) => x.renderObject == renderObjectHandler.selectedRenderObjects[i]); + copySources.Add(searchAsset); + ConnectedAsset copyAsset = new ConnectedAsset(); + copyList.Add(copyAsset); + connector.connectedAssets.Add(copyAsset); + } + for (int i = 0; i < copyList.Count; i++) { ConnectedAsset copySource = copySources[i]; diff --git a/Assets/Scripts/Studio/Command/CopyObjectCommand.cs.meta b/Assets/Scripts/Studio/Command/ObjectCommand/CopyObjectCommand.cs.meta similarity index 100% rename from Assets/Scripts/Studio/Command/CopyObjectCommand.cs.meta rename to Assets/Scripts/Studio/Command/ObjectCommand/CopyObjectCommand.cs.meta diff --git a/Assets/Scripts/Studio/Command/ObjectCommand/RemoveAllObjectCommand.cs b/Assets/Scripts/Studio/Command/ObjectCommand/RemoveAllObjectCommand.cs new file mode 100644 index 00000000..af5dbbb4 --- /dev/null +++ b/Assets/Scripts/Studio/Command/ObjectCommand/RemoveAllObjectCommand.cs @@ -0,0 +1,68 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using XED.Asset; +using XED.Command; +using XED.HierarchyTree; +using XED.Manage; +using XED.Util; + +namespace XED +{ + public class RemoveAllObjectCommand : IIrreversibleCommand + { + public RemoveAllObjectCommand() + { + + } + + public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } + + public bool CanExecute() + { + throw new System.NotImplementedException(); + } + + public void Execute() + { + var connector = ManagerHub.instance.Get(); + + List objects = connector.connectedAssets.Select(x => x.renderObject).ToList(); + + if (objects.Count == 0) + return; + + List removeList = new List(); + List siblingIndex = new List(); + + for (int i = 0; i < objects.Count; i++) + { + ConnectedAsset searchAsset = connector.connectedAssets.Find((x) => x.renderObject == objects[i]); + removeList.Add(searchAsset); + siblingIndex.Add(searchAsset.hierarchyItem.GetSiblingIndex()); + } + + for (int i = 0; i < removeList.Count; i++) + { + ConnectedAsset connectedAsset = removeList[i]; + connector.componentScrollView.RemoveItem(connectedAsset.hierarchyItem); + connectedAsset.assetData.RemoveTransform(connectedAsset.renderObject.transform); + connectedAsset.renderObject.gameObject.SetActive(false); + + List childItems = connectedAsset.hierarchyItem.GetAll(true); + for (int k = 0; k < childItems.Count; k++) + { + ConnectedAsset searchAsset = connector.connectedAssets.Find((x) => x.hierarchyItem == childItems[k]); + searchAsset.assetData.RemoveTransform(searchAsset.renderObject.transform); + searchAsset.renderObject.gameObject.SetActive(false); + } + } + //connector.onRemoveObjects?.Invoke(); + ManagerHub.instance.Get().DeselectAll(); + var canvas = EventConnector.instance.GetCanvas(); + canvas.panel_objectinfo.ResetObjectInfo(); + connector.componentScrollView.DeselectAll(); + EventConnector.instance.GetCanvas().panel_objectinfo.ResetObjectInfo(); + } + } +} diff --git a/Assets/Scripts/Studio/Command/ObjectCommand/RemoveAllObjectCommand.cs.meta b/Assets/Scripts/Studio/Command/ObjectCommand/RemoveAllObjectCommand.cs.meta new file mode 100644 index 00000000..5c266002 --- /dev/null +++ b/Assets/Scripts/Studio/Command/ObjectCommand/RemoveAllObjectCommand.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4ff4d72d4e977c44881f0d235b93f816 \ No newline at end of file diff --git a/Assets/Scripts/Studio/Command/RemoveObjectCommand.cs b/Assets/Scripts/Studio/Command/ObjectCommand/RemoveSelectObjectCommand.cs similarity index 74% rename from Assets/Scripts/Studio/Command/RemoveObjectCommand.cs rename to Assets/Scripts/Studio/Command/ObjectCommand/RemoveSelectObjectCommand.cs index 5aa18257..d790e9ea 100644 --- a/Assets/Scripts/Studio/Command/RemoveObjectCommand.cs +++ b/Assets/Scripts/Studio/Command/ObjectCommand/RemoveSelectObjectCommand.cs @@ -6,22 +6,17 @@ using XED.Util; namespace XED.Command { - public class RemoveObjectCommand : IReversibleCommand + public class RemoveSelectObjectCommand : IReversibleCommand { - private List removeList; - private List siblingIndex; + private List removeList = new List(); + private List siblingIndex = new List(); private CustomAssetConnector connector; - public RemoveObjectCommand( - List removeList, - List siblingIndex, - CustomAssetConnector connector - ) + public RemoveSelectObjectCommand() { - this.removeList = removeList; - this.siblingIndex = siblingIndex; - this.connector = connector; + } + public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } public bool CanExecute() @@ -31,6 +26,19 @@ namespace XED.Command public void Execute() { + var renderObjectHandler = ManagerHub.instance.Get(); + connector = ManagerHub.instance.Get(); + + if (renderObjectHandler.selectedRenderObjects.Count == 0) + return; + + for (int i = 0; i < renderObjectHandler.selectedRenderObjects.Count; i++) + { + ConnectedAsset searchAsset = connector.connectedAssets.Find((x) => x.renderObject == renderObjectHandler.selectedRenderObjects[i]); + removeList.Add(searchAsset); + siblingIndex.Add(searchAsset.hierarchyItem.GetSiblingIndex()); + } + for (int i = 0; i < removeList.Count; i++) { ConnectedAsset connectedAsset = removeList[i]; @@ -50,8 +58,8 @@ namespace XED.Command ManagerHub.instance.Get().DeselectAll(); var canvas = EventConnector.instance.GetCanvas(); canvas.panel_objectinfo.ResetObjectInfo(); - connector.componentScrollView.DeselectAll(); + EventConnector.instance.GetCanvas().panel_objectinfo.ResetObjectInfo(); } public void Undo() diff --git a/Assets/Scripts/Studio/Command/RemoveObjectCommand.cs.meta b/Assets/Scripts/Studio/Command/ObjectCommand/RemoveSelectObjectCommand.cs.meta similarity index 100% rename from Assets/Scripts/Studio/Command/RemoveObjectCommand.cs.meta rename to Assets/Scripts/Studio/Command/ObjectCommand/RemoveSelectObjectCommand.cs.meta diff --git a/Assets/Scripts/Studio/Command/ProjectCommand/LoadProjectCommand.cs b/Assets/Scripts/Studio/Command/ProjectCommand/LoadProjectCommand.cs index 4748e17e..97628403 100644 --- a/Assets/Scripts/Studio/Command/ProjectCommand/LoadProjectCommand.cs +++ b/Assets/Scripts/Studio/Command/ProjectCommand/LoadProjectCommand.cs @@ -1,22 +1,23 @@ +using Newtonsoft.Json; using System.Collections.Generic; +using System.IO; using System.Linq; +using TriLibCore.SFB; using XED.Asset; using XED.HierarchyTree; +using XED.Manage; using XED.Util; namespace XED.Command { public class LoadProjectCommand : IIrreversibleCommand { - private List assets; private CustomAssetConnector connector; + private Dictionary itemDict = new Dictionary(); - Dictionary itemDict = new Dictionary(); - - public LoadProjectCommand(List assets, CustomAssetConnector connector) + public LoadProjectCommand() { - this.assets = assets; - this.connector = connector; + } public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } @@ -28,6 +29,23 @@ namespace XED.Command public void Execute() { + connector = ManagerHub.instance.Get(); + var projectManager = ManagerHub.instance.Get(); + + List assets = projectManager.curProjectData.assetDatas; + + string path = GetOpenFilePath(); + + if (string.IsNullOrEmpty(path)) + return; + + ProjectData projectData = GetFileData(path); + + if (projectData == null) + return; + + CommandInvoker.instance.Invoke(new RemoveAllObjectCommand()); + foreach (AssetData asset in assets) { LoadAsset(asset); @@ -37,6 +55,21 @@ namespace XED.Command { RestoreHierarchy(asset); } + + projectManager.curProjectPath = path; + projectManager.curProjectData = projectData; + } + + private string GetOpenFilePath() + { + var data = StandaloneFileBrowser.OpenFilePanel("OpenProject", "", "json", false); + return data.Count >= 1 ? data[0].Name : ""; + } + + private ProjectData GetFileData(string path) + { + string json = File.ReadAllText(path); + return JsonConvert.DeserializeObject(json); } private void LoadAsset(AssetData asset) diff --git a/Assets/Scripts/Studio/Command/ProjectCommand/NewProjectCommand.cs b/Assets/Scripts/Studio/Command/ProjectCommand/NewProjectCommand.cs index 250d0293..f8353064 100644 --- a/Assets/Scripts/Studio/Command/ProjectCommand/NewProjectCommand.cs +++ b/Assets/Scripts/Studio/Command/ProjectCommand/NewProjectCommand.cs @@ -1,14 +1,13 @@ using XED.Asset; +using XED.Manage; namespace XED.Command { public class NewProjectCommand : IIrreversibleCommand { - CustomAssetConnector connector; - - public NewProjectCommand(CustomAssetConnector connector) + public NewProjectCommand() { - this.connector = connector; + } public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } @@ -20,8 +19,13 @@ namespace XED.Command public void Execute() { - connector.ClearObjects(); - } + var connector = ManagerHub.instance.Get(); + var projectManager = ManagerHub.instance.Get(); + projectManager.curProjectPath = string.Empty; + projectManager.curProjectData = null; + + CommandInvoker.instance.Invoke(new RemoveAllObjectCommand()); + } } } diff --git a/Assets/Scripts/Studio/Command/ProjectCommand/SaveProjectCommand.cs b/Assets/Scripts/Studio/Command/ProjectCommand/SaveProjectCommand.cs index bea2f34d..118ef485 100644 --- a/Assets/Scripts/Studio/Command/ProjectCommand/SaveProjectCommand.cs +++ b/Assets/Scripts/Studio/Command/ProjectCommand/SaveProjectCommand.cs @@ -1,20 +1,21 @@ using Newtonsoft.Json; +using System; +using System.Collections.Generic; using System.IO; +using TriLibCore.SFB; +using XED.Asset; using XED.Command; +using XED.Manage; +using XED.Service; using XED.Util; namespace XED { public class SaveProjectCommand : IIrreversibleCommand { - private string projectPath; - private ProjectData projectData; - - - public SaveProjectCommand(string projectPath, ProjectData projectData) + public SaveProjectCommand() { - this.projectPath = projectPath; - this.projectData = projectData; + } public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } @@ -26,11 +27,43 @@ namespace XED public void Execute() { + var connector = ManagerHub.instance.Get(); + var projectManager = ManagerHub.instance.Get(); + var assetDataService = new AssetDataService(); + + bool isNewProject = string.IsNullOrEmpty(projectManager.curProjectPath); + string path = isNewProject ? GetSaveFilePath() : projectManager.curProjectData.filePath; + + if (string.IsNullOrEmpty(path)) + return; + + List assetDatas = assetDataService.SortAssetDatas(connector.connectedAssets); + ProjectData projectData = CreateProjectData(path, assetDatas); + string json = JsonConvert.SerializeObject(projectData); - FileStream fs = new FileStream(projectPath, FileMode.Create, FileAccess.Write); + FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write); StreamWriter writer = new StreamWriter(fs, System.Text.Encoding.Unicode); writer.Write(json); writer.Close(); + + projectManager.curProjectPath = path; + projectManager.curProjectData = projectData; + } + + private ProjectData CreateProjectData(string path, List assetDatas) + { + return new ProjectData + { + filePath = path, + updateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + assetDatas = assetDatas + }; + } + + private string GetSaveFilePath() + { + var data = StandaloneFileBrowser.SaveFilePanel("SaveProject", "", "", "json"); + return data.Name; } } } diff --git a/Assets/Scripts/Studio/Managers/ProjectManager.cs b/Assets/Scripts/Studio/Managers/ProjectManager.cs index 1a7c99aa..762fba15 100644 --- a/Assets/Scripts/Studio/Managers/ProjectManager.cs +++ b/Assets/Scripts/Studio/Managers/ProjectManager.cs @@ -17,105 +17,16 @@ namespace XED.Manage { public class ProjectManager : Manager { - private AssetDataService assetDataService; - private CustomAssetConnector connector; - - private string curProjectPath; - private ProjectData curProjectData; + public string curProjectPath; + public ProjectData curProjectData; public ProjectManager() { - assetDataService = new AssetDataService(); - connector = ManagerHub.instance.Get(); } public override void Init() { - curProjectPath = string.Empty; - curProjectData = null; + } - - public void SaveProject() - { - bool isNewProject = string.IsNullOrEmpty(curProjectPath); - - string path = isNewProject ? GetSaveFilePath() : curProjectData.filePath; - - if (string.IsNullOrEmpty(path)) - return; - - List assetDatas = assetDataService.SortAssetDatas(connector.connectedAssets); - ProjectData projectData = CreateProjectData(path, assetDatas); - - curProjectPath = path; - curProjectData = projectData; - - var command = new SaveProjectCommand(curProjectPath, curProjectData); - CommandInvoker.instance.Invoke(command); - } - - public void LoadProject() - { - //if (!FindAnyObjectByType().isLoadTaskComplete) - // return; - - string path = GetOpenFilePath(); - - if (string.IsNullOrEmpty(path)) - return; - - ProjectData projectData = GetFileData(path); - - if (projectData == null) - return; - - connector.ClearObjects(); - - Init(); - - curProjectPath = path; - curProjectData = projectData; - - var command = new LoadProjectCommand(curProjectData.assetDatas, connector); - CommandInvoker.instance.Invoke(command); - } - - public void NewProject() - { - Init(); - - var command = new NewProjectCommand(connector); - CommandInvoker.instance.Invoke(command); - } - - private ProjectData CreateProjectData(string path, List assetDatas) - { - return new ProjectData - { - filePath = path, - updateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), - assetDatas = assetDatas - }; - } - - private string GetSaveFilePath() - { - var data = StandaloneFileBrowser.SaveFilePanel("SaveProject", "", "", "json"); - return data.Name; - } - - private string GetOpenFilePath() - { - var data = StandaloneFileBrowser.OpenFilePanel("OpenProject", "", "json", false); - return data.Count >= 1 ? data[0].Name : ""; - } - - - private ProjectData GetFileData(string path) - { - string json = File.ReadAllText(path); - return JsonConvert.DeserializeObject(json); - } - } } diff --git a/Assets/Scripts/Studio/UI/Canvas/Canvas_Static.cs b/Assets/Scripts/Studio/UI/Canvas/Canvas_Static.cs index 09c55a5b..99b03353 100644 --- a/Assets/Scripts/Studio/UI/Canvas/Canvas_Static.cs +++ b/Assets/Scripts/Studio/UI/Canvas/Canvas_Static.cs @@ -30,20 +30,20 @@ namespace XED.UI statusPanel.SetMode(ModePanel.ProgramMode.ObjectLayout); panel_shortcuts.onClickUndo += CommandInvoker.instance.Undo; - panel_shortcuts.onClickRedo += CommandInvoker.instance.Redo; - panel_shortcuts.onclickSave += projectManager.SaveProject; + panel_shortcuts.onClickRedo += CommandInvoker.instance.Redo; + panel_shortcuts.onclickSave += () => CommandInvoker.instance.Invoke(new SaveProjectCommand()); - panel_topbar.onClickSaveProject += projectManager.SaveProject; - panel_topbar.onClickLoadProject += projectManager.LoadProject; - panel_topbar.onClickNewProject += projectManager.NewProject; + panel_topbar.onClickSaveProject += () => CommandInvoker.instance.Invoke(new SaveProjectCommand()); + panel_topbar.onClickLoadProject += () => CommandInvoker.instance.Invoke(new LoadProjectCommand()); + panel_topbar.onClickNewProject += () => CommandInvoker.instance.Invoke(new NewProjectCommand()); //panel_topbar.onClickLoadAssets += fbxFileManager.LoadLocalFBXDirectory; panel_topbar.onClickAssetWindow += fbxFileManager.LoadLocalData; - panel_toolbar.onClickMove += renderObjectHandler.SetRTGMove; - panel_toolbar.onClickExpand += renderObjectHandler.SetRTGScale; - panel_toolbar.onClickRotate += renderObjectHandler.SetRTGRotate; - panel_toolbar.onClickRemove += renderObjectHandler.RemoveItem; - panel_toolbar.onClickCopy += renderObjectHandler.CopyItem; + panel_toolbar.onClickMove += () => CommandInvoker.instance.Invoke(new ActivateMoveGizmoCommand()); + panel_toolbar.onClickExpand += () => CommandInvoker.instance.Invoke(new ActivateScaleGizmoCommand()); + panel_toolbar.onClickRotate += () => CommandInvoker.instance.Invoke(new ActivateRotateGizmoCommand()); + panel_toolbar.onClickRemove += () => CommandInvoker.instance.Invoke(new RemoveSelectObjectCommand()); + panel_toolbar.onClickCopy += () => CommandInvoker.instance.Invoke(new CopyObjectCommand()); } } }