| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | using System;using System.Collections.Generic;using System.Text;using UnityEditor;using UnityEngine;namespace EnhancedHierarchy.Icons {    public sealed class MonoBehaviourIcon : IconBase {        private static readonly Dictionary<Type, string> monoBehaviourNames = new Dictionary<Type, string>();        private static readonly StringBuilder goComponents = new StringBuilder(500);        private static readonly GUIContent tempTooltipContent = new GUIContent();        private static bool hasMonoBehaviour;        public override string Name { get { return "MonoBehaviour Icon"; } }        public override float Width { get { return hasMonoBehaviour ? 15f : 0f; } }        public override IconPosition Side { get { return IconPosition.All; } }        public override Texture2D PreferencesPreview { get { return AssetPreview.GetMiniTypeThumbnail(typeof(MonoScript)); } }        //public override string PreferencesTooltip { get { return "Some tag for the tooltip here"; } }        public override void Init() {            hasMonoBehaviour = false;            if (!EnhancedHierarchy.IsGameObject)                return;            var components = EnhancedHierarchy.Components;            for (var i = 0; i < components.Count; i++)                if (components[i] is MonoBehaviour) {                    hasMonoBehaviour = true;                    break;                }        }        public override void DoGUI(Rect rect) {            if (!EnhancedHierarchy.IsRepaintEvent || !EnhancedHierarchy.IsGameObject || !hasMonoBehaviour)                return;            if (Utility.ShouldCalculateTooltipAt(rect) && Preferences.Tooltips) {                goComponents.Length = 0;                var components = EnhancedHierarchy.Components;                for (var i = 0; i < components.Count; i++)                    if (components[i] is MonoBehaviour)                        goComponents.AppendLine(GetComponentName(components[i]));                tempTooltipContent.tooltip = goComponents.ToString().TrimEnd('\n', '\r');            } else                tempTooltipContent.tooltip = string.Empty;            rect.yMin += 1f;            rect.yMax -= 1f;            rect.xMin += 1f;            GUI.DrawTexture(rect, Styles.monobehaviourIconTexture, ScaleMode.ScaleToFit);            EditorGUI.LabelField(rect, tempTooltipContent);        }        private static string GetComponentName(Component component) {            string result;            var type = component.GetType();            if (monoBehaviourNames.TryGetValue(type, out result))                return result;            else                return monoBehaviourNames[type] = type.ToString();        }    }}
 |