MeshInspector.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. using System.Collections.Generic;
  2. using BansheeEngine;
  3. namespace BansheeEditor
  4. {
  5. /// <summary>
  6. /// Renders an inspector for the <see cref="Mesh"/> resource.
  7. /// </summary>
  8. [CustomInspector(typeof(Mesh))]
  9. internal class MeshInspector : Inspector
  10. {
  11. private GUIToggleField normalsField = new GUIToggleField(new LocEdString("Import Normals"));
  12. private GUIToggleField tangentsField = new GUIToggleField(new LocEdString("Import Tangents"));
  13. private GUIToggleField skinField = new GUIToggleField(new LocEdString("Import Skin"));
  14. private GUIToggleField blendShapesField = new GUIToggleField(new LocEdString("Import Blend Shapes"));
  15. private GUIToggleField animationField = new GUIToggleField(new LocEdString("Import Animation"));
  16. private GUIFloatField scaleField = new GUIFloatField(new LocEdString("Scale"));
  17. private GUIToggleField cpuReadableField = new GUIToggleField(new LocEdString("CPU readable"));
  18. private GUIButton reimportButton = new GUIButton(new LocEdString("Reimport"));
  19. private MeshImportOptions importOptions;
  20. /// <inheritdoc/>
  21. protected internal override void Initialize()
  22. {
  23. if (referencedObject != null)
  24. {
  25. importOptions = GetImportOptions();
  26. normalsField.OnChanged += x => importOptions.ImportNormals = x;
  27. tangentsField.OnChanged += x => importOptions.ImportTangents = x;
  28. skinField.OnChanged += x => importOptions.ImportSkin = x;
  29. blendShapesField.OnChanged += x => importOptions.ImportBlendShapes = x;
  30. animationField.OnChanged += x => importOptions.ImportAnimation = x;
  31. scaleField.OnChanged += x => importOptions.Scale = x;
  32. cpuReadableField.OnChanged += x => importOptions.CPUReadable = x;
  33. reimportButton.OnClick += TriggerReimport;
  34. layout.AddElement(normalsField);
  35. layout.AddElement(tangentsField);
  36. layout.AddElement(skinField);
  37. layout.AddElement(blendShapesField);
  38. layout.AddElement(animationField);
  39. layout.AddElement(scaleField);
  40. layout.AddElement(cpuReadableField);
  41. layout.AddSpace(10);
  42. GUILayout reimportButtonLayout = layout.AddLayoutX();
  43. reimportButtonLayout.AddFlexibleSpace();
  44. reimportButtonLayout.AddElement(reimportButton);
  45. }
  46. }
  47. /// <inheritdoc/>
  48. protected internal override bool Refresh()
  49. {
  50. MeshImportOptions newImportOptions = GetImportOptions();
  51. bool anythingModified = false;
  52. if (normalsField.Value != newImportOptions.ImportNormals)
  53. {
  54. normalsField.Value = newImportOptions.ImportNormals;
  55. anythingModified = true;
  56. }
  57. if (tangentsField.Value != newImportOptions.ImportTangents)
  58. {
  59. tangentsField.Value = newImportOptions.ImportTangents;
  60. anythingModified = true;
  61. }
  62. if (skinField.Value != newImportOptions.ImportSkin)
  63. {
  64. skinField.Value = newImportOptions.ImportSkin;
  65. anythingModified = true;
  66. }
  67. if (blendShapesField.Value != newImportOptions.ImportBlendShapes)
  68. {
  69. blendShapesField.Value = newImportOptions.ImportBlendShapes;
  70. anythingModified = true;
  71. }
  72. if (animationField.Value != newImportOptions.ImportAnimation)
  73. {
  74. animationField.Value = newImportOptions.ImportAnimation;
  75. anythingModified = true;
  76. }
  77. if (scaleField.Value != newImportOptions.Scale)
  78. {
  79. scaleField.Value = newImportOptions.Scale;
  80. anythingModified = true;
  81. }
  82. if (cpuReadableField.Value != newImportOptions.CPUReadable)
  83. {
  84. cpuReadableField.Value = newImportOptions.CPUReadable;
  85. anythingModified = true;
  86. }
  87. if (anythingModified)
  88. importOptions = newImportOptions;
  89. return anythingModified;
  90. }
  91. /// <summary>
  92. /// Retrieves import options for the mesh we're currently inspecting.
  93. /// </summary>
  94. /// <returns>Mesh import options object.</returns>
  95. private MeshImportOptions GetImportOptions()
  96. {
  97. Mesh mesh = referencedObject as Mesh;
  98. MeshImportOptions output = null;
  99. if (mesh != null)
  100. {
  101. LibraryEntry meshEntry = ProjectLibrary.GetEntry(ProjectLibrary.GetPath(mesh));
  102. if (meshEntry != null && meshEntry.Type == LibraryEntryType.File)
  103. {
  104. FileEntry meshFileEntry = (FileEntry)meshEntry;
  105. output = meshFileEntry.Options as MeshImportOptions;
  106. }
  107. }
  108. if (output == null)
  109. {
  110. if (importOptions == null)
  111. output = new MeshImportOptions();
  112. else
  113. output = importOptions;
  114. }
  115. return output;
  116. }
  117. /// <summary>
  118. /// Reimports the texture resource according to the currently set import options.
  119. /// </summary>
  120. private void TriggerReimport()
  121. {
  122. Mesh mesh = (Mesh)referencedObject;
  123. string resourcePath = ProjectLibrary.GetPath(mesh);
  124. ProjectLibrary.Reimport(resourcePath, importOptions, true);
  125. }
  126. }
  127. }