Merge branch 'main' into pgd/20250403
This commit is contained in:
124
Assets/Scripts/Studio/AssetTool/CopyObjectCommand.cs
Normal file
124
Assets/Scripts/Studio/AssetTool/CopyObjectCommand.cs
Normal file
@@ -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<ConnectedAsset> copySources;
|
||||
private List<ConnectedAsset> copyList;
|
||||
private CustomAssetConnector connector;
|
||||
|
||||
public CopyObjectCommand(List<ConnectedAsset> copySources, List<ConnectedAsset> 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<CustomAssetRenderObject>();
|
||||
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<Transform> lastParent = new List<Transform>();
|
||||
for (int j = 0; j < copyAsset.hierarchyItem.layerNum + 1; j++)
|
||||
{
|
||||
lastParent.Add(copyAsset.renderObject.transform);
|
||||
}
|
||||
|
||||
List<HierarchyItem> srcChildren = copySource.hierarchyItem.GetAll(true);
|
||||
List<HierarchyItem> 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<CustomAssetRenderObject>();
|
||||
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<HierarchyItem> 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<HierarchyItem> 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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 578e32b3992591548ba59a300b73ec97
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 89b52b67b0ae9d9419a78ef6838eca3d
|
||||
@@ -1,267 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing.Printing;
|
||||
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<CustomAssetRenderObject> objects)
|
||||
{
|
||||
if (objects.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
List<ConnectedAsset> removeList = new List<ConnectedAsset>();
|
||||
List<int> siblingIndex = new List<int>();
|
||||
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);
|
||||
}
|
||||
|
||||
public void OnCompletelyRemoveObject(List<CustomAssetRenderObject> objects)
|
||||
{
|
||||
if (objects.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
List<ConnectedAsset> removeList = new List<ConnectedAsset>();
|
||||
List<int> siblingIndex = new List<int>();
|
||||
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());
|
||||
}
|
||||
ExecuteCompletelyRemoveObject(removeList);
|
||||
}
|
||||
|
||||
private void ExecuteRemoveObject(List<ConnectedAsset> 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<HierarchyItem> 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 ExecuteCompletelyRemoveObject(List<ConnectedAsset> 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);
|
||||
}
|
||||
connector.onCompletelyRemoveObjects?.Invoke(removeList);
|
||||
connector.componentScrollView.DeselectAll();
|
||||
}
|
||||
|
||||
private void UndoRemoveObject(List<ConnectedAsset> removeList, List<int> 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<HierarchyItem> 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<CustomAssetRenderObject> objects)
|
||||
{
|
||||
if (objects.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
List<ConnectedAsset> copySources = new List<ConnectedAsset>();
|
||||
List<ConnectedAsset> copyList = new List<ConnectedAsset>();
|
||||
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<ConnectedAsset> copySources, List<ConnectedAsset> 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<CustomAssetRenderObject>();
|
||||
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<Transform> lastParent = new List<Transform>();
|
||||
for (int j = 0; j < copyAsset.hierarchyItem.layerNum + 1; j++)
|
||||
{
|
||||
lastParent.Add(copyAsset.renderObject.transform);
|
||||
}
|
||||
|
||||
List<HierarchyItem> srcChildren = copySource.hierarchyItem.GetAll(true);
|
||||
List<HierarchyItem> 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<CustomAssetRenderObject>();
|
||||
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<HierarchyItem> 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<ConnectedAsset> 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<HierarchyItem> 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e3e04d3969bc8524db95f7a57e8357f8
|
||||
@@ -8,6 +8,7 @@ using XED.Util;
|
||||
using XED.HierarchyTree;
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
using System;
|
||||
|
||||
namespace XED.Asset
|
||||
{
|
||||
@@ -31,12 +32,10 @@ namespace XED.Asset
|
||||
public System.Action<string, List<GameObject>> onSelectObjects;
|
||||
public System.Action onDeselectObjects;
|
||||
public System.Action onRemoveObjects;
|
||||
public System.Action<List<ConnectedAsset>> onCompletelyRemoveObjects;
|
||||
public System.Action onAssetDropped;
|
||||
|
||||
public CustomAssetDataHandler assetDataHandler;
|
||||
public CustomAssetEventHandler assetEventHandler;
|
||||
public CustomAssetCommandHandler assetCommandHandler;
|
||||
|
||||
ProjectManager projectManager;
|
||||
void Awake()
|
||||
@@ -45,7 +44,6 @@ namespace XED.Asset
|
||||
renderObjectHandler = FindFirstObjectByType<RenderObjectHandler>();
|
||||
assetDataHandler = new CustomAssetDataHandler(this);
|
||||
assetEventHandler = new CustomAssetEventHandler(this);
|
||||
assetCommandHandler = new CustomAssetCommandHandler(this);
|
||||
projectManager = FindSingle<ProjectManager>();
|
||||
|
||||
}
|
||||
@@ -67,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.OnCompletelyRemoveObject;
|
||||
projectManager.onRemoveAsset += OnRemoveObject;
|
||||
}
|
||||
|
||||
private void OnRemoveObject(List<CustomAssetRenderObject> objects)
|
||||
{
|
||||
if (objects.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
List<ConnectedAsset> removeList = new List<ConnectedAsset>();
|
||||
List<int> siblingIndex = new List<int>();
|
||||
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<CustomAssetRenderObject> objects)
|
||||
{
|
||||
if (objects.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
List<ConnectedAsset> copySources = new List<ConnectedAsset>();
|
||||
List<ConnectedAsset> copyList = new List<ConnectedAsset>();
|
||||
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()
|
||||
{
|
||||
@@ -118,7 +155,7 @@ namespace XED.Asset
|
||||
bool isPointerOutScrollRect = !assetScrollRect.IsPointerOverScrollRect();
|
||||
if (item != null && isPointerOutScrollRect)
|
||||
{
|
||||
assetCommandHandler.CreateConnectedAsset();
|
||||
CreateConnectedAsset();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -129,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);
|
||||
|
||||
70
Assets/Scripts/Studio/AssetTool/RemoveObjectCommand.cs
Normal file
70
Assets/Scripts/Studio/AssetTool/RemoveObjectCommand.cs
Normal file
@@ -0,0 +1,70 @@
|
||||
using System.Collections.Generic;
|
||||
using XED.Asset;
|
||||
using XED.HierarchyTree;
|
||||
|
||||
namespace XED.Command
|
||||
{
|
||||
public class RemoveObjectCommand : IReversibleCommand
|
||||
{
|
||||
private List<ConnectedAsset> removeList;
|
||||
private List<int> siblingIndex;
|
||||
private CustomAssetConnector connector;
|
||||
|
||||
public RemoveObjectCommand(List<ConnectedAsset> removeList, List<int> 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<HierarchyItem> 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<HierarchyItem> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 712363d28f807c946a7689ecb0137ea3
|
||||
@@ -3,6 +3,5 @@ namespace XED.Command
|
||||
public interface IReversibleCommand : ICommand
|
||||
{
|
||||
public abstract void Undo();
|
||||
public abstract void Redo();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user