Rasagar/Library/PackageCache/com.unity.timeline/Editor/treeview/IPropertyKeyDataSource.cs
2024-08-26 23:07:20 +03:00

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;
}
}
}