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(); 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(); } if (!(m_parentScroller == null)) { m_parentScroller.OnScroll(data); } } } }