123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.Timeline;
- namespace UnityEditor.Timeline
- {
- abstract class CurveDataSource
- {
- public static CurveDataSource Create(IRowGUI trackGUI)
- {
- if (trackGUI.asset is AnimationTrack)
- return new InfiniteClipCurveDataSource(trackGUI);
- return new TrackParametersCurveDataSource(trackGUI);
- }
- public static CurveDataSource Create(TimelineClipGUI clipGUI)
- {
- if (clipGUI.clip.animationClip != null)
- return new ClipAnimationCurveDataSource(clipGUI);
- return new ClipParametersCurveDataSource(clipGUI);
- }
- int? m_ID = null;
- public int id
- {
- get
- {
- if (!m_ID.HasValue)
- m_ID = CreateHashCode();
- return m_ID.Value;
- }
- }
- readonly IRowGUI m_TrackGUI;
- protected IRowGUI trackGUI { get { return m_TrackGUI; } }
- protected CurveDataSource(IRowGUI trackGUI)
- {
- m_TrackGUI = trackGUI;
- }
- public abstract AnimationClip animationClip { get; }
- public abstract float start { get; }
- public abstract float timeScale { get; }
- public abstract string groupingName { get; }
- public virtual void UpdateCurves(List<CurveWrapper> updatedCurves) {}
- public virtual void RebuildCurves() {} // Only necessary when using proxies
- public Rect GetBackgroundRect(WindowState state)
- {
- var trackRect = m_TrackGUI.boundingRect;
- return new Rect(
- state.timeAreaTranslation.x + trackRect.xMin,
- trackRect.y,
- (float)state.editSequence.asset.duration * state.timeAreaScale.x,
- trackRect.height
- );
- }
- public List<CurveWrapper> GenerateWrappers(List<EditorCurveBinding> bindings)
- {
- var wrappers = new List<CurveWrapper>(bindings.Count);
- int curveWrapperId = 0;
- foreach (EditorCurveBinding b in bindings)
- {
- // General configuration
- var wrapper = new CurveWrapper
- {
- id = curveWrapperId++,
- binding = b,
- groupId = -1,
- hidden = false,
- readOnly = false,
- getAxisUiScalarsCallback = () => new Vector2(1, 1)
- };
- // Specific configuration
- ConfigureCurveWrapper(wrapper);
- wrappers.Add(wrapper);
- }
- return wrappers;
- }
- protected virtual void ConfigureCurveWrapper(CurveWrapper wrapper)
- {
- wrapper.color = CurveUtility.GetPropertyColor(wrapper.binding.propertyName);
- wrapper.renderer = new NormalCurveRenderer(AnimationUtility.GetEditorCurve(animationClip, wrapper.binding));
- wrapper.renderer.SetCustomRange(0.0f, animationClip.length);
- }
- protected virtual int CreateHashCode()
- {
- return m_TrackGUI.asset.GetHashCode();
- }
- }
- class ClipAnimationCurveDataSource : CurveDataSource
- {
- static readonly string k_GroupingName = L10n.Tr("Animated Values");
- readonly TimelineClipGUI m_ClipGUI;
- public ClipAnimationCurveDataSource(TimelineClipGUI clipGUI) : base(clipGUI.parent)
- {
- m_ClipGUI = clipGUI;
- }
- public override AnimationClip animationClip
- {
- get { return m_ClipGUI.clip.animationClip; }
- }
- public override float start
- {
- get { return (float)m_ClipGUI.clip.FromLocalTimeUnbound(0.0); }
- }
- public override float timeScale
- {
- get { return (float)m_ClipGUI.clip.timeScale; }
- }
- public override string groupingName
- {
- get { return k_GroupingName; }
- }
- protected override int CreateHashCode()
- {
- return base.CreateHashCode().CombineHash(m_ClipGUI.clip.GetHashCode());
- }
- }
- class ClipParametersCurveDataSource : CurveDataSource
- {
- static readonly string k_GroupingName = L10n.Tr("Clip Properties");
- readonly TimelineClipGUI m_ClipGUI;
- readonly CurvesProxy m_CurvesProxy;
- public ClipParametersCurveDataSource(TimelineClipGUI clipGUI) : base(clipGUI.parent)
- {
- m_ClipGUI = clipGUI;
- m_CurvesProxy = new CurvesProxy(clipGUI.clip);
- }
- public override AnimationClip animationClip
- {
- get { return m_CurvesProxy.curves; }
- }
- public override float start
- {
- get { return (float)m_ClipGUI.clip.FromLocalTimeUnbound(0.0); }
- }
- public override float timeScale
- {
- get { return (float)m_ClipGUI.clip.timeScale; }
- }
- public override string groupingName
- {
- get { return k_GroupingName; }
- }
- public override void UpdateCurves(List<CurveWrapper> updatedCurves)
- {
- m_CurvesProxy.UpdateCurves(updatedCurves);
- }
- public override void RebuildCurves()
- {
- m_CurvesProxy.RebuildCurves();
- }
- protected override void ConfigureCurveWrapper(CurveWrapper wrapper)
- {
- m_CurvesProxy.ConfigureCurveWrapper(wrapper);
- }
- protected override int CreateHashCode()
- {
- return base.CreateHashCode().CombineHash(m_ClipGUI.clip.GetHashCode());
- }
- }
- class InfiniteClipCurveDataSource : CurveDataSource
- {
- static readonly string k_GroupingName = L10n.Tr("Animated Values");
- readonly AnimationTrack m_AnimationTrack;
- public InfiniteClipCurveDataSource(IRowGUI trackGui) : base(trackGui)
- {
- m_AnimationTrack = trackGui.asset as AnimationTrack;
- }
- public override AnimationClip animationClip
- {
- get { return m_AnimationTrack.infiniteClip; }
- }
- public override float start
- {
- get { return 0.0f; }
- }
- public override float timeScale
- {
- get { return 1.0f; }
- }
- public override string groupingName
- {
- get { return k_GroupingName; }
- }
- }
- class TrackParametersCurveDataSource : CurveDataSource
- {
- static readonly string k_GroupingName = L10n.Tr("Track Properties");
- readonly CurvesProxy m_CurvesProxy;
- public TrackParametersCurveDataSource(IRowGUI trackGui) : base(trackGui)
- {
- m_CurvesProxy = new CurvesProxy(trackGui.asset);
- }
- public override AnimationClip animationClip
- {
- get { return m_CurvesProxy.curves; }
- }
- public override float start
- {
- get { return 0.0f; }
- }
- public override float timeScale
- {
- get { return 1.0f; }
- }
- public override string groupingName
- {
- get { return k_GroupingName; }
- }
- public override void UpdateCurves(List<CurveWrapper> updatedCurves)
- {
- m_CurvesProxy.UpdateCurves(updatedCurves);
- }
- public override void RebuildCurves()
- {
- m_CurvesProxy.RebuildCurves();
- }
- protected override void ConfigureCurveWrapper(CurveWrapper wrapper)
- {
- m_CurvesProxy.ConfigureCurveWrapper(wrapper);
- }
- }
- }
|