summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioTrackInspector.cs
diff options
context:
space:
mode:
authorAndrew Lee <alee14498@protonmail.com>2020-04-19 17:19:32 -0400
committerAndrew Lee <alee14498@protonmail.com>2020-04-19 17:19:32 -0400
commitc55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 (patch)
treeee4d51c7c1d633e11f46453ef1edd3c77c4ef9f7 /Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioTrackInspector.cs
downloadProject-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.gz
Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.bz2
Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.zip
Inital commit
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioTrackInspector.cs')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioTrackInspector.cs164
1 files changed, 164 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioTrackInspector.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioTrackInspector.cs
new file mode 100644
index 0000000..0c1a110
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioTrackInspector.cs
@@ -0,0 +1,164 @@
+using System;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using JetBrains.Annotations;
+using UnityEditor;
+using UnityEditor.Timeline;
+using UnityEngine.Playables;
+
+namespace UnityEngine.Timeline
+{
+ [CustomEditor(typeof(AudioTrack))]
+ [CanEditMultipleObjects]
+ class AudioTrackInspector : TrackAssetInspector
+ {
+ [UsedImplicitly] // Also used by tests
+ internal static class Styles
+ {
+ public const string VolumeControl = "AudioTrackInspector.volume";
+ public const string StereoPanControl = "AudioTrackInspector.stereoPan";
+ public const string SpatialBlendControl = "AudioTrackInspector.spatialBlend";
+
+ const string k_Indent = " ";
+ public const string valuesFormatter = "0.###";
+ public const string mixInfoSectionSeparator = "\n\n";
+ public static string mixedPropertiesInfo = L10n.Tr("The final {3} is {0}\n" +
+ "Calculated from:\n" +
+ k_Indent + "Track: {1}\n" +
+ k_Indent + "AudioSource: {2}");
+ }
+
+ static StringBuilder s_MixInfoBuilder = new StringBuilder();
+
+ SerializedProperty m_VolumeProperty;
+ SerializedProperty m_StereoPanProperty;
+ SerializedProperty m_SpatialBlendProperty;
+ PlayableDirector m_Director;
+
+ public override void OnEnable()
+ {
+ base.OnEnable();
+
+ if (((AudioTrack)target).timelineAsset == TimelineEditor.inspectedAsset)
+ m_Director = TimelineEditor.inspectedDirector;
+
+ m_VolumeProperty = serializedObject.FindProperty("m_TrackProperties.volume");
+ m_StereoPanProperty = serializedObject.FindProperty("m_TrackProperties.stereoPan");
+ m_SpatialBlendProperty = serializedObject.FindProperty("m_TrackProperties.spatialBlend");
+ }
+
+ protected override void DrawTrackProperties()
+ {
+ // Volume
+ GUI.SetNextControlName(Styles.VolumeControl);
+ EditorGUILayout.Slider(m_VolumeProperty, 0.0f, 1.0f, AudioSourceInspector.Styles.volumeLabel);
+ EditorGUILayout.Space();
+
+ // Stereo Pan
+ GUI.SetNextControlName(Styles.StereoPanControl);
+ EditorGUIUtility.sliderLabels.SetLabels(AudioSourceInspector.Styles.panLeftLabel, AudioSourceInspector.Styles.panRightLabel);
+ EditorGUILayout.Slider(m_StereoPanProperty, -1.0f, 1.0f, AudioSourceInspector.Styles.panStereoLabel);
+ EditorGUIUtility.sliderLabels.SetLabels(null, null);
+ EditorGUILayout.Space();
+
+ // Spatial Blend
+ using (new EditorGUI.DisabledScope(ShouldDisableSpatialBlend()))
+ {
+ GUI.SetNextControlName(Styles.SpatialBlendControl);
+ EditorGUIUtility.sliderLabels.SetLabels(AudioSourceInspector.Styles.spatialLeftLabel, AudioSourceInspector.Styles.spatialRightLabel);
+ EditorGUILayout.Slider(m_SpatialBlendProperty, 0.0f, 1.0f, AudioSourceInspector.Styles.spatialBlendLabel);
+ EditorGUIUtility.sliderLabels.SetLabels(null, null);
+ }
+
+ DrawMixInfoSection();
+ }
+
+ void DrawMixInfoSection()
+ {
+ if (m_Director == null || targets.Length > 1)
+ return;
+
+ var binding = m_Director.GetGenericBinding(target) as AudioSource;
+ if (binding == null)
+ return;
+
+ var audioSourceVolume = binding.volume;
+ var audioSourcePan = binding.panStereo;
+ var audioSourceBlend = binding.spatialBlend;
+
+ var trackVolume = m_VolumeProperty.floatValue;
+ var trackPan = m_StereoPanProperty.floatValue;
+ var trackBlend = m_SpatialBlendProperty.floatValue;
+
+ // Skip sections when result is obvious
+
+ var skipVolumeInfo = Math.Abs(audioSourceVolume) < float.Epsilon && Math.Abs(trackVolume) < float.Epsilon || // All muted
+ Math.Abs(audioSourceVolume - 1) < float.Epsilon && Math.Abs(trackVolume - 1) < float.Epsilon; // All max volume
+
+ var skipPanInfo = Math.Abs(audioSourcePan) < float.Epsilon && Math.Abs(trackPan) < float.Epsilon || // All centered
+ Math.Abs(audioSourcePan - 1) < float.Epsilon && Math.Abs(trackPan - 1) < float.Epsilon || // All right
+ Math.Abs(audioSourcePan - (-1.0f)) < float.Epsilon && Math.Abs(trackPan - (-1.0f)) < float.Epsilon; // All left
+
+ var skipBlendInfo = Math.Abs(audioSourceBlend) < float.Epsilon && Math.Abs(trackBlend) < float.Epsilon || // All 2D
+ Math.Abs(audioSourceBlend - 1) < float.Epsilon && Math.Abs(trackBlend - 1) < float.Epsilon; // All 3D
+
+ if (skipVolumeInfo && skipPanInfo && skipBlendInfo)
+ return;
+
+ s_MixInfoBuilder.Length = 0;
+
+ if (!skipVolumeInfo)
+ s_MixInfoBuilder.AppendFormat(
+ Styles.mixedPropertiesInfo,
+ (audioSourceVolume * trackVolume).ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture),
+ trackVolume.ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture),
+ audioSourceVolume.ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture),
+ AudioSourceInspector.Styles.volumeLabel.text);
+
+ if (!skipVolumeInfo && !skipPanInfo)
+ s_MixInfoBuilder.Append(Styles.mixInfoSectionSeparator);
+
+ if (!skipPanInfo)
+ s_MixInfoBuilder.AppendFormat(
+ Styles.mixedPropertiesInfo,
+ Mathf.Clamp(audioSourcePan + trackPan, -1.0f, 1.0f).ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture),
+ trackPan.ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture),
+ audioSourcePan.ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture),
+ AudioSourceInspector.Styles.panStereoLabel.text);
+
+ if ((!skipVolumeInfo || !skipPanInfo) && !skipBlendInfo)
+ s_MixInfoBuilder.Append(Styles.mixInfoSectionSeparator);
+
+ if (!skipBlendInfo)
+ s_MixInfoBuilder.AppendFormat(
+ Styles.mixedPropertiesInfo,
+ Mathf.Clamp01(audioSourceBlend + trackBlend).ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture),
+ trackBlend.ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture),
+ audioSourceBlend.ToString(Styles.valuesFormatter, CultureInfo.InvariantCulture),
+ AudioSourceInspector.Styles.spatialBlendLabel.text);
+
+ EditorGUILayout.Space();
+ EditorGUILayout.HelpBox(new GUIContent(s_MixInfoBuilder.ToString()));
+ }
+
+ protected override void ApplyChanges()
+ {
+ var track = (AudioTrack)target;
+
+ if (TimelineEditor.inspectedAsset != track.timelineAsset || TimelineEditor.inspectedDirector == null)
+ return;
+
+ if (TimelineEditor.inspectedDirector.state == PlayState.Playing)
+ track.LiveLink();
+ else
+ TimelineEditor.Refresh(RefreshReason.ContentsModified);
+ }
+
+ bool ShouldDisableSpatialBlend()
+ {
+ return m_Director == null ||
+ targets.Any(selectedTrack => m_Director.GetGenericBinding(selectedTrack) == null);
+ }
+ }
+}