MeshInspector.cs 4.9 KB

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