MeshInspector.cs 5.3 KB

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