95 lines
2.8 KiB
C#
95 lines
2.8 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Unity.HLODSystem.Streaming;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace Unity.HLODSystem.DebugWindow
|
|
{
|
|
public class HLODItemData : ScriptableObject
|
|
{
|
|
private HLODControllerBase m_controller;
|
|
[SerializeField]
|
|
private string m_name;
|
|
private List<HLODTreeNode> m_nodes = new List<HLODTreeNode>();
|
|
[SerializeField]
|
|
private bool m_enableDebug = true;
|
|
private List<HierarchyItemData> m_hierarchyItemDatas = new List<HierarchyItemData>();
|
|
|
|
public HLODControllerBase Controller
|
|
{
|
|
get
|
|
{
|
|
return m_controller;
|
|
}
|
|
}
|
|
public List<HierarchyItemData> HierarchyItemDatas
|
|
{
|
|
get
|
|
{
|
|
return m_hierarchyItemDatas;
|
|
}
|
|
}
|
|
|
|
public void Initialize(HLODControllerBase controller)
|
|
{
|
|
Stack<HLODTreeNode> treeNodeTravelStack = new Stack<HLODTreeNode>();
|
|
Stack<string> labelStack = new Stack<string>();
|
|
|
|
m_controller = controller;
|
|
m_name = controller.gameObject.name;
|
|
|
|
treeNodeTravelStack.Push(controller.Root);
|
|
labelStack.Push("");
|
|
|
|
while (treeNodeTravelStack.Count > 0)
|
|
{
|
|
var node = treeNodeTravelStack.Pop();
|
|
var label = labelStack.Pop();
|
|
m_hierarchyItemDatas.Add(new HierarchyItemData()
|
|
{
|
|
Index = m_hierarchyItemDatas.Count,
|
|
TreeNode = node,
|
|
Label = label,
|
|
IsOpen = true,
|
|
});
|
|
m_nodes.Add(node);
|
|
|
|
for (int i = node.GetChildTreeNodeCount() - 1; i >= 0; --i)
|
|
{
|
|
treeNodeTravelStack.Push(node.GetChildTreeNode(i));
|
|
labelStack.Push($"{label}_{i+1}");
|
|
}
|
|
}
|
|
}
|
|
|
|
public void CleanUp()
|
|
{
|
|
m_controller = null;
|
|
m_nodes.Clear();
|
|
m_hierarchyItemDatas.Clear();
|
|
}
|
|
|
|
|
|
public void Render(DrawMode drawMode)
|
|
{
|
|
if (m_enableDebug == false)
|
|
return;
|
|
|
|
foreach (var node in m_nodes)
|
|
{
|
|
if (node.CurrentState == HLODTreeNode.State.Low ||
|
|
(node.CurrentState == HLODTreeNode.State.High && node.GetChildTreeNodeCount() == 0))
|
|
{
|
|
HLODTreeNodeRenderer.Instance.Render(node, Color.green, 2.0f);
|
|
}
|
|
else if (drawMode == DrawMode.All)
|
|
{
|
|
HLODTreeNodeRenderer.Instance.Render(node, Color.yellow, 1.0f);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
} |