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.
71 lines
2.2 KiB
71 lines
2.2 KiB
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; |
|
} |
|
} |
|
}
|
|
|