少年修仙传客户端基础资源
dabaoji
2025-06-09 8ee0256378cbf5dbc9d76ed10b60b65a844ef4dd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using qtools.qhierarchy.pcomponent.pbase;
using qtools.qhierarchy.pdata;
 
namespace qtools.qhierarchy.pcomponent
{
    public class QVerticesAndTrianglesCountComponent: QBaseComponent
    {
        // PRIVATE
        private GUIStyle labelStyle;
        private Color verticesLabelColor;
        private Color trianglesLabelColor;
        private bool calculateTotalCount;
        private bool showTrianglesCount;
        private bool showVerticesCount;
        private QHierarchySize labelSize;
 
        // CONSTRUCTOR
        public QVerticesAndTrianglesCountComponent ()
        {
            labelStyle = new GUIStyle();            
            labelStyle.clipping = TextClipping.Clip;  
            labelStyle.alignment = TextAnchor.MiddleRight;
 
            QSettings.getInstance().addEventListener(QSetting.VerticesAndTrianglesShow                  , settingsChanged);
            QSettings.getInstance().addEventListener(QSetting.VerticesAndTrianglesShowDuringPlayMode    , settingsChanged);
            QSettings.getInstance().addEventListener(QSetting.VerticesAndTrianglesCalculateTotalCount   , settingsChanged);
            QSettings.getInstance().addEventListener(QSetting.VerticesAndTrianglesShowTriangles         , settingsChanged);
            QSettings.getInstance().addEventListener(QSetting.VerticesAndTrianglesShowVertices          , settingsChanged);
            QSettings.getInstance().addEventListener(QSetting.VerticesAndTrianglesLabelSize             , settingsChanged);
            QSettings.getInstance().addEventListener(QSetting.VerticesAndTrianglesVerticesLabelColor    , settingsChanged);
            QSettings.getInstance().addEventListener(QSetting.VerticesAndTrianglesTrianglesLabelColor   , settingsChanged);
 
            settingsChanged();
        }
 
        // PRIVATE
        private void settingsChanged()
        {
            enabled                     = QSettings.getInstance().get<bool>(QSetting.VerticesAndTrianglesShow);
            showComponentDuringPlayMode = QSettings.getInstance().get<bool>(QSetting.VerticesAndTrianglesShowDuringPlayMode);
            calculateTotalCount         = QSettings.getInstance().get<bool>(QSetting.VerticesAndTrianglesCalculateTotalCount);
            showTrianglesCount          = QSettings.getInstance().get<bool>(QSetting.VerticesAndTrianglesShowTriangles);
            showVerticesCount           = QSettings.getInstance().get<bool>(QSetting.VerticesAndTrianglesShowVertices);
            verticesLabelColor          = QSettings.getInstance().getColor(QSetting.VerticesAndTrianglesVerticesLabelColor);
            trianglesLabelColor         = QSettings.getInstance().getColor(QSetting.VerticesAndTrianglesTrianglesLabelColor);
            labelSize                   = (QHierarchySize)QSettings.getInstance().get<int>(QSetting.VerticesAndTrianglesLabelSize);
 
            #if UNITY_2019_1_OR_NEWER
                labelStyle.fontSize = labelSize == QHierarchySize.Big ? 7 : 6;
                rect.width = labelSize == QHierarchySize.Big ? 24 : 22;
            #else
                labelStyle.fontSize = labelSize == QHierarchySize.Big ? 9 : 8;
                rect.width = labelSize == QHierarchySize.Big ? 33 : 25;
            #endif
        }   
 
        // 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;
                #if UNITY_2019_1_OR_NEWER                
                    rect.y += labelSize == QHierarchySize.Big ? 2 : 1;
                #endif
                return QLayoutStatus.Success;
            }
        }
        
        public override void draw(GameObject gameObject, QObjectList objectList, Rect selectionRect)
        {  
            int vertexCount = 0;
            int triangleCount = 0;
 
            MeshFilter[] meshFilterArray = calculateTotalCount ? gameObject.GetComponentsInChildren<MeshFilter>(true) : gameObject.GetComponents<MeshFilter>();
            for (int i = 0; i < meshFilterArray.Length; i++)
            {
                Mesh sharedMesh = meshFilterArray[i].sharedMesh;
                if (sharedMesh != null)
                {
                    if (showVerticesCount) vertexCount += sharedMesh.vertexCount;
                    if (showTrianglesCount) triangleCount += sharedMesh.triangles.Length;
                }
            }
 
            SkinnedMeshRenderer[] skinnedMeshRendererArray = calculateTotalCount ? gameObject.GetComponentsInChildren<SkinnedMeshRenderer>(true) : gameObject.GetComponents<SkinnedMeshRenderer>();
            for (int i = 0; i < skinnedMeshRendererArray.Length; i++)
            {
                Mesh sharedMesh = skinnedMeshRendererArray[i].sharedMesh;
                if (sharedMesh != null)
                {   
                    if (showVerticesCount) vertexCount += sharedMesh.vertexCount;
                    if (showTrianglesCount) triangleCount += sharedMesh.triangles.Length;
                }
            }
 
            triangleCount /= 3;
 
            if (vertexCount > 0 || triangleCount > 0)
            {
                if (showTrianglesCount && showVerticesCount) 
                {
                    rect.y -= 4;
                    labelStyle.normal.textColor = verticesLabelColor;
                    EditorGUI.LabelField(rect, getCountString(vertexCount), labelStyle);
 
                    rect.y += 8;
                    labelStyle.normal.textColor = trianglesLabelColor;
                    EditorGUI.LabelField(rect, getCountString(triangleCount), labelStyle);
                }
                else if (showVerticesCount)
                {
                    labelStyle.normal.textColor = verticesLabelColor;
                    EditorGUI.LabelField(rect, getCountString(vertexCount), labelStyle);
                }
                else
                {
                    labelStyle.normal.textColor = trianglesLabelColor;
                    EditorGUI.LabelField(rect, getCountString(triangleCount), labelStyle);
                }
            }
        }
 
        // PRIVATE
        private string getCountString(int count)
        {
            if (count < 1000) return count.ToString();
            else if (count < 1000000) 
            {
                if (count > 100000) return (count / 1000.0f).ToString("0") + "k";
                else return (count / 1000.0f).ToString("0.0") + "k";
            }
            else 
            {
                if (count > 10000000) return (count / 1000.0f).ToString("0") + "M";
                else return (count / 1000000.0f).ToString("0.0") + "M";
            }
        }
    }
}