AudioClipInspector.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. using BansheeEngine;
  4. namespace BansheeEditor
  5. {
  6. /** @addtogroup Inspectors
  7. * @{
  8. */
  9. /// <summary>
  10. /// Renders an inspector for the <see cref="AudioClip"/> resource.
  11. /// </summary>
  12. [CustomInspector(typeof(AudioClip))]
  13. internal class AudioClipInspector : Inspector
  14. {
  15. private GUIEnumField formatField = new GUIEnumField(typeof(AudioFormat), new LocEdString("Format"));
  16. private GUIEnumField readModeField = new GUIEnumField(typeof(AudioReadMode), new LocEdString("Read mode"));
  17. private GUIEnumField bitDepthField = new GUIEnumField(typeof(AudioBitDepth), new LocEdString("Bit depth"));
  18. private GUIToggleField is3DField = new GUIToggleField(new LocEdString("3D"));
  19. private GUIButton reimportButton = new GUIButton(new LocEdString("Reimport"));
  20. private AudioClipImportOptions importOptions;
  21. /// <inheritdoc/>
  22. protected internal override void Initialize()
  23. {
  24. if (InspectedObject != null)
  25. {
  26. importOptions = GetImportOptions();
  27. formatField.OnSelectionChanged += x => importOptions.Format = (AudioFormat)x;
  28. readModeField.OnSelectionChanged += x => importOptions.ReadMode = (AudioReadMode)x;
  29. bitDepthField.OnSelectionChanged += x => importOptions.BitDepth = (AudioBitDepth)x;
  30. is3DField.OnChanged += x => importOptions.Is3D = x;
  31. reimportButton.OnClick += TriggerReimport;
  32. Layout.AddElement(formatField);
  33. Layout.AddElement(readModeField);
  34. Layout.AddElement(bitDepthField);
  35. Layout.AddElement(is3DField);
  36. Layout.AddSpace(10);
  37. GUILayout reimportButtonLayout = Layout.AddLayoutX();
  38. reimportButtonLayout.AddFlexibleSpace();
  39. reimportButtonLayout.AddElement(reimportButton);
  40. }
  41. }
  42. /// <inheritdoc/>
  43. protected internal override InspectableState Refresh()
  44. {
  45. AudioClipImportOptions newImportOptions = GetImportOptions();
  46. formatField.Value = (ulong)newImportOptions.Format;
  47. readModeField.Value = (ulong)newImportOptions.ReadMode;
  48. bitDepthField.Value = (ulong)newImportOptions.BitDepth;
  49. is3DField.Value = newImportOptions.Is3D;
  50. importOptions = newImportOptions;
  51. return InspectableState.NotModified;
  52. }
  53. /// <summary>
  54. /// Retrieves import options for the audio clip we're currently inspecting.
  55. /// </summary>
  56. /// <returns>Audio clip import options object.</returns>
  57. private AudioClipImportOptions GetImportOptions()
  58. {
  59. AudioClip audioClip = InspectedObject as AudioClip;
  60. AudioClipImportOptions output = null;
  61. if (audioClip != null)
  62. {
  63. LibraryEntry meshEntry = ProjectLibrary.GetEntry(ProjectLibrary.GetPath(audioClip));
  64. if (meshEntry != null && meshEntry.Type == LibraryEntryType.File)
  65. {
  66. FileEntry meshFileEntry = (FileEntry)meshEntry;
  67. output = meshFileEntry.Options as AudioClipImportOptions;
  68. }
  69. }
  70. if (output == null)
  71. {
  72. if (importOptions == null)
  73. output = new AudioClipImportOptions();
  74. else
  75. output = importOptions;
  76. }
  77. return output;
  78. }
  79. /// <summary>
  80. /// Reimports the resource according to the currently set import options.
  81. /// </summary>
  82. private void TriggerReimport()
  83. {
  84. AudioClip audioClip = (AudioClip)InspectedObject;
  85. string resourcePath = ProjectLibrary.GetPath(audioClip);
  86. ProjectLibrary.Reimport(resourcePath, importOptions, true);
  87. }
  88. }
  89. /** @} */
  90. }