using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System; namespace LunarCatsStudio.SuperCombiner { /// /// Combined result editor. /// [CustomEditor(typeof(CombinedResult))] public class CombinedResultEditor : UnityEditor.Editor { Vector2 pos_log; // Reference to the SuperCombiner script private CombinedResult _combinedResult; /// /// Raises the enable event. /// private void OnEnable() { _combinedResult = (CombinedResult)target; } /// /// Raises the inspector GUI event. /// public override void OnInspectorGUI() { GUI.enabled = false; DisplayStats(); DisplayCombinedMaterial(); DisplayCombinedMeshResults(); GUI.enabled = true; DisplayLogs(); } /// /// Display the combined mesh result section /// private void DisplayCombinedMeshResults() { GUILayout.Label("Combined meshes", EditorStyles.whiteBoldLabel); if(_combinedResult._meshResults.Count > 0) { _combinedResult._showCombinedMeshes = EditorGUILayout.Foldout(_combinedResult._showCombinedMeshes, "Combined meshes (" + _combinedResult._meshResults.Count + ")"); if (_combinedResult._showCombinedMeshes) { EditorGUILayout.BeginVertical(EditorStyles.helpBox); for (int i = 0; i < _combinedResult._meshResults.Count; i++) { _combinedResult._meshResults[i].showMeshCombined = EditorGUILayout.Foldout(_combinedResult._meshResults[i].showMeshCombined, "Combined mesh " + i + " (" + _combinedResult._meshResults[i].names.Count + ")"); if(_combinedResult._meshResults[i].showMeshCombined) { EditorGUILayout.BeginVertical(EditorStyles.helpBox); for (int j = 0; j < _combinedResult._meshResults[i].names.Count; j++) { _combinedResult._meshResults[i].indexes[j].showCombinedInstanceIndex = EditorGUILayout.Foldout(_combinedResult._meshResults[i].indexes[j].showCombinedInstanceIndex, "source object " + j + ": " + _combinedResult._meshResults[i].names[j] + ""); if(_combinedResult._meshResults[i].indexes[j].showCombinedInstanceIndex) { EditorGUILayout.TextField("name", _combinedResult._meshResults[i].names[j]); EditorGUILayout.IntField("instance Id", _combinedResult._meshResults[i].instanceIds[j]); EditorGUILayout.IntField("first vertex _index", _combinedResult._meshResults[i].indexes[j].firstVertexIndex); EditorGUILayout.IntField("vertex count", _combinedResult._meshResults[i].indexes[j].vertexCount); EditorGUILayout.IntField("first triangle _index", _combinedResult._meshResults[i].indexes[j].firstTriangleIndex); EditorGUILayout.IntField("triangle count", _combinedResult._meshResults[i].indexes[j].triangleCount); } } EditorGUILayout.EndVertical(); } } EditorGUILayout.EndVertical(); } } else { GUILayout.Label("No mesh were combined", EditorStyles.wordWrappedLabel); } } /// /// Display the general stat section /// private void DisplayStats() { // Display settings sections GUILayout.Label("General information", EditorStyles.whiteBoldLabel); EditorGUILayout.LabelField(_combinedResult._materialCombinedCount + " materials were combined"); EditorGUILayout.LabelField(_combinedResult._meshesCombinedCount + " meshes were combined"); EditorGUILayout.LabelField(_combinedResult._skinnedMeshesCombinedCount + " skinnedMeshes were combined"); EditorGUILayout.LabelField(_combinedResult._subMeshCount + " subMeshes were found"); EditorGUILayout.LabelField(_combinedResult._totalVertexCount + " vertices where combined"); //EditorGUILayout.LabelField("All combined in " + _combinedResult._duration); EditorGUILayout.Space(); } /// /// Display combine process logs /// private void DisplayLogs() { // logs sections GUI.enabled = false; _combinedResult._showLogs = EditorGUILayout.Foldout(_combinedResult._showLogs, "Combine Process Logs"); GUI.enabled = true; if (_combinedResult._showLogs) { pos_log = EditorGUILayout.BeginScrollView(pos_log, true, true); GUI.enabled = false; // Carefull here if logs are too long EditorGUILayout.TextArea(_combinedResult._logs, GUILayout.ExpandHeight(true)); GUI.enabled = true; EditorGUILayout.EndScrollView(); } EditorGUILayout.Space(); } /// /// Display the combined _material section /// private void DisplayCombinedMaterial() { GUILayout.Label("Combined _material(s)", EditorStyles.whiteBoldLabel); _combinedResult._showCombinedMaterials = EditorGUILayout.Foldout(_combinedResult._showCombinedMaterials, "Combined materials (" + _combinedResult._combinedMaterialCount + ")"); if (_combinedResult._showCombinedMaterials) { EditorGUILayout.BeginVertical(EditorStyles.helpBox); for (int i = 0; i < _combinedResult._combinedMaterials.Count; i++) { if (_combinedResult._combinedMaterials[i].material != null) { _combinedResult._combinedMaterials[i].showCombinedMaterial = EditorGUILayout.Foldout(_combinedResult._combinedMaterials[i].showCombinedMaterial, "Combined _material " + _combinedResult._combinedMaterials[i].displayedIndex); if (_combinedResult._combinedMaterials[i].showCombinedMaterial) { EditorGUILayout.BeginVertical(EditorStyles.helpBox); // Show combined _material EditorGUILayout.ObjectField("Material " + _combinedResult._combinedMaterials[i].displayedIndex, _combinedResult._combinedMaterials[i].material, typeof(Material), true); // Show UVs _combinedResult._combinedMaterials[i].showUVs = EditorGUILayout.Foldout(_combinedResult._combinedMaterials[i].showUVs, new GUIContent("UVs (" + _combinedResult._combinedMaterials[i].uvs.Length + ")", "Each UV rectangle below correspond to a specific location in the altas texture")); if (_combinedResult._combinedMaterials[i].showUVs) { for (int j = 0; j < _combinedResult._combinedMaterials[i].uvs.Length; j++) { EditorGUILayout.RectField("uv[" + j + "]", _combinedResult._combinedMaterials[i].uvs[j]); } } // Show mesh uv bounds _combinedResult._combinedMaterials[i].showMeshUVBounds = EditorGUILayout.Foldout(_combinedResult._combinedMaterials[i].showMeshUVBounds, new GUIContent("Mesh uv bounds (" + _combinedResult._combinedMaterials[i].meshUVBounds.Count + ")", "Each rectangle below correspond to the UV bound of the original mesh. This helps to see if meshes has UVs out of [0, 1] bounds.")); if (_combinedResult._combinedMaterials[i].showMeshUVBounds) { for (int j = 0; j < _combinedResult._combinedMaterials[i].meshUVBounds.Count; j++) { EditorGUILayout.RectField("bound[" + j + "]", _combinedResult._combinedMaterials[i].meshUVBounds[j]); } } EditorGUILayout.EndVertical(); } } } EditorGUILayout.EndVertical(); } } } }