diff options
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/IPropertyKeyDataSource.cs')
| -rw-r--r-- | Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/IPropertyKeyDataSource.cs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/IPropertyKeyDataSource.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/IPropertyKeyDataSource.cs new file mode 100644 index 0000000..a26deb6 --- /dev/null +++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/IPropertyKeyDataSource.cs @@ -0,0 +1,71 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEditorInternal; +using UnityEngine; + +namespace UnityEditor.Timeline +{ + interface IPropertyKeyDataSource + { + float[] GetKeys(); // Get the keys + Dictionary<float, string> GetDescriptions(); // Caches for descriptions + } + + abstract class BasePropertyKeyDataSource : IPropertyKeyDataSource + { + static readonly StringBuilder k_StringBuilder = new StringBuilder(); + + protected abstract AnimationClip animationClip { get; } + + public virtual float[] GetKeys() + { + if (animationClip == null) + return null; + + var info = AnimationClipCurveCache.Instance.GetCurveInfo(animationClip); + return info.keyTimes.Select(TransformKeyTime).ToArray(); + } + + public virtual Dictionary<float, string> GetDescriptions() + { + var map = new Dictionary<float, string>(); + var info = AnimationClipCurveCache.Instance.GetCurveInfo(animationClip); + var processed = new HashSet<string>(); + + foreach (var b in info.bindings) + { + var groupID = b.GetGroupID(); + if (processed.Contains(groupID)) + continue; + + var group = info.GetGroupBinding(groupID); + var prefix = AnimationWindowUtility.GetNicePropertyGroupDisplayName(b.type, b.propertyName); + + foreach (var t in info.keyTimes) + { + k_StringBuilder.Length = 0; + + var key = TransformKeyTime(t); + if (map.ContainsKey(key)) + k_StringBuilder.Append(map[key]) + .Append('\n'); + + k_StringBuilder.Append(prefix) + .Append(" : ") + .Append(group.GetDescription(key)); + + map[key] = k_StringBuilder.ToString(); + } + processed.Add(groupID); + } + + return map; + } + + protected virtual float TransformKeyTime(float keyTime) + { + return keyTime; + } + } +} |
