lh/20250305_merge #6
1092
Assets/Resources/Prefabs/UI/PRF_TreeItem.prefab
Normal file
1092
Assets/Resources/Prefabs/UI/PRF_TreeItem.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Resources/Prefabs/UI/PRF_TreeItem.prefab.meta
Normal file
7
Assets/Resources/Prefabs/UI/PRF_TreeItem.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9864e9f028e578f44a4f6f29cbe44ae0
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/legacy.meta
Normal file
8
Assets/legacy.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c04ed7ceb0169454a8af4113cec522c4
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/legacy/Scripts.meta
Normal file
8
Assets/legacy/Scripts.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a7c7d3c156415e34fa2a225d94bbca75
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
194
Assets/legacy/Scripts/HierarchyTree.cs
Normal file
194
Assets/legacy/Scripts/HierarchyTree.cs
Normal file
@@ -0,0 +1,194 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.PlayerLoop;
|
||||||
|
using XRLib;
|
||||||
|
|
||||||
|
namespace XED
|
||||||
|
{
|
||||||
|
public class HierarchyTree : MonoBehaviour, ISingle
|
||||||
|
{
|
||||||
|
public event Action<TreeItem_> onAddEvent;
|
||||||
|
public event Action<TreeItem_> onSelectEvent;
|
||||||
|
public event Action<TwinObject> onRemoveEvent;
|
||||||
|
public event Action<TreeItem_> onDeselectEvent;
|
||||||
|
public event Action<List<TreeItem_>> onDataUpdate;
|
||||||
|
|
||||||
|
HashSet<TreeItem_> tempHashSet = new();
|
||||||
|
|
||||||
|
HashSet<TwinObject> rootObjects = new();
|
||||||
|
List<TreeItem_> data = new List<TreeItem_>();
|
||||||
|
Dictionary<TwinObject, TreeItem_> twinToItem = new Dictionary<TwinObject, TreeItem_>();
|
||||||
|
|
||||||
|
TreeItem_ CreateItem(TwinObject to)
|
||||||
|
{
|
||||||
|
TreeItem_ item = new TreeItem_(to);
|
||||||
|
data.Add(item);
|
||||||
|
twinToItem.Add(to, item);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool isExist(TwinObject to)
|
||||||
|
{
|
||||||
|
return rootObjects.Contains(to);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Add(TwinObject to)
|
||||||
|
{
|
||||||
|
if (!rootObjects.Add(to))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (to is Wall)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var item = CreateItem(to);
|
||||||
|
onAddEvent?.Invoke(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Remove(TwinObject to)
|
||||||
|
{
|
||||||
|
if (!rootObjects.Contains(to))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
GetChilds(twinToItem[to]);
|
||||||
|
foreach (var item in tempHashSet)
|
||||||
|
{
|
||||||
|
switch (item.ToItem)
|
||||||
|
{
|
||||||
|
case WallGroup wg:
|
||||||
|
foreach (var items in wg.groupWalls)
|
||||||
|
{
|
||||||
|
rootObjects.Remove(items);
|
||||||
|
}
|
||||||
|
rootObjects.Remove(wg);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
rootObjects.Remove(item.ToItem);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
item.parent?.RemoveChild(item);
|
||||||
|
onRemoveEvent?.Invoke(item.ToItem);
|
||||||
|
item.DestroyTreeItem();
|
||||||
|
data.Remove(item);
|
||||||
|
twinToItem.Remove(item.ToItem);
|
||||||
|
Destroy(item.ToItem.gameObject);
|
||||||
|
}
|
||||||
|
tempHashSet.Clear();
|
||||||
|
onDataUpdate(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GetChilds(TreeItem_ go)
|
||||||
|
{
|
||||||
|
tempHashSet.Add(go);
|
||||||
|
foreach (var c in go.children)
|
||||||
|
{
|
||||||
|
GetChilds(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Attach(TreeItem_ p, TreeItem_ t)
|
||||||
|
{
|
||||||
|
if (!data.Contains(p))
|
||||||
|
{
|
||||||
|
Debug.LogError("Parent not found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!data.Contains(t))
|
||||||
|
{
|
||||||
|
Debug.LogError("Child not found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (p == t)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
GetChilds(t);
|
||||||
|
foreach (var item in tempHashSet)
|
||||||
|
{
|
||||||
|
if (p.parent == item)
|
||||||
|
{
|
||||||
|
Debug.LogError("It is infinite");
|
||||||
|
tempHashSet.Clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
t.parent?.RemoveChild(t);
|
||||||
|
p.Add(t);
|
||||||
|
t.parent = p;
|
||||||
|
data.Remove(t);
|
||||||
|
var index = data.IndexOf(p) + 1;
|
||||||
|
if (index >= data.Count)
|
||||||
|
{
|
||||||
|
if (tempHashSet.Count > 1)
|
||||||
|
{
|
||||||
|
foreach (var item in tempHashSet)
|
||||||
|
{
|
||||||
|
data?.Remove(item);
|
||||||
|
data.Add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
data.Add(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
if (tempHashSet.Count > 1)
|
||||||
|
{
|
||||||
|
foreach (var item in tempHashSet)
|
||||||
|
{
|
||||||
|
data?.Remove(item);
|
||||||
|
data.Insert(index + i, item);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
data.Insert(index, t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tempHashSet.Clear();
|
||||||
|
onDataUpdate(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dettach(TreeItem_ item)
|
||||||
|
{
|
||||||
|
if (!data.Contains(item))
|
||||||
|
{
|
||||||
|
Debug.LogError("Not found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
item.parent?.RemoveChild(item);
|
||||||
|
item.parent = null;
|
||||||
|
GetChilds(item);
|
||||||
|
foreach (var i in tempHashSet)
|
||||||
|
{
|
||||||
|
data?.Remove(i);
|
||||||
|
data.Add(i);
|
||||||
|
}
|
||||||
|
tempHashSet.Clear();
|
||||||
|
onDataUpdate(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void Select(TwinObject to)
|
||||||
|
{
|
||||||
|
onSelectEvent?.Invoke(twinToItem[to]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Select(TreeItem_ ti)
|
||||||
|
{
|
||||||
|
onSelectEvent?.Invoke(ti);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void Deselect(TwinObject to)
|
||||||
|
{
|
||||||
|
onDeselectEvent?.Invoke(twinToItem[to]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/legacy/Scripts/HierarchyTree.cs.meta
Normal file
2
Assets/legacy/Scripts/HierarchyTree.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 400f59e21429ab5409c7c43eef737e6f
|
||||||
195
Assets/legacy/Scripts/Panel_Hierarchy.cs
Normal file
195
Assets/legacy/Scripts/Panel_Hierarchy.cs
Normal file
@@ -0,0 +1,195 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices.Expando;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.EventSystems;
|
||||||
|
using UnityEngine.SubsystemsImplementation;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
using XRLib;
|
||||||
|
using XRLib.UI;
|
||||||
|
using XED.UI;
|
||||||
|
|
||||||
|
namespace XED
|
||||||
|
{
|
||||||
|
public class Panel_Hierarchy : PanelBase,IDropHandler
|
||||||
|
{
|
||||||
|
public ScrollRect scrollrect_hierarchycontent;
|
||||||
|
public UI_HierarchyItem prf_hierarchyitem;
|
||||||
|
|
||||||
|
internal Action<TwinObject> onClickItem;
|
||||||
|
internal Action<TreeItem_> onItemDrop;
|
||||||
|
internal Action<TreeItem_, TreeItem_> OnItemDropOnItem;
|
||||||
|
|
||||||
|
private Dictionary<TreeItem_, UI_HierarchyItem> itemToView = new();
|
||||||
|
private Dictionary<UI_HierarchyItem, TreeItem_> viewToItem = new();
|
||||||
|
HashSet<TreeItem_> tempHashSet = new();
|
||||||
|
|
||||||
|
public float tap = 30f;
|
||||||
|
|
||||||
|
enum AnimationParameter
|
||||||
|
{
|
||||||
|
Contract
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void AfterAwake()
|
||||||
|
{
|
||||||
|
prf_hierarchyitem = Resources.Load<UI_HierarchyItem>("Prefabs/UI/PRF_TreeItem");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnDrop(PointerEventData eventData)
|
||||||
|
{
|
||||||
|
if (eventData.pointerDrag != null)
|
||||||
|
{
|
||||||
|
UI_HierarchyItem draggeditem = eventData.pointerDrag.GetComponent<UI_HierarchyItem>();
|
||||||
|
if (draggeditem)
|
||||||
|
{
|
||||||
|
var item = viewToItem[draggeditem];
|
||||||
|
onItemDrop(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void HierarchyExpand(bool value)
|
||||||
|
{
|
||||||
|
GetComponent<Animator>().SetBool(AnimationParameter.Contract.ToString(), value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddItem(TreeItem_ item)
|
||||||
|
{
|
||||||
|
UI_HierarchyItem itemView = Instantiate(prf_hierarchyitem, scrollrect_hierarchycontent.content);
|
||||||
|
item.onExpand += Expand;
|
||||||
|
item.onFold += Fold;
|
||||||
|
itemView.Set(item);
|
||||||
|
itemView.onDestroy += RemoveItem;
|
||||||
|
itemView.onClick += OnClickItem;
|
||||||
|
|
||||||
|
UI_DragDrop_ ui_DragDrop = itemView.transform.GetComponent<UI_DragDrop_>();
|
||||||
|
ui_DragDrop.OnDropItem += ItemDrop;
|
||||||
|
|
||||||
|
viewToItem.Add(itemView, item);
|
||||||
|
itemToView.Add(item, itemView);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ItemDrop(UIBase parent, UIBase child)
|
||||||
|
{
|
||||||
|
if(parent is UI_HierarchyItem parentItem && child is UI_HierarchyItem childItem)
|
||||||
|
{
|
||||||
|
var pi = viewToItem[parentItem];
|
||||||
|
var ci = viewToItem[childItem];
|
||||||
|
OnItemDropOnItem(pi, ci);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Expand(TreeItem_ item)
|
||||||
|
{
|
||||||
|
var rootChildren = item.children;
|
||||||
|
for (int i = 0; i < rootChildren.Count; ++i)
|
||||||
|
{
|
||||||
|
var rootChild = item.children[i];
|
||||||
|
tempHashSet.Add(rootChild);
|
||||||
|
|
||||||
|
if (!rootChild.expanded)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var rootChildItem = rootChild;
|
||||||
|
for (int j = 0; j < rootChildItem.children.Count; ++j)
|
||||||
|
{
|
||||||
|
var leafChild = rootChildItem.children[j];
|
||||||
|
GetExpandTargets(leafChild);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach (var r in tempHashSet)
|
||||||
|
{
|
||||||
|
|
||||||
|
itemToView[r].gameObject.SetActive(true);
|
||||||
|
}
|
||||||
|
tempHashSet.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GetExpandTargets(TreeItem_ i)
|
||||||
|
{
|
||||||
|
tempHashSet.Add(i);
|
||||||
|
if (!i.expanded)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var children = i.children;
|
||||||
|
foreach (var item in children)
|
||||||
|
{
|
||||||
|
tempHashSet.Add(item);
|
||||||
|
GetExpandTargets(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Fold(TreeItem_ item)
|
||||||
|
{
|
||||||
|
GetFoldTargets(item);
|
||||||
|
foreach (var r in tempHashSet)
|
||||||
|
{
|
||||||
|
var view = itemToView[r];
|
||||||
|
view.SetActive(false);
|
||||||
|
}
|
||||||
|
tempHashSet.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GetFoldTargets(TreeItem_ i)
|
||||||
|
{
|
||||||
|
var children = i.children;
|
||||||
|
foreach (var item in children)
|
||||||
|
{
|
||||||
|
if (itemToView[i].gameObject.activeSelf)
|
||||||
|
{
|
||||||
|
tempHashSet.Add(item);
|
||||||
|
GetFoldTargets(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ActiveHighlightItem(TreeItem_ item)
|
||||||
|
{
|
||||||
|
if (itemToView.ContainsKey(item))
|
||||||
|
{
|
||||||
|
itemToView[item].ActiveHighlight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DeactiveHighlightItem(TreeItem_ item)
|
||||||
|
{
|
||||||
|
if (itemToView.ContainsKey(item))
|
||||||
|
{
|
||||||
|
itemToView[item].DeactvieHighlight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateIndex(List<TreeItem_> data)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < data.Count; i++)
|
||||||
|
{
|
||||||
|
var item = data[i];
|
||||||
|
var view = itemToView[item];
|
||||||
|
var depth = data[i].depth;
|
||||||
|
view.transform.SetSiblingIndex(i);
|
||||||
|
var TapRectTransform = view.transform.GetChild(0).GetComponentInChildren<RectTransform>(true);
|
||||||
|
TapRectTransform.offsetMin = new Vector2(depth * tap, TapRectTransform.offsetMin.y);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnClickItem(UI_HierarchyItem view)
|
||||||
|
{
|
||||||
|
var item = viewToItem[view];
|
||||||
|
onClickItem?.Invoke(item.ToItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveItem(UI_HierarchyItem to)
|
||||||
|
{
|
||||||
|
itemToView.Remove(viewToItem[to]);
|
||||||
|
viewToItem.Remove(to);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/legacy/Scripts/Panel_Hierarchy.cs.meta
Normal file
2
Assets/legacy/Scripts/Panel_Hierarchy.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 39734de062d30454a9ebdbf748af07ca
|
||||||
34
Assets/legacy/Scripts/Tester.cs
Normal file
34
Assets/legacy/Scripts/Tester.cs
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace XED
|
||||||
|
{
|
||||||
|
public class Tester : MonoBehaviour
|
||||||
|
{
|
||||||
|
Panel_Hierarchy ph;
|
||||||
|
HierarchyTree ht;
|
||||||
|
GameObject renderObjectPrefab;
|
||||||
|
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
ph=FindObjectOfType<Panel_Hierarchy>();
|
||||||
|
ht = FindObjectOfType<HierarchyTree>();
|
||||||
|
ht.onAddEvent += ph.AddItem;
|
||||||
|
ph.OnItemDropOnItem += ht.Attach;
|
||||||
|
ht.onDataUpdate += ph.UpdateIndex;
|
||||||
|
ph.onItemDrop += ht.Dettach;
|
||||||
|
renderObjectPrefab = Resources.Load<GameObject>("Prefabs/PRF_RenderObject");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update is called once per frame
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
if (Input.GetKeyDown(KeyCode.A))
|
||||||
|
{
|
||||||
|
var obj = Instantiate(renderObjectPrefab);
|
||||||
|
var to = obj.GetComponent<TwinObject>();
|
||||||
|
to.name = to.name.Replace("(Clone)", "");
|
||||||
|
ht.Add(to);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/legacy/Scripts/Tester.cs.meta
Normal file
2
Assets/legacy/Scripts/Tester.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2f7ab64367eb074498afe02ab1069901
|
||||||
63
Assets/legacy/Scripts/TreeItem_.cs
Normal file
63
Assets/legacy/Scripts/TreeItem_.cs
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace XED
|
||||||
|
{
|
||||||
|
public class TreeItem_
|
||||||
|
{
|
||||||
|
public TwinObject ToItem;
|
||||||
|
//public UI_HierarchyItem View;
|
||||||
|
public event Action OnDestroyTreeItem;
|
||||||
|
|
||||||
|
public int depth
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
TreeItem_ curr = parent;
|
||||||
|
int result = 0;
|
||||||
|
while (curr != null)
|
||||||
|
{
|
||||||
|
result++;
|
||||||
|
curr = curr.parent;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public List<TreeItem_> children = new List<TreeItem_>();
|
||||||
|
public TreeItem_ parent;
|
||||||
|
public bool expanded = true;
|
||||||
|
public event Action<TreeItem_> onExpand;
|
||||||
|
public event Action<TreeItem_> onFold;
|
||||||
|
|
||||||
|
public TreeItem_(TwinObject to)
|
||||||
|
{
|
||||||
|
ToItem = to;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void Add(TreeItem_ t)
|
||||||
|
{
|
||||||
|
children.Add(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void RemoveChild(TreeItem_ c)
|
||||||
|
{
|
||||||
|
children.Remove(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnExpand(bool value)
|
||||||
|
{
|
||||||
|
expanded = value;
|
||||||
|
if (value)
|
||||||
|
onExpand?.Invoke(this);
|
||||||
|
else
|
||||||
|
onFold?.Invoke(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DestroyTreeItem()
|
||||||
|
{
|
||||||
|
OnDestroyTreeItem?.Invoke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/legacy/Scripts/TreeItem_.cs.meta
Normal file
2
Assets/legacy/Scripts/TreeItem_.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 77ba20c023097c043a1b8a635d780135
|
||||||
47
Assets/legacy/Scripts/UI_DragDrop_.cs
Normal file
47
Assets/legacy/Scripts/UI_DragDrop_.cs
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.EventSystems;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
using XRLib.UI;
|
||||||
|
|
||||||
|
namespace XED
|
||||||
|
{
|
||||||
|
public class UI_DragDrop_ : MonoBehaviour,IBeginDragHandler,IDragHandler,IEndDragHandler,IDropHandler
|
||||||
|
{
|
||||||
|
GameObject Clone;
|
||||||
|
public float cloneAlpha=1f;
|
||||||
|
public Action<UIBase, UIBase> OnDropItem;
|
||||||
|
public void OnBeginDrag(PointerEventData eventData)
|
||||||
|
{
|
||||||
|
Clone=Instantiate(gameObject,gameObject.transform.parent);
|
||||||
|
Clone.GetComponent<CanvasGroup>().blocksRaycasts = false;
|
||||||
|
var CI = Clone.GetComponentsInChildren<Image>();
|
||||||
|
foreach(var c in CI)
|
||||||
|
{
|
||||||
|
c.color = new Color(c.color.r, c.color.g, c.color.b, cloneAlpha);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void OnDrag(PointerEventData eventData)
|
||||||
|
{
|
||||||
|
Clone.transform.position = Input.mousePosition;
|
||||||
|
}
|
||||||
|
public void OnEndDrag(PointerEventData eventData)
|
||||||
|
{
|
||||||
|
Destroy(Clone);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnDrop(PointerEventData eventData)
|
||||||
|
{
|
||||||
|
if (eventData.pointerDrag != null)
|
||||||
|
{
|
||||||
|
UI_DragDrop_ draggedItem = eventData.pointerDrag.GetComponent<UI_DragDrop_>();
|
||||||
|
if (draggedItem)
|
||||||
|
{
|
||||||
|
OnDropItem?.Invoke(gameObject.GetComponent<UIBase>(), draggedItem.GetComponent<UIBase>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/legacy/Scripts/UI_DragDrop_.cs.meta
Normal file
2
Assets/legacy/Scripts/UI_DragDrop_.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9e3cc64011e8dbe428cf3fe9304f9a9a
|
||||||
68
Assets/legacy/Scripts/UI_HierarchyItem.cs
Normal file
68
Assets/legacy/Scripts/UI_HierarchyItem.cs
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using TMPro;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
using XRLib;
|
||||||
|
using XRLib.UI;
|
||||||
|
|
||||||
|
namespace XED
|
||||||
|
{
|
||||||
|
public class UI_HierarchyItem : UIBase
|
||||||
|
{
|
||||||
|
public Button button_selectitem;
|
||||||
|
public event Action<UI_HierarchyItem> onClick;
|
||||||
|
public event Action<UI_HierarchyItem> onDestroy;
|
||||||
|
|
||||||
|
|
||||||
|
// Start is called before the first frame update
|
||||||
|
public void Set(TreeItem_ Treeitem)
|
||||||
|
{
|
||||||
|
var item = Treeitem;
|
||||||
|
var toitem = Treeitem.ToItem;
|
||||||
|
item.OnDestroyTreeItem += DestroyItemView;
|
||||||
|
|
||||||
|
TextMeshProUGUI text_name = Find<TextMeshProUGUI>(nameof(text_name));
|
||||||
|
text_name.SetText(toitem.name);
|
||||||
|
|
||||||
|
Toggle toggle_display = Find<Toggle>(nameof(toggle_display));
|
||||||
|
toggle_display.onValueChanged.AddListener(toitem.SetDisplayable);
|
||||||
|
|
||||||
|
Toggle toggle_interactible = Find<Toggle>(nameof(toggle_interactible));
|
||||||
|
toggle_interactible.onValueChanged.AddListener(toitem.SetInteractible);
|
||||||
|
|
||||||
|
Toggle toggle_expand = Find<Toggle>(nameof(toggle_expand));
|
||||||
|
toggle_expand.onValueChanged.AddListener(item.OnExpand);
|
||||||
|
|
||||||
|
button_selectitem = Find<Button>(nameof(button_selectitem));
|
||||||
|
button_selectitem.onClick.AddListener(OnClickItem);
|
||||||
|
|
||||||
|
toitem.IsDisplayable = !toggle_display.isOn;
|
||||||
|
toitem.IsInteractible = !toggle_interactible.isOn;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnClickItem()
|
||||||
|
{
|
||||||
|
onClick?.Invoke(this);
|
||||||
|
}
|
||||||
|
public void ActiveHighlight()
|
||||||
|
{
|
||||||
|
//var option = FindSingle<OptionManager>().hierarchyItemOption;
|
||||||
|
|
||||||
|
//button_selectitem.image.color = option.selectColor;
|
||||||
|
}
|
||||||
|
public void DeactvieHighlight()
|
||||||
|
{
|
||||||
|
//var option = FindSingle<OptionManager>().hierarchyItemOption;
|
||||||
|
|
||||||
|
//button_selectitem.image.color = option.unselectColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DestroyItemView()
|
||||||
|
{
|
||||||
|
onDestroy?.Invoke(this);
|
||||||
|
Destroy(gameObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/legacy/Scripts/UI_HierarchyItem.cs.meta
Normal file
2
Assets/legacy/Scripts/UI_HierarchyItem.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ac0660c9602721445bf58cd13e50cccd
|
||||||
1417
Assets/legacy/testscene.unity
Normal file
1417
Assets/legacy/testscene.unity
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/legacy/testscene.unity.meta
Normal file
7
Assets/legacy/testscene.unity.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 08e9e86ff4c52cb448493fbb4dd1d30a
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Reference in New Issue
Block a user