using System; using System.Collections.Generic; using UnityEngine; using UnityEditor; using qtools.qhierarchy.pcomponent.pbase; using qtools.qhierarchy.pdata; using qtools.qhierarchy.phelper; namespace qtools.qhierarchy.pcomponent { public class QMonoBehaviorIconComponent: QBaseComponent { // CONST private const float TREE_STEP_WIDTH = 14.0f; private const float TREE_STEP_HEIGHT = 16.0f; // PRIVATE private Texture2D monoBehaviourIconTexture; private Texture2D monoBehaviourIconParentTexture; private bool ignoreUnityMonobehaviour; // CONSTRUCTOR public QMonoBehaviorIconComponent() { monoBehaviourIconTexture = QResources.getInstance().getTexture(QTexture.QMonoBehaviourIcon); monoBehaviourIconParentTexture = QResources.getInstance().getTexture(QTexture.QMonoBehaviourIconParent); QSettings.getInstance().addEventListener(QSetting.IgnoreUnityMonobehaviour, settingsChanged); QSettings.getInstance().addEventListener(QSetting.ShowMonoBehaviourIconComponent, settingsChanged); QSettings.getInstance().addEventListener(QSetting.ShowMonoBehaviourIconComponentDuringPlayMode, settingsChanged); settingsChanged(); } // PRIVATE private void settingsChanged() { ignoreUnityMonobehaviour = QSettings.getInstance().get(QSetting.IgnoreUnityMonobehaviour); enabled = QSettings.getInstance().get(QSetting.ShowMonoBehaviourIconComponent); showComponentDuringPlayMode = QSettings.getInstance().get(QSetting.ShowMonoBehaviourIconComponentDuringPlayMode); EditorApplication.RepaintHierarchyWindow(); } public override void draw(GameObject gameObject, QObjectList objectList, Rect selectionRect, Rect curRect) { bool foundCustomComponent = false; if (ignoreUnityMonobehaviour) { Component[] components = gameObject.GetComponents(); for (int i = components.Length - 1; i >= 0; i--) { if (components[i] != null && !components[i].GetType().FullName.Contains("UnityEngine")) { foundCustomComponent = true; break; } } } else { foundCustomComponent = gameObject.GetComponent() != null; } if (foundCustomComponent) { int ident = Mathf.FloorToInt(selectionRect.x / TREE_STEP_WIDTH) - 1; curRect.x = 1 + ident * TREE_STEP_WIDTH; curRect.y = selectionRect.y; curRect.width = TREE_STEP_WIDTH; curRect.height = selectionRect.height; GUI.DrawTexture(curRect, gameObject.transform.childCount > 0 ? monoBehaviourIconParentTexture : monoBehaviourIconTexture); } } } }