From a089d9fe6fc361d71163564125fd42d67f993f44 Mon Sep 17 00:00:00 2001 From: wsh Date: Wed, 2 Apr 2025 17:20:16 +0900 Subject: [PATCH] =?UTF-8?q?command=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Studio/AssetTool/CopyObjectCommand.cs | 124 +++++++++ .../AssetTool/CopyObjectCommand.cs.meta | 2 + .../AssetTool/CreateConnectedAssetCommand.cs | 43 ++++ .../CreateConnectedAssetCommand.cs.meta | 2 + .../AssetTool/CustomAssetCommandHandler.cs | 236 ------------------ .../CustomAssetCommandHandler.cs.meta | 2 - .../Studio/AssetTool/CustomAssetConnector.cs | 63 ++++- .../Studio/AssetTool/RemoveObjectCommand.cs | 70 ++++++ .../AssetTool/RemoveObjectCommand.cs.meta | 2 + .../Studio/Command/IReversibleCommand.cs | 1 - 10 files changed, 300 insertions(+), 245 deletions(-) create mode 100644 Assets/Scripts/Studio/AssetTool/CopyObjectCommand.cs create mode 100644 Assets/Scripts/Studio/AssetTool/CopyObjectCommand.cs.meta create mode 100644 Assets/Scripts/Studio/AssetTool/CreateConnectedAssetCommand.cs create mode 100644 Assets/Scripts/Studio/AssetTool/CreateConnectedAssetCommand.cs.meta delete mode 100644 Assets/Scripts/Studio/AssetTool/CustomAssetCommandHandler.cs delete mode 100644 Assets/Scripts/Studio/AssetTool/CustomAssetCommandHandler.cs.meta create mode 100644 Assets/Scripts/Studio/AssetTool/RemoveObjectCommand.cs create mode 100644 Assets/Scripts/Studio/AssetTool/RemoveObjectCommand.cs.meta diff --git a/Assets/Scripts/Studio/AssetTool/CopyObjectCommand.cs b/Assets/Scripts/Studio/AssetTool/CopyObjectCommand.cs new file mode 100644 index 00000000..a3fd0f4c --- /dev/null +++ b/Assets/Scripts/Studio/AssetTool/CopyObjectCommand.cs @@ -0,0 +1,124 @@ +using System.Collections.Generic; +using UnityEngine; +using XED.Asset; +using XED.HierarchyTree; +using XED.Util; + +namespace XED.Command +{ + public class CopyObjectCommand : IReversibleCommand + { + private List copySources; + private List copyList; + private CustomAssetConnector connector; + + public CopyObjectCommand(List copySources, List copyList, CustomAssetConnector connector) + { + this.copySources = copySources; + this.copyList = copyList; + this.connector = connector; + } + + public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } + + public bool CanExecute() + { + throw new System.NotImplementedException(); + } + + public void Execute() + { + for (int i = 0; i < copyList.Count; i++) + { + ConnectedAsset copySource = copySources[i]; + ConnectedAsset copyAsset = copyList[i]; + if (copyAsset.hierarchyItem == null) + { + GameObject copyObject = Object.Instantiate(connector.renderObjectPrefab); + copyAsset.assetData = copySource.assetData; + copyAsset.hierarchyItem = copySource.hierarchyItem.Copy(); + copyAsset.renderObject = copyObject.GetComponent(); + copyAsset.renderObject.getBounds = copySource.assetData.GetCombinedBoundary; + copyAsset.renderObject.onTransformChanged = copySource.assetData.OnTransformDataChanged; + copyAsset.renderObject.instantiateObject = copySource.assetData.InstantiateLoadedObject; + copyAsset.renderObject.CreateRenderObject(); + copyAsset.renderObject.transform.position = copySource.renderObject.transform.position; + copyAsset.renderObject.transform.rotation = copySource.renderObject.transform.rotation; + copyAsset.renderObject.transform.localScale = copySource.renderObject.transform.localScale; + + List lastParent = new List(); + for (int j = 0; j < copyAsset.hierarchyItem.layerNum + 1; j++) + { + lastParent.Add(copyAsset.renderObject.transform); + } + + List srcChildren = copySource.hierarchyItem.GetAll(true); + List dstChildren = copyAsset.hierarchyItem.GetAll(true); + for (int k = 0; k < srcChildren.Count; k++) + { + ConnectedAsset childSource = connector.connectedAssets.Find((x) => x.hierarchyItem == srcChildren[k]); + GameObject copyChildObject = Object.Instantiate(connector.renderObjectPrefab); + ConnectedAsset childAsset = new ConnectedAsset(); + childAsset.assetData = childSource.assetData; + childAsset.hierarchyItem = dstChildren[k]; + childAsset.renderObject = copyChildObject.GetComponent(); + childAsset.renderObject.getBounds = childAsset.assetData.GetCombinedBoundary; + childAsset.renderObject.onTransformChanged = childAsset.assetData.OnTransformDataChanged; + childAsset.renderObject.instantiateObject = copySource.assetData.InstantiateLoadedObject; + childAsset.renderObject.CreateRenderObject(); + childAsset.renderObject.transform.position = childSource.renderObject.transform.position; + childAsset.renderObject.transform.rotation = childSource.renderObject.transform.rotation; + childAsset.renderObject.transform.localScale = childSource.renderObject.transform.localScale; + childAsset.renderObject.transform.parent = lastParent[childAsset.hierarchyItem.layerNum - 1]; + if (lastParent.Count <= childAsset.hierarchyItem.layerNum) + { + lastParent.Add(childAsset.renderObject.transform); + } + else + { + lastParent[childAsset.hierarchyItem.layerNum] = childAsset.renderObject.transform; + } + connector.connectedAssets.Add(childAsset); + } + } + copyAsset.assetData.AddTransformToRender(copyAsset.renderObject.transform); + copyAsset.renderObject.gameObject.SetActive(true); + copyAsset.renderObject.Hide(); + connector.componentScrollView.AddItem(copyAsset.hierarchyItem); + } + for (int i = 0; i < copyList.Count; i++) + { + ConnectedAsset connectedAsset = copyList[i]; + 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.AddTransformToRender(searchAsset.renderObject.transform); + searchAsset.renderObject.gameObject.SetActive(true); + } + } + } + + public void Undo() + { + for (int i = 0; i < copyList.Count; i++) + { + ConnectedAsset connectedAsset = copyList[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(); + connector.componentScrollView.DeselectAll(); + } + } + +} \ No newline at end of file diff --git a/Assets/Scripts/Studio/AssetTool/CopyObjectCommand.cs.meta b/Assets/Scripts/Studio/AssetTool/CopyObjectCommand.cs.meta new file mode 100644 index 00000000..c09cd837 --- /dev/null +++ b/Assets/Scripts/Studio/AssetTool/CopyObjectCommand.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 578e32b3992591548ba59a300b73ec97 \ No newline at end of file diff --git a/Assets/Scripts/Studio/AssetTool/CreateConnectedAssetCommand.cs b/Assets/Scripts/Studio/AssetTool/CreateConnectedAssetCommand.cs new file mode 100644 index 00000000..ad2407e6 --- /dev/null +++ b/Assets/Scripts/Studio/AssetTool/CreateConnectedAssetCommand.cs @@ -0,0 +1,43 @@ +using XED.Asset; + +namespace XED.Command +{ + public class CreateConnectedAssetCommand : IReversibleCommand + { + private ConnectedAsset connectedAsset; + private CustomAssetConnector connector; + + public CreateConnectedAssetCommand(ConnectedAsset connectedAsset, CustomAssetConnector connector) + { + this.connectedAsset = connectedAsset; + this.connector = connector; + } + public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } + + public bool CanExecute() + { + throw new System.NotImplementedException(); + } + + public void Execute() + { + if (!connectedAsset.renderObject.gameObject.activeSelf) + { + connectedAsset.assetData.AddTransformToRender(connectedAsset.renderObject.transform); + connectedAsset.renderObject.gameObject.SetActive(true); + connector.componentScrollView.AddItem(connectedAsset.hierarchyItem); + } + connectedAsset.renderObject.Hide(); + connector.connectedAssets.Add(connectedAsset); + } + + public void Undo() + { + connector.connectedAssets.Remove(connectedAsset); + connectedAsset.assetData.RemoveTransform(connectedAsset.renderObject.transform); + connectedAsset.renderObject.gameObject.SetActive(false); + connector.componentScrollView.RemoveItem(connectedAsset.hierarchyItem); + } + } + +} \ No newline at end of file diff --git a/Assets/Scripts/Studio/AssetTool/CreateConnectedAssetCommand.cs.meta b/Assets/Scripts/Studio/AssetTool/CreateConnectedAssetCommand.cs.meta new file mode 100644 index 00000000..0f4958ab --- /dev/null +++ b/Assets/Scripts/Studio/AssetTool/CreateConnectedAssetCommand.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 89b52b67b0ae9d9419a78ef6838eca3d \ No newline at end of file diff --git a/Assets/Scripts/Studio/AssetTool/CustomAssetCommandHandler.cs b/Assets/Scripts/Studio/AssetTool/CustomAssetCommandHandler.cs deleted file mode 100644 index 48a52477..00000000 --- a/Assets/Scripts/Studio/AssetTool/CustomAssetCommandHandler.cs +++ /dev/null @@ -1,236 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using XED.Asset; -using XED.HierarchyTree; -using XED.Manage; -using XED.Util; - -namespace XED -{ - public class CustomAssetCommandHandler - { - private CustomAssetConnector connector; - - public CustomAssetCommandHandler(CustomAssetConnector connector) - { - this.connector = connector; - } - - public void CreateConnectedAsset() - { - ConnectedAsset connectedAsset = new ConnectedAsset - { - assetData = connector.selectedAssetData, - hierarchyItem = connector.componentScrollView.AddItem(connector.selectedAssetData.assetName, connector.selectedItem, HierarchyItemType.obj), - renderObject = connector.selectRenderObject - }; - connectedAsset.renderObject.onTransformChanged = connectedAsset.assetData.OnTransformDataChanged; - var command = new ActionCommand( - () => ExecuteCreateConnectedAsset(connectedAsset), - () => UndoCreateConnectedAsset(connectedAsset) - ); - CommandManager.I.ExecuteCommand(command); - } - - private void ExecuteCreateConnectedAsset(ConnectedAsset connectedAsset) - { - if (!connectedAsset.renderObject.gameObject.activeSelf) - { - connectedAsset.assetData.AddTransformToRender(connectedAsset.renderObject.transform); - connectedAsset.renderObject.gameObject.SetActive(true); - connector.componentScrollView.AddItem(connectedAsset.hierarchyItem); - } - connectedAsset.renderObject.Hide(); - connector.connectedAssets.Add(connectedAsset); - } - - private void UndoCreateConnectedAsset(ConnectedAsset connectedAsset) - { - connector.connectedAssets.Remove(connectedAsset); - connectedAsset.assetData.RemoveTransform(connectedAsset.renderObject.transform); - connectedAsset.renderObject.gameObject.SetActive(false); - connector.componentScrollView.RemoveItem(connectedAsset.hierarchyItem); - } - - 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 = connector.connectedAssets.Find((x) => x.renderObject == objects[i]); - removeList.Add(searchAsset); - siblingIndex.Add(searchAsset.hierarchyItem.GetSiblingIndex()); - } - var command = new ActionCommand( - () => ExecuteRemoveObject(removeList), - () => UndoRemoveObject(removeList, siblingIndex) - ); - CommandManager.I.ExecuteCommand(command); - } - - private void ExecuteRemoveObject(List removeList) - { - 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(); - connector.componentScrollView.DeselectAll(); - } - - private void UndoRemoveObject(List removeList, List siblingIndex) - { - for (int i = 0; i < removeList.Count; i++) - { - ConnectedAsset connectedAsset = removeList[i]; - connector.componentScrollView.AttachItem(connectedAsset.hierarchyItem.parent, connectedAsset.hierarchyItem, siblingIndex[i]); - connectedAsset.assetData.AddTransformToRender(connectedAsset.renderObject.transform); - connectedAsset.renderObject.gameObject.SetActive(true); - } - for (int i = 0; i < removeList.Count; i++) - { - ConnectedAsset connectedAsset = removeList[i]; - 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.AddTransformToRender(searchAsset.renderObject.transform); - searchAsset.renderObject.gameObject.SetActive(true); - } - } - } - - public void OnCopyObject(List objects) - { - if (objects.Count == 0) - { - return; - } - List copySources = new List(); - List copyList = new List(); - for (int i = 0; i < objects.Count; i++) - { - ConnectedAsset searchAsset = connector.connectedAssets.Find((x) => x.renderObject == objects[i]); - copySources.Add(searchAsset); - ConnectedAsset copyAsset = new ConnectedAsset(); - copyList.Add(copyAsset); - connector.connectedAssets.Add(copyAsset); - } - var command = new ActionCommand( - () => ExecuteCopyObject(copySources, copyList), - () => UndoCopyObject(copyList) - ); - CommandManager.I.ExecuteCommand(command); - } - - private void ExecuteCopyObject(List copySources, List copyList) - { - for (int i = 0; i < copyList.Count; i++) - { - ConnectedAsset copySource = copySources[i]; - ConnectedAsset copyAsset = copyList[i]; - if (copyAsset.hierarchyItem == null) - { - GameObject copyObject = Object.Instantiate(connector.renderObjectPrefab); - copyAsset.assetData = copySource.assetData; - copyAsset.hierarchyItem = copySource.hierarchyItem.Copy(); - copyAsset.renderObject = copyObject.GetComponent(); - copyAsset.renderObject.getBounds = copySource.assetData.GetCombinedBoundary; - copyAsset.renderObject.onTransformChanged = copySource.assetData.OnTransformDataChanged; - copyAsset.renderObject.instantiateObject = copySource.assetData.InstantiateLoadedObject; - copyAsset.renderObject.CreateRenderObject(); - copyAsset.renderObject.transform.position = copySource.renderObject.transform.position; - copyAsset.renderObject.transform.rotation = copySource.renderObject.transform.rotation; - copyAsset.renderObject.transform.localScale = copySource.renderObject.transform.localScale; - - List lastParent = new List(); - for (int j = 0; j < copyAsset.hierarchyItem.layerNum + 1; j++) - { - lastParent.Add(copyAsset.renderObject.transform); - } - - List srcChildren = copySource.hierarchyItem.GetAll(true); - List dstChildren = copyAsset.hierarchyItem.GetAll(true); - for (int k = 0; k < srcChildren.Count; k++) - { - ConnectedAsset childSource = connector.connectedAssets.Find((x) => x.hierarchyItem == srcChildren[k]); - GameObject copyChildObject = Object.Instantiate(connector.renderObjectPrefab); - ConnectedAsset childAsset = new ConnectedAsset(); - childAsset.assetData = childSource.assetData; - childAsset.hierarchyItem = dstChildren[k]; - childAsset.renderObject = copyChildObject.GetComponent(); - childAsset.renderObject.getBounds = childAsset.assetData.GetCombinedBoundary; - childAsset.renderObject.onTransformChanged = childAsset.assetData.OnTransformDataChanged; - childAsset.renderObject.instantiateObject = copySource.assetData.InstantiateLoadedObject; - childAsset.renderObject.CreateRenderObject(); - childAsset.renderObject.transform.position = childSource.renderObject.transform.position; - childAsset.renderObject.transform.rotation = childSource.renderObject.transform.rotation; - childAsset.renderObject.transform.localScale = childSource.renderObject.transform.localScale; - childAsset.renderObject.transform.parent = lastParent[childAsset.hierarchyItem.layerNum - 1]; - if (lastParent.Count <= childAsset.hierarchyItem.layerNum) - { - lastParent.Add(childAsset.renderObject.transform); - } - else - { - lastParent[childAsset.hierarchyItem.layerNum] = childAsset.renderObject.transform; - } - connector.connectedAssets.Add(childAsset); - } - } - copyAsset.assetData.AddTransformToRender(copyAsset.renderObject.transform); - copyAsset.renderObject.gameObject.SetActive(true); - copyAsset.renderObject.Hide(); - connector.componentScrollView.AddItem(copyAsset.hierarchyItem); - } - for (int i = 0; i < copyList.Count; i++) - { - ConnectedAsset connectedAsset = copyList[i]; - 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.AddTransformToRender(searchAsset.renderObject.transform); - searchAsset.renderObject.gameObject.SetActive(true); - } - } - } - - private void UndoCopyObject(List copyList) - { - for (int i = 0; i < copyList.Count; i++) - { - ConnectedAsset connectedAsset = copyList[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(); - connector.componentScrollView.DeselectAll(); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Studio/AssetTool/CustomAssetCommandHandler.cs.meta b/Assets/Scripts/Studio/AssetTool/CustomAssetCommandHandler.cs.meta deleted file mode 100644 index b9923078..00000000 --- a/Assets/Scripts/Studio/AssetTool/CustomAssetCommandHandler.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: e3e04d3969bc8524db95f7a57e8357f8 \ No newline at end of file diff --git a/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs b/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs index 49720778..6becb919 100644 --- a/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs +++ b/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs @@ -8,6 +8,7 @@ using XED.Util; using XED.HierarchyTree; using System.Linq; using UnityEditor; +using System; namespace XED.Asset { @@ -35,7 +36,6 @@ namespace XED.Asset public CustomAssetDataHandler assetDataHandler; public CustomAssetEventHandler assetEventHandler; - public CustomAssetCommandHandler assetCommandHandler; ProjectManager projectManager; void Awake() @@ -44,7 +44,6 @@ namespace XED.Asset renderObjectHandler = FindFirstObjectByType(); assetDataHandler = new CustomAssetDataHandler(this); assetEventHandler = new CustomAssetEventHandler(this); - assetCommandHandler = new CustomAssetCommandHandler(this); projectManager = FindSingle(); } @@ -66,14 +65,53 @@ namespace XED.Asset saveLoadFBXData.onRemoveFbxFile.AddListener(assetDataHandler.OnRemoveFbxFile); renderObjectHandler.onSelectObject.AddListener(assetEventHandler.OnSelectObjectFromObjectHandler); - renderObjectHandler.onCopyObject.AddListener(assetCommandHandler.OnCopyObject); - renderObjectHandler.onRemoveObject.AddListener(assetCommandHandler.OnRemoveObject); + renderObjectHandler.onCopyObject.AddListener(OnCopyObject); + renderObjectHandler.onRemoveObject.AddListener(OnRemoveObject); renderObjectHandler.onOrderByHierachy.AddListener(OrderByHierarchy); renderObjectHandler.onDeselectAll += OnDeselectAll; - projectManager.onRemoveAsset += assetCommandHandler.OnRemoveObject; + projectManager.onRemoveAsset += OnRemoveObject; } + private 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); + CommandManager.I.ExecuteCommand(command); + } + + private void OnCopyObject(List objects) + { + if (objects.Count == 0) + { + return; + } + List copySources = new List(); + List copyList = new List(); + for (int i = 0; i < objects.Count; i++) + { + ConnectedAsset searchAsset = connectedAssets.Find((x) => x.renderObject == objects[i]); + copySources.Add(searchAsset); + ConnectedAsset copyAsset = new ConnectedAsset(); + copyList.Add(copyAsset); + connectedAssets.Add(copyAsset); + } + var command = new CopyObjectCommand(copySources, copyList, this); + CommandManager.I.ExecuteCommand(command); + } + + // Update is called once per frame void Update() { @@ -117,7 +155,7 @@ namespace XED.Asset bool isPointerOutScrollRect = !assetScrollRect.IsPointerOverScrollRect(); if (item != null && isPointerOutScrollRect) { - assetCommandHandler.CreateConnectedAsset(); + CreateConnectedAsset(); } else { @@ -128,6 +166,19 @@ namespace XED.Asset selectedAssetData = null; onAssetDropped?.Invoke(); } + + void CreateConnectedAsset() + { + ConnectedAsset connectedAsset = new ConnectedAsset + { + assetData = selectedAssetData, + hierarchyItem = componentScrollView.AddItem(selectedAssetData.assetName, selectedItem, HierarchyItemType.obj), + renderObject = selectRenderObject + }; + connectedAsset.renderObject.onTransformChanged = connectedAsset.assetData.OnTransformDataChanged; + var command = new CreateConnectedAssetCommand(connectedAsset, this); + CommandManager.I.ExecuteCommand(command); + } public void OnParentChanged(HierarchyItem parentItem, HierarchyItem childItem) { ConnectedAsset parentAsset = connectedAssets.Find((x) => x.hierarchyItem == parentItem); diff --git a/Assets/Scripts/Studio/AssetTool/RemoveObjectCommand.cs b/Assets/Scripts/Studio/AssetTool/RemoveObjectCommand.cs new file mode 100644 index 00000000..e229bdd1 --- /dev/null +++ b/Assets/Scripts/Studio/AssetTool/RemoveObjectCommand.cs @@ -0,0 +1,70 @@ +using System.Collections.Generic; +using XED.Asset; +using XED.HierarchyTree; + +namespace XED.Command +{ + public class RemoveObjectCommand : IReversibleCommand + { + private List removeList; + private List siblingIndex; + private CustomAssetConnector connector; + + public RemoveObjectCommand(List removeList, List siblingIndex, CustomAssetConnector connector) + { + 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() + { + throw new System.NotImplementedException(); + } + + public void Execute() + { + 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(); + connector.componentScrollView.DeselectAll(); + } + + public void Undo() + { + for (int i = 0; i < removeList.Count; i++) + { + ConnectedAsset connectedAsset = removeList[i]; + connector.componentScrollView.AttachItem(connectedAsset.hierarchyItem.parent, connectedAsset.hierarchyItem, siblingIndex[i]); + connectedAsset.assetData.AddTransformToRender(connectedAsset.renderObject.transform); + connectedAsset.renderObject.gameObject.SetActive(true); + } + for (int i = 0; i < removeList.Count; i++) + { + ConnectedAsset connectedAsset = removeList[i]; + 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.AddTransformToRender(searchAsset.renderObject.transform); + searchAsset.renderObject.gameObject.SetActive(true); + } + } + } + } + +} \ No newline at end of file diff --git a/Assets/Scripts/Studio/AssetTool/RemoveObjectCommand.cs.meta b/Assets/Scripts/Studio/AssetTool/RemoveObjectCommand.cs.meta new file mode 100644 index 00000000..b236c2c4 --- /dev/null +++ b/Assets/Scripts/Studio/AssetTool/RemoveObjectCommand.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 712363d28f807c946a7689ecb0137ea3 \ No newline at end of file diff --git a/Assets/Scripts/Studio/Command/IReversibleCommand.cs b/Assets/Scripts/Studio/Command/IReversibleCommand.cs index 63b8f76a..deec1fd7 100644 --- a/Assets/Scripts/Studio/Command/IReversibleCommand.cs +++ b/Assets/Scripts/Studio/Command/IReversibleCommand.cs @@ -3,6 +3,5 @@ namespace XED.Command public interface IReversibleCommand : ICommand { public abstract void Undo(); - public abstract void Redo(); } } \ No newline at end of file