CombinedResultEditor.cs 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEditor;
  5. using System;
  6. namespace LunarCatsStudio.SuperCombiner
  7. {
  8. /// <summary>
  9. /// Combined result editor.
  10. /// </summary>
  11. [CustomEditor(typeof(CombinedResult))]
  12. public class CombinedResultEditor : UnityEditor.Editor {
  13. Vector2 pos_log;
  14. // Reference to the SuperCombiner script
  15. private CombinedResult _combinedResult;
  16. /// <summary>
  17. /// Raises the enable event.
  18. /// </summary>
  19. private void OnEnable()
  20. {
  21. _combinedResult = (CombinedResult)target;
  22. }
  23. /// <summary>
  24. /// Raises the inspector GUI event.
  25. /// </summary>
  26. public override void OnInspectorGUI()
  27. {
  28. GUI.enabled = false;
  29. DisplayStats();
  30. DisplayCombinedMaterial();
  31. DisplayCombinedMeshResults();
  32. GUI.enabled = true;
  33. DisplayLogs();
  34. }
  35. /// <summary>
  36. /// Display the combined mesh result section
  37. /// </summary>
  38. private void DisplayCombinedMeshResults()
  39. {
  40. GUILayout.Label("Combined meshes", EditorStyles.whiteBoldLabel);
  41. if(_combinedResult._meshResults.Count > 0)
  42. {
  43. _combinedResult._showCombinedMeshes = EditorGUILayout.Foldout(_combinedResult._showCombinedMeshes, "Combined meshes (" + _combinedResult._meshResults.Count + ")");
  44. if (_combinedResult._showCombinedMeshes)
  45. {
  46. EditorGUILayout.BeginVertical(EditorStyles.helpBox);
  47. for (int i = 0; i < _combinedResult._meshResults.Count; i++)
  48. {
  49. _combinedResult._meshResults[i].showMeshCombined = EditorGUILayout.Foldout(_combinedResult._meshResults[i].showMeshCombined, "Combined mesh " + i + " (" + _combinedResult._meshResults[i].names.Count + ")");
  50. if(_combinedResult._meshResults[i].showMeshCombined)
  51. {
  52. EditorGUILayout.BeginVertical(EditorStyles.helpBox);
  53. for (int j = 0; j < _combinedResult._meshResults[i].names.Count; j++)
  54. {
  55. _combinedResult._meshResults[i].indexes[j].showCombinedInstanceIndex = EditorGUILayout.Foldout(_combinedResult._meshResults[i].indexes[j].showCombinedInstanceIndex, "source object " + j + ": " + _combinedResult._meshResults[i].names[j] + "");
  56. if(_combinedResult._meshResults[i].indexes[j].showCombinedInstanceIndex)
  57. {
  58. EditorGUILayout.TextField("name", _combinedResult._meshResults[i].names[j]);
  59. EditorGUILayout.IntField("instance Id", _combinedResult._meshResults[i].instanceIds[j]);
  60. EditorGUILayout.IntField("first vertex _index", _combinedResult._meshResults[i].indexes[j].firstVertexIndex);
  61. EditorGUILayout.IntField("vertex count", _combinedResult._meshResults[i].indexes[j].vertexCount);
  62. EditorGUILayout.IntField("first triangle _index", _combinedResult._meshResults[i].indexes[j].firstTriangleIndex);
  63. EditorGUILayout.IntField("triangle count", _combinedResult._meshResults[i].indexes[j].triangleCount);
  64. }
  65. }
  66. EditorGUILayout.EndVertical();
  67. }
  68. }
  69. EditorGUILayout.EndVertical();
  70. }
  71. } else
  72. {
  73. GUILayout.Label("No mesh were combined", EditorStyles.wordWrappedLabel);
  74. }
  75. }
  76. /// <summary>
  77. /// Display the general stat section
  78. /// </summary>
  79. private void DisplayStats()
  80. {
  81. // Display settings sections
  82. GUILayout.Label("General information", EditorStyles.whiteBoldLabel);
  83. EditorGUILayout.LabelField(_combinedResult._materialCombinedCount + " materials were combined");
  84. EditorGUILayout.LabelField(_combinedResult._meshesCombinedCount + " meshes were combined");
  85. EditorGUILayout.LabelField(_combinedResult._skinnedMeshesCombinedCount + " skinnedMeshes were combined");
  86. EditorGUILayout.LabelField(_combinedResult._subMeshCount + " subMeshes were found");
  87. EditorGUILayout.LabelField(_combinedResult._totalVertexCount + " vertices where combined");
  88. //EditorGUILayout.LabelField("All combined in " + _combinedResult._duration);
  89. EditorGUILayout.Space();
  90. }
  91. /// <summary>
  92. /// Display combine process logs
  93. /// </summary>
  94. private void DisplayLogs()
  95. {
  96. // logs sections
  97. GUI.enabled = false;
  98. _combinedResult._showLogs = EditorGUILayout.Foldout(_combinedResult._showLogs, "Combine Process Logs");
  99. GUI.enabled = true;
  100. if (_combinedResult._showLogs)
  101. {
  102. pos_log = EditorGUILayout.BeginScrollView(pos_log, true, true);
  103. GUI.enabled = false;
  104. // Carefull here if logs are too long
  105. EditorGUILayout.TextArea(_combinedResult._logs, GUILayout.ExpandHeight(true));
  106. GUI.enabled = true;
  107. EditorGUILayout.EndScrollView();
  108. }
  109. EditorGUILayout.Space();
  110. }
  111. /// <summary>
  112. /// Display the combined _material section
  113. /// </summary>
  114. private void DisplayCombinedMaterial()
  115. {
  116. GUILayout.Label("Combined _material(s)", EditorStyles.whiteBoldLabel);
  117. _combinedResult._showCombinedMaterials = EditorGUILayout.Foldout(_combinedResult._showCombinedMaterials, "Combined materials (" + _combinedResult._combinedMaterialCount + ")");
  118. if (_combinedResult._showCombinedMaterials)
  119. {
  120. EditorGUILayout.BeginVertical(EditorStyles.helpBox);
  121. for (int i = 0; i < _combinedResult._combinedMaterials.Count; i++)
  122. {
  123. if (_combinedResult._combinedMaterials[i].material != null)
  124. {
  125. _combinedResult._combinedMaterials[i].showCombinedMaterial = EditorGUILayout.Foldout(_combinedResult._combinedMaterials[i].showCombinedMaterial, "Combined _material " + _combinedResult._combinedMaterials[i].displayedIndex);
  126. if (_combinedResult._combinedMaterials[i].showCombinedMaterial)
  127. {
  128. EditorGUILayout.BeginVertical(EditorStyles.helpBox);
  129. // Show combined _material
  130. EditorGUILayout.ObjectField("Material " + _combinedResult._combinedMaterials[i].displayedIndex, _combinedResult._combinedMaterials[i].material, typeof(Material), true);
  131. // Show UVs
  132. _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"));
  133. if (_combinedResult._combinedMaterials[i].showUVs)
  134. {
  135. for (int j = 0; j < _combinedResult._combinedMaterials[i].uvs.Length; j++)
  136. {
  137. EditorGUILayout.RectField("uv[" + j + "]", _combinedResult._combinedMaterials[i].uvs[j]);
  138. }
  139. }
  140. // Show mesh uv bounds
  141. _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."));
  142. if (_combinedResult._combinedMaterials[i].showMeshUVBounds)
  143. {
  144. for (int j = 0; j < _combinedResult._combinedMaterials[i].meshUVBounds.Count; j++)
  145. {
  146. EditorGUILayout.RectField("bound[" + j + "]", _combinedResult._combinedMaterials[i].meshUVBounds[j]);
  147. }
  148. }
  149. EditorGUILayout.EndVertical();
  150. }
  151. }
  152. }
  153. EditorGUILayout.EndVertical();
  154. }
  155. }
  156. }
  157. }