AudioZoneInspector.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. // River Modeler
  2. // Staggart Creations (http://staggart.xyz)
  3. // Copyright protected under Unity Asset Store EULA
  4. // Copying or referencing source code for the production of new asset store content is strictly prohibited.
  5. using System;
  6. using sc.modeling.river.runtime;
  7. using sc.modeling.water.common.editor;
  8. using UnityEditor;
  9. using UnityEngine;
  10. namespace sc.modeling.river.editor
  11. {
  12. [CustomEditor(typeof(AudioZone))]
  13. [CanEditMultipleObjects]
  14. public class AudioZoneInspector : Editor
  15. {
  16. private SerializedProperty river;
  17. private SerializedProperty confines;
  18. private SerializedProperty boundsSize;
  19. private SerializedProperty minMaxSlopeAngle;
  20. private SerializedProperty resolution;
  21. private SerializedProperty clips;
  22. private SerializedProperty outputMixer;
  23. private SerializedProperty maxVolume;
  24. private SerializedProperty pitchModulation;
  25. private SerializedProperty directionality;
  26. private SerializedProperty updateInSceneView;
  27. private SerializedProperty minAudibleDistance;
  28. private SerializedProperty maxAudibleDistance;
  29. private void OnEnable()
  30. {
  31. river = serializedObject.FindProperty("river");
  32. confines = serializedObject.FindProperty("confines");
  33. boundsSize = serializedObject.FindProperty("boundsSize");
  34. minMaxSlopeAngle = serializedObject.FindProperty("minMaxSlopeAngle");
  35. resolution = serializedObject.FindProperty("resolution");
  36. clips = serializedObject.FindProperty("clips");
  37. outputMixer = serializedObject.FindProperty("outputMixer");
  38. maxVolume = serializedObject.FindProperty("maxVolume");
  39. pitchModulation = serializedObject.FindProperty("pitchModulation");
  40. directionality = serializedObject.FindProperty("directionality");
  41. updateInSceneView = serializedObject.FindProperty("updateInSceneView");
  42. minAudibleDistance = serializedObject.FindProperty("minAudibleDistance");
  43. maxAudibleDistance = serializedObject.FindProperty("maxAudibleDistance");
  44. }
  45. public override void OnInspectorGUI()
  46. {
  47. UI.DrawHeader(Asset.NAME, Asset.VERSION);
  48. EditorGUI.BeginChangeCheck();
  49. serializedObject.Update();
  50. EditorGUILayout.PropertyField(river);
  51. if (!river.objectReferenceValue)
  52. {
  53. EditorGUILayout.HelpBox("A target river component must be assigned!", MessageType.Error);
  54. }
  55. EditorGUILayout.Space();
  56. EditorGUILayout.PropertyField(confines);
  57. if (confines.intValue == (int)(AudioZone.Confines.Bounds))
  58. {
  59. EditorGUI.indentLevel++;
  60. EditorGUILayout.PropertyField(boundsSize);
  61. EditorGUILayout.HelpBox("The Transform's position defines the bounds center", MessageType.None);
  62. EditorGUI.indentLevel--;
  63. }
  64. EditorGUILayout.Space();
  65. EditorGUILayout.PropertyField(clips, new GUIContent("Audio clips", clips.tooltip));
  66. if(clips.arraySize == 0) EditorGUILayout.HelpBox("Assign one or more audio files", MessageType.Info);
  67. using(new EditorGUI.DisabledGroupScope(clips.arraySize == 0))
  68. {
  69. EditorGUILayout.LabelField("Spawning", EditorStyles.boldLabel);
  70. EditorGUILayout.PropertyField(minMaxSlopeAngle);
  71. EditorGUILayout.PropertyField(resolution);
  72. EditorGUILayout.Space();
  73. EditorGUILayout.LabelField("Audio", EditorStyles.boldLabel);
  74. EditorGUILayout.PropertyField(outputMixer);
  75. EditorGUILayout.Space();
  76. EditorGUILayout.PropertyField(maxVolume);
  77. EditorGUILayout.PropertyField(pitchModulation);
  78. EditorGUILayout.PropertyField(directionality);
  79. EditorGUILayout.Space();
  80. EditorGUILayout.LabelField("Attenuation", EditorStyles.boldLabel);
  81. EditorGUILayout.PropertyField(updateInSceneView);
  82. EditorGUILayout.PropertyField(minAudibleDistance);
  83. EditorGUILayout.PropertyField(maxAudibleDistance);
  84. }
  85. if (EditorGUI.EndChangeCheck())
  86. {
  87. serializedObject.ApplyModifiedProperties();
  88. EditorApplication.delayCall += () =>
  89. {
  90. foreach (var target in targets)
  91. ((AudioZone)target).Rebuild();
  92. };
  93. }
  94. UI.DrawFooter();
  95. }
  96. }
  97. }