using System; using System.Collections.Generic; using UnityEngine; using UnityEditor; using qtools.qhierarchy.pcomponent.pbase; using qtools.qhierarchy.phierarchy; using qtools.qhierarchy.phelper; using qtools.qhierarchy.pdata; namespace qtools.qhierarchy.pcomponent { public class QChildrenCountComponent: QBaseComponent { // PRIVATE private GUIStyle labelStyle; // CONSTRUCTOR public QChildrenCountComponent () { labelStyle = new GUIStyle(); labelStyle.fontSize = 9; labelStyle.clipping = TextClipping.Clip; labelStyle.alignment = TextAnchor.MiddleRight; rect.width = 22; rect.height = 16; QSettings.getInstance().addEventListener(QSetting.ChildrenCountShow , settingsChanged); QSettings.getInstance().addEventListener(QSetting.ChildrenCountShowDuringPlayMode, settingsChanged); QSettings.getInstance().addEventListener(QSetting.ChildrenCountLabelSize , settingsChanged); QSettings.getInstance().addEventListener(QSetting.ChildrenCountLabelColor , settingsChanged); settingsChanged(); } // PRIVATE private void settingsChanged() { enabled = QSettings.getInstance().get(QSetting.ChildrenCountShow); showComponentDuringPlayMode = QSettings.getInstance().get(QSetting.ChildrenCountShowDuringPlayMode); QHierarchySize labelSize = (QHierarchySize)QSettings.getInstance().get(QSetting.ChildrenCountLabelSize); labelStyle.normal.textColor = QSettings.getInstance().getColor(QSetting.ChildrenCountLabelColor); labelStyle.fontSize = labelSize == QHierarchySize.Normal ? 8 : 9; rect.width = labelSize == QHierarchySize.Normal ? 17 : 22; } // DRAW public override QLayoutStatus layout(GameObject gameObject, QObjectList objectList, Rect selectionRect, ref Rect curRect, float maxWidth) { if (maxWidth < rect.width) { return QLayoutStatus.Failed; } else { curRect.x -= rect.width + 2; rect.x = curRect.x; rect.y = curRect.y; rect.y += (EditorGUIUtility.singleLineHeight - rect.height) * 0.5f; rect.height = EditorGUIUtility.singleLineHeight; return QLayoutStatus.Success; } } public override void draw(GameObject gameObject, QObjectList objectList, Rect selectionRect) { int childrenCount = gameObject.transform.childCount; if (childrenCount > 0) GUI.Label(rect, childrenCount.ToString(), labelStyle); } } }