SW 중심대학 OSS GIT 서버 박건태, 이승준, 고기완, 이준호 새로운 배포
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
3.3 KiB

4 years ago
  1. using System;
  2. using System.Globalization;
  3. using System.Linq;
  4. using System.Text;
  5. using JetBrains.Annotations;
  6. using UnityEditor;
  7. using UnityEditor.Timeline;
  8. namespace UnityEngine.Timeline
  9. {
  10. [CustomPropertyDrawer(typeof(AudioClipProperties))]
  11. class AudioClipPropertiesDrawer : PropertyDrawer
  12. {
  13. [UsedImplicitly] // Also used by tests
  14. internal static class Styles
  15. {
  16. public const string VolumeControl = "AudioClipPropertiesDrawer.volume";
  17. const string k_Indent = " ";
  18. public const string valuesFormatter = "0.###";
  19. public static string mixedPropertiesInfo = L10n.Tr("The final {3} is {0}\n" +
  20. "Calculated from:\n" +
  21. k_Indent + "Clip: {1}\n" +
  22. k_Indent + "Track: {2}");
  23. public static string audioSourceContribution = L10n.Tr(k_Indent + "AudioSource: {0}");
  24. }
  25. static StringBuilder s_MixInfoBuilder = new StringBuilder();
  26. public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
  27. {
  28. var volumeProp = property.FindPropertyRelative("volume");
  29. GUI.SetNextControlName(Styles.VolumeControl);
  30. EditorGUI.Slider(position, volumeProp, 0.0f, 1.0f, AudioSourceInspector.Styles.volumeLabel);
  31. if (TimelineEditor.inspectedDirector == null)
  32. // Nothing more to do in asset mode
  33. return;
  34. var clip = SelectionManager.SelectedClips().FirstOrDefault(c => c.asset == property.serializedObject.targetObject);
  35. if (clip == null || clip.parentTrack == null)
  36. return;
  37. var clipVolume = volumeProp.floatValue;
  38. var trackVolume = new SerializedObject(clip.parentTrack).FindProperty("m_TrackProperties.volume").floatValue;
  39. var binding = TimelineEditor.inspectedDirector.GetGenericBinding(clip.parentTrack) as AudioSource;
  40. if (Math.Abs(clipVolume) < float.Epsilon &&
  41. Math.Abs(trackVolume) < float.Epsilon &&
  42. (binding == null || Math.Abs(binding.volume) < float.Epsilon))
  43. return;
  44. if (Math.Abs(clipVolume - 1) < float.Epsilon &&
  45. Math.Abs(trackVolume - 1) < float.Epsilon &&
  46. (binding == null || Math.Abs(binding.volume - 1) < float.Epsilon))
  47. return;
  48. s_MixInfoBuilder.Length = 0;
  49. var audioSourceVolume = binding == null ? 1.0f : binding.volume;
  50. s_MixInfoBuilder.AppendFormat(
  51. Styles.mixedPropertiesInfo,
  52. (clipVolume * trackVolume * audioSourceVolume).ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture),
  53. clipVolume.ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture),
  54. trackVolume.ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture),
  55. AudioSourceInspector.Styles.volumeLabel.text);
  56. if (binding != null)
  57. s_MixInfoBuilder.Append("\n")
  58. .AppendFormat(Styles.audioSourceContribution,
  59. audioSourceVolume.ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture));
  60. EditorGUILayout.Space();
  61. EditorGUILayout.HelpBox(new GUIContent(s_MixInfoBuilder.ToString()));
  62. }
  63. }
  64. }