using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
namespace XGame.Editor.Asset.Addressable
{
///
/// 文件夹
///
public class AddressableAssetFold : AddressableAssetEntry
{
private readonly List childs;
//private bool isFoldout;
private bool isSort;
public override EntryType EnType => EntryType.Fold;
private event Action addChildrenEvent;
public event Action AddChildrenEvent
{
add { addChildrenEvent += value; }
remove { addChildrenEvent -= value; }
}
public AddressableAssetFold(string path) : base(path)
{
childs = new List();
isSort = false;
}
public void AddChild(AddressableAssetEntry entry)
{
if (entry.Parent != null && entry.Parent.Equals(this))
{
Debug.LogError($"Add Child Repeat. Parent:{Path} Child:{entry.Path}");
return;
}
childs.Add(entry);
entry.Parent = this;
isSort = true;
}
public void RemoveChild(AddressableAssetEntry entry)
{
if (childs.Contains(entry))
{
childs.Remove(entry);
}
entry.Parent = null;
}
public AddressableAssetEntry GetChild(string path)
{
return childs.Find((entry => entry.Path.Equals(path)));
}
public bool Contains(string path)
{
return childs.Find((entry => entry.Path.Equals(path))) != null;
}
///
/// 节点数量
///
public int ChildCount => childs.Count;
protected override void OnSetParent()
{
}
protected override void OnGUI()
{
EditorGUILayout.BeginVertical();
IsFoldout = EditorGUILayout.Foldout(IsFoldout, ShowName);
if (IsFoldout)
{
if (addChildrenEvent != null)
{
addChildrenEvent.Invoke();
addChildrenEvent = null;
}
if (isSort)
{
isSort = false;
childs.Sort();
}
for (int i = 0; i < childs.Count;)
{
var child = childs[i];
child.GUI();
if (child.Parent != null)
{
i++;
}
}
}
EditorGUILayout.EndVertical();
}
protected override void OnClear()
{
foreach (var child in childs)
{
child.Clear();
}
childs.Clear();
addChildrenEvent = null;
isSort = false;
}
}
}