AudioSourceInspector.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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="AudioSource"/> component.
  11. /// </summary>
  12. [CustomInspector(typeof(AudioSource))]
  13. internal class AudioSourceInspector : Inspector
  14. {
  15. private GUIResourceField audioClipField = new GUIResourceField(typeof(AudioClip), new LocEdString("Clip"));
  16. private GUISliderField volumeField = new GUISliderField(0.0f, 1.0f, new LocEdString("Volume"));
  17. private GUIFloatField pitchField = new GUIFloatField(new LocEdString("Pitch"));
  18. private GUIToggleField loopField = new GUIToggleField(new LocEdString("Loop"));
  19. private GUIIntField priorityField = new GUIIntField(new LocEdString("Priority"));
  20. private GUIFloatField minDistanceField = new GUIFloatField(new LocEdString("Min. distance"));
  21. private GUIFloatField attenuationField = new GUIFloatField(new LocEdString("Attenuation"));
  22. private GUIToggleField playOnStartField = new GUIToggleField(new LocEdString("Play on start"));
  23. private InspectableState modifyState;
  24. /// <inheritdoc/>
  25. protected internal override void Initialize()
  26. {
  27. BuildGUI();
  28. }
  29. /// <inheritdoc/>
  30. protected internal override InspectableState Refresh()
  31. {
  32. AudioSource source = InspectedObject as AudioSource;
  33. if (source == null)
  34. return InspectableState.NotModified;
  35. audioClipField.Value = source.Clip;
  36. volumeField.Value = source.Volume;
  37. pitchField.Value = source.Pitch;
  38. loopField.Value = source.Loop;
  39. priorityField.Value = (int)source.Priority;
  40. minDistanceField.Value = source.MinDistance;
  41. attenuationField.Value = source.Attenuation;
  42. playOnStartField.Value = source.PlayOnStart;
  43. InspectableState oldState = modifyState;
  44. if (modifyState.HasFlag(InspectableState.Modified))
  45. modifyState = InspectableState.NotModified;
  46. return oldState;
  47. }
  48. /// <summary>
  49. /// Recreates all the GUI elements used by this inspector.
  50. /// </summary>
  51. private void BuildGUI()
  52. {
  53. Layout.Clear();
  54. AudioSource source = InspectedObject as AudioSource;
  55. if (source == null)
  56. return;
  57. audioClipField.OnChanged += x =>
  58. {
  59. AudioClip clip = Resources.Load<AudioClip>(x);
  60. source.Clip = clip;
  61. MarkAsModified();
  62. ConfirmModify();
  63. };
  64. volumeField.OnChanged += x =>
  65. {
  66. source.Volume = x;
  67. MarkAsModified();
  68. ConfirmModify();
  69. };
  70. pitchField.OnChanged += x => { source.Pitch = x; MarkAsModified(); };
  71. pitchField.OnConfirmed += ConfirmModify;
  72. pitchField.OnFocusLost += ConfirmModify;
  73. loopField.OnChanged += x =>
  74. {
  75. source.Loop = x;
  76. MarkAsModified();
  77. ConfirmModify();
  78. };
  79. priorityField.OnChanged += x => { source.Priority = (uint)x; MarkAsModified(); };
  80. priorityField.OnConfirmed += ConfirmModify;
  81. priorityField.OnFocusLost += ConfirmModify;
  82. minDistanceField.OnChanged += x => { source.MinDistance = x; MarkAsModified(); };
  83. minDistanceField.OnConfirmed += ConfirmModify;
  84. minDistanceField.OnFocusLost += ConfirmModify;
  85. attenuationField.OnChanged += x => { source.Attenuation = x; MarkAsModified(); };
  86. attenuationField.OnConfirmed += ConfirmModify;
  87. attenuationField.OnFocusLost += ConfirmModify;
  88. playOnStartField.OnChanged += x =>
  89. {
  90. source.PlayOnStart = x;
  91. MarkAsModified();
  92. ConfirmModify();
  93. };
  94. Layout.AddElement(audioClipField);
  95. Layout.AddElement(volumeField);
  96. Layout.AddElement(pitchField);
  97. Layout.AddElement(loopField);
  98. Layout.AddElement(priorityField);
  99. Layout.AddElement(minDistanceField);
  100. Layout.AddElement(attenuationField);
  101. Layout.AddElement(playOnStartField);
  102. }
  103. /// <summary>
  104. /// Marks the contents of the inspector as modified.
  105. /// </summary>
  106. protected void MarkAsModified()
  107. {
  108. modifyState |= InspectableState.ModifyInProgress;
  109. }
  110. /// <summary>
  111. /// Confirms any queued modifications.
  112. /// </summary>
  113. protected void ConfirmModify()
  114. {
  115. if (modifyState.HasFlag(InspectableState.ModifyInProgress))
  116. modifyState |= InspectableState.Modified;
  117. }
  118. }
  119. /** @} */
  120. }