forked from BilalY/Rasagar
72 lines
2.2 KiB
C#
72 lines
2.2 KiB
C#
|
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;
|
||
|
}
|
||
|
}
|
||
|
}
|