Files
2026-02-21 16:45:37 +08:00

142 lines
3.6 KiB
C#

using LE_LevelEditor.Core;
using MyUtility;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace LE_LevelEditor.UI
{
public class LE_ObjectPrefabNode : MonoBehaviour, IScrollHandler, IEventSystemHandler
{
public class SendMessageInitData
{
public readonly LE_Object m_object;
public readonly int m_indentLevel;
public SendMessageInitData(LE_Object p_object, int p_indentLevel)
{
m_object = p_object;
m_indentLevel = p_indentLevel;
}
}
[SerializeField]
private Text m_text;
[SerializeField]
private RawImage m_image;
[SerializeField]
private Image m_selectionImage;
public Color selectedColor = Color.green;
private ScrollRect m_parentScroller;
public RawImage Image
{
get
{
return m_image;
}
}
public void uMyGUI_TreeBrowser_InitNode(object p_data)
{
if (m_text != null && m_image != null)
{
if (p_data is SendMessageInitData)
{
SendMessageInitData sendMessageInitData = (SendMessageInitData)p_data;
Texture2D texture2D = (Texture2D)Resources.Load(sendMessageInitData.m_object.IconPath);
if (texture2D != null)
{
m_image.texture = texture2D;
}
else
{
Debug.LogError("LE_ObjectPrefabNode: uMyGUI_TreeBrowser_InitNode: object '" + sendMessageInitData.m_object.name + "' has an invalid icon resource path! Path: '" + sendMessageInitData.m_object.IconPath + "'");
}
if (sendMessageInitData.m_object.editorName == string.Empty)
{
m_text.text = UtilityStrings.InsertSpacesIntoCamelCase(sendMessageInitData.m_object.name);
}
else
{
m_text.text = sendMessageInitData.m_object.editorName;
}
Vector2 offsetMax = m_text.rectTransform.offsetMax;
offsetMax.x -= (float)sendMessageInitData.m_indentLevel * 10f;
m_text.rectTransform.offsetMax = offsetMax;
}
else if (p_data is LE_ObjectCategoryNode.SendMessageInitData)
{
LE_ObjectCategoryNode.SendMessageInitData sendMessageInitData2 = (LE_ObjectCategoryNode.SendMessageInitData)p_data;
Debug.LogError("LE_ObjectPrefabNode: uMyGUI_TreeBrowser_InitNode: the category '" + sendMessageInitData2.m_categoryName + "' is empty and will not be shown correctly!");
m_image.gameObject.SetActive(false);
m_text.text = LE_ObjectCategoryNode.GetCleanCategoryName(sendMessageInitData2.m_categoryName);
}
else
{
Debug.LogError("LE_ObjectPrefabNode: uMyGUI_TreeBrowser_InitNode: expected p_data to be a LE_ObjectPrefabNode.SendMessageInitData! p_data: " + p_data);
}
}
else
{
Debug.LogError("LE_ObjectPrefabNode: uMyGUI_TreeBrowser_InitNode: m_text or m_image were not set via inspector!");
}
}
public void OnSelected()
{
LE_ObjectDragDrop componentInParent = GetComponentInParent<LE_ObjectDragDrop>();
if (componentInParent != null)
{
componentInParent.OnObjectSelected(this);
}
else
{
Debug.LogError("LE_ObjectPrefabNode: OnSelected: could not find LE_ObjectDragDrop in parents!");
}
ShowSelection();
}
public void ShowSelection()
{
if (m_selectionImage != null)
{
m_selectionImage.color = selectedColor;
}
if (m_text != null)
{
m_text.color = selectedColor;
}
}
public void HideSelection()
{
if (m_selectionImage != null)
{
m_selectionImage.color = Color.white;
}
if (m_text != null)
{
m_text.color = Color.white;
}
}
public void OnScroll(PointerEventData data)
{
if (m_parentScroller == null)
{
m_parentScroller = GetComponentInParent<ScrollRect>();
}
if (!(m_parentScroller == null))
{
m_parentScroller.OnScroll(data);
}
}
}
}