85 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Globalization;
 | |
| using System.Linq;
 | |
| using System.Text;
 | |
| using JetBrains.Annotations;
 | |
| using UnityEditor;
 | |
| using UnityEditor.Timeline;
 | |
| #if !UNITY_2020_2_OR_NEWER
 | |
| using L10n = UnityEditor.Timeline.L10n;
 | |
| #endif
 | |
| 
 | |
| namespace UnityEngine.Timeline
 | |
| {
 | |
|     [CustomPropertyDrawer(typeof(AudioClipProperties))]
 | |
|     class AudioClipPropertiesDrawer : PropertyDrawer
 | |
|     {
 | |
|         [UsedImplicitly] // Also used by tests
 | |
|         internal static class Styles
 | |
|         {
 | |
|             public const string VolumeControl = "AudioClipPropertiesDrawer.volume";
 | |
| 
 | |
|             const string k_Indent = "    ";
 | |
|             public const string valuesFormatter = "0.###";
 | |
|             public static string mixedPropertiesInfo = L10n.Tr("The final {3} is {0}\n") +
 | |
|                 L10n.Tr("Calculated from:\n") +
 | |
|                 k_Indent + L10n.Tr("Clip: {1}\n") +
 | |
|                 k_Indent + L10n.Tr("Track: {2}");
 | |
| 
 | |
|             public static string audioSourceContribution = k_Indent + L10n.Tr("AudioSource: {0}");
 | |
|         }
 | |
| 
 | |
|         static StringBuilder s_MixInfoBuilder = new StringBuilder();
 | |
| 
 | |
|         public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
 | |
|         {
 | |
|             var volumeProp = property.FindPropertyRelative("volume");
 | |
| 
 | |
|             GUI.SetNextControlName(Styles.VolumeControl);
 | |
|             EditorGUI.Slider(position, volumeProp, 0.0f, 1.0f, AudioSourceInspector.Styles.volumeLabel);
 | |
| 
 | |
|             if (TimelineEditor.inspectedDirector == null)
 | |
|                 // Nothing more to do in asset mode
 | |
|                 return;
 | |
| 
 | |
|             var clip = SelectionManager.SelectedClips().FirstOrDefault(c => c.asset == property.serializedObject.targetObject);
 | |
| 
 | |
|             if (clip == null || clip.GetParentTrack() == null)
 | |
|                 return;
 | |
| 
 | |
|             var clipVolume = volumeProp.floatValue;
 | |
|             var trackVolume = new SerializedObject(clip.GetParentTrack()).FindProperty("m_TrackProperties.volume").floatValue;
 | |
|             var binding = TimelineEditor.inspectedDirector.GetGenericBinding(clip.GetParentTrack()) as AudioSource;
 | |
| 
 | |
|             if (Math.Abs(clipVolume) < float.Epsilon &&
 | |
|                 Math.Abs(trackVolume) < float.Epsilon &&
 | |
|                 (binding == null || Math.Abs(binding.volume) < float.Epsilon))
 | |
|                 return;
 | |
| 
 | |
|             if (Math.Abs(clipVolume - 1) < float.Epsilon &&
 | |
|                 Math.Abs(trackVolume - 1) < float.Epsilon &&
 | |
|                 (binding == null || Math.Abs(binding.volume - 1) < float.Epsilon))
 | |
|                 return;
 | |
| 
 | |
|             s_MixInfoBuilder.Length = 0;
 | |
| 
 | |
|             var audioSourceVolume = binding == null ? 1.0f : binding.volume;
 | |
| 
 | |
|             s_MixInfoBuilder.AppendFormat(
 | |
|                 Styles.mixedPropertiesInfo,
 | |
|                 (clipVolume * trackVolume * audioSourceVolume).ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture),
 | |
|                 clipVolume.ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture),
 | |
|                 trackVolume.ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture),
 | |
|                 AudioSourceInspector.Styles.volumeLabel.text);
 | |
| 
 | |
|             if (binding != null)
 | |
|                 s_MixInfoBuilder.Append("\n")
 | |
|                     .AppendFormat(Styles.audioSourceContribution,
 | |
|                         audioSourceVolume.ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture));
 | |
| 
 | |
|             EditorGUILayout.Space();
 | |
|             EditorGUILayout.HelpBox(new GUIContent(s_MixInfoBuilder.ToString()));
 | |
|         }
 | |
|     }
 | |
| }
 |