142 lines
3.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|