77 lines
2.5 KiB
C#
77 lines
2.5 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
namespace BrewMonster.PerfectWorld.Scripts.Task.UI
|
|
{
|
|
public class TaskTreeView : MonoBehaviour
|
|
{
|
|
[SerializeField] private TaskTreeViewItem m_pTreeViewItemPrefab;
|
|
|
|
private TaskTreeViewItem[] m_aTreeViewItems;
|
|
|
|
|
|
|
|
public void SetItemData(TaskTreeViewItem item, uint taskType)
|
|
{
|
|
item.SetItemData(taskType);
|
|
}
|
|
|
|
public uint GetItemData(TaskTreeViewItem item)
|
|
{
|
|
return item.GetItemData();
|
|
}
|
|
|
|
public TaskTreeViewItem GetNextSiblingItem(TaskTreeViewItem item)
|
|
{
|
|
|
|
if (m_aTreeViewItems == null)
|
|
{
|
|
m_aTreeViewItems = GetComponentsInChildren<TaskTreeViewItem>();
|
|
}
|
|
|
|
for (int i = 0; i < m_aTreeViewItems.Length - 1; i++)
|
|
{
|
|
if (m_aTreeViewItems[i] == item)
|
|
{
|
|
return m_aTreeViewItems[i + 1];
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public TaskTreeViewItem InsertItem(string text, TaskTreeViewItem pParent, TaskTreeViewItem pAfter)
|
|
{
|
|
// Create a new item GameObject and component
|
|
TaskTreeViewItem pItem = Instantiate(m_pTreeViewItemPrefab);
|
|
GameObject go = pItem.gameObject;
|
|
if (pItem == null) return null;
|
|
|
|
// Parent: root (this) if null; otherwise under given parent item
|
|
var parentTransform = (pParent != null ? pParent.transform : this.transform);
|
|
go.transform.SetParent(parentTransform, false);
|
|
|
|
// Set sibling position: after specific item if provided; otherwise append to end
|
|
if (pAfter != null && pAfter.transform.parent == parentTransform)
|
|
{
|
|
int afterIndex = pAfter.transform.GetSiblingIndex();
|
|
go.transform.SetSiblingIndex(afterIndex + 1);
|
|
}
|
|
else
|
|
{
|
|
go.transform.SetAsLastSibling();
|
|
}
|
|
|
|
// Optionally set label text if a TMP_Text is attached under the item (not required here)
|
|
// var label = go.GetComponentInChildren<TMPro.TMP_Text>(true);
|
|
// if (label != null) label.text = text ?? string.Empty;
|
|
pItem.SetItemText(text);
|
|
|
|
// Refresh local cache of items
|
|
m_aTreeViewItems = GetComponentsInChildren<TaskTreeViewItem>();
|
|
|
|
return pItem;
|
|
}
|
|
}
|
|
} |