summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindowTimeControl.cs
diff options
context:
space:
mode:
authorAndrew Lee <alee14498@protonmail.com>2020-04-19 17:19:32 -0400
committerAndrew Lee <alee14498@protonmail.com>2020-04-19 17:19:32 -0400
commitc55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 (patch)
treeee4d51c7c1d633e11f46453ef1edd3c77c4ef9f7 /Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindowTimeControl.cs
downloadProject-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.gz
Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.bz2
Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.zip
Inital commit
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindowTimeControl.cs')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindowTimeControl.cs331
1 files changed, 331 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindowTimeControl.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindowTimeControl.cs
new file mode 100644
index 0000000..385fb22
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindowTimeControl.cs
@@ -0,0 +1,331 @@
+using System;
+using UnityEditorInternal;
+using UnityEngine;
+using UnityEngine.Timeline;
+using Object = UnityEngine.Object;
+
+namespace UnityEditor.Timeline
+{
+ class TimelineWindowTimeControl : IAnimationWindowControl
+ {
+ [Serializable]
+ public struct ClipData
+ {
+ public double start;
+ public double duration;
+ public TrackAsset track;
+ }
+
+ [SerializeField] ClipData m_ClipData;
+ [SerializeField] TimelineClip m_Clip;
+ [SerializeField] AnimationWindowState m_AnimWindowState;
+
+ TrackAsset track
+ {
+ get
+ {
+ if (m_Clip != null)
+ {
+ return m_Clip.parentTrack;
+ }
+ return m_ClipData.track;
+ }
+ }
+
+ static TimelineWindow window
+ {
+ get
+ {
+ return TimelineWindow.instance;
+ }
+ }
+
+ static WindowState state
+ {
+ get
+ {
+ if (window != null)
+ return window.state;
+ return null;
+ }
+ }
+
+ void OnStateChange()
+ {
+ if (state != null && state.dirtyStamp > 0 && m_AnimWindowState != null)
+ m_AnimWindowState.Repaint();
+ }
+
+ public void Init(AnimationWindowState animState, TimelineClip clip)
+ {
+ m_Clip = clip;
+ m_AnimWindowState = animState;
+ }
+
+ public void Init(AnimationWindowState animState, ClipData clip)
+ {
+ m_ClipData = clip;
+ m_AnimWindowState = animState;
+ }
+
+ public override void OnEnable()
+ {
+ if (state != null)
+ state.OnTimeChange += OnStateChange;
+
+ base.OnEnable();
+ }
+
+ public void OnDisable()
+ {
+ if (state != null)
+ state.OnTimeChange -= OnStateChange;
+ }
+
+ public override AnimationKeyTime time
+ {
+ get
+ {
+ if (state == null)
+ return AnimationKeyTime.Time(0.0f, 0.0f);
+
+ return AnimationKeyTime.Time(ToAnimationClipTime(state.editSequence.time), state.referenceSequence.frameRate);
+ }
+ }
+
+ void ChangeTime(float newTime)
+ {
+ if (state != null && state.editSequence.director != null)
+ {
+ // avoid rounding errors
+ var finalTime = ToGlobalTime(newTime);
+ if (TimeUtility.OnFrameBoundary(finalTime, state.referenceSequence.frameRate, TimeUtility.kFrameRateEpsilon))
+ finalTime = TimeUtility.RoundToFrame(finalTime, state.referenceSequence.frameRate);
+ state.editSequence.time = finalTime;
+
+ window.Repaint();
+ }
+ }
+
+ static void ChangeFrame(int frame)
+ {
+ if (state != null)
+ {
+ state.editSequence.frame = frame;
+ window.Repaint();
+ }
+ }
+
+ public override void GoToTime(float newTime)
+ {
+ ChangeTime(newTime);
+ }
+
+ public override void GoToFrame(int frame)
+ {
+ ChangeFrame(frame);
+ }
+
+ public override void StartScrubTime() {}
+
+ public override void EndScrubTime() {}
+
+ public override void ScrubTime(float newTime)
+ {
+ ChangeTime(newTime);
+ }
+
+ public override void GoToPreviousFrame()
+ {
+ if (state != null)
+ ChangeFrame(state.editSequence.frame - 1);
+ }
+
+ public override void GoToNextFrame()
+ {
+ if (state != null)
+ ChangeFrame(state.editSequence.frame + 1);
+ }
+
+ AnimationWindowCurve[] GetCurves()
+ {
+ var curves =
+ (m_AnimWindowState.showCurveEditor &&
+ m_AnimWindowState.activeCurves.Count > 0) ? m_AnimWindowState.activeCurves : m_AnimWindowState.allCurves;
+ return curves.ToArray();
+ }
+
+ public override void GoToPreviousKeyframe()
+ {
+ var newTime = AnimationWindowUtility.GetPreviousKeyframeTime(GetCurves(), time.time, m_AnimWindowState.clipFrameRate);
+ GoToTime(m_AnimWindowState.SnapToFrame(newTime, AnimationWindowState.SnapMode.SnapToClipFrame));
+ }
+
+ public override void GoToNextKeyframe()
+ {
+ var newTime = AnimationWindowUtility.GetNextKeyframeTime(GetCurves(), time.time, m_AnimWindowState.clipFrameRate);
+ GoToTime(m_AnimWindowState.SnapToFrame(newTime, AnimationWindowState.SnapMode.SnapToClipFrame));
+ }
+
+ public override void GoToFirstKeyframe()
+ {
+ GoToTime(0);
+ }
+
+ public override void GoToLastKeyframe()
+ {
+ double animClipTime = 0;
+ if (m_Clip != null)
+ {
+ var curves = m_Clip.curves;
+ var animAsset = m_Clip.asset as AnimationPlayableAsset;
+ if (animAsset != null)
+ {
+ animClipTime = animAsset.clip != null ? animAsset.clip.length : 0;
+ }
+ else if (curves != null)
+ {
+ animClipTime = curves.length;
+ }
+ else
+ {
+ animClipTime = m_Clip.clipAssetDuration;
+ }
+ }
+ else
+ {
+ animClipTime = m_ClipData.duration;
+ }
+
+ GoToTime((float)animClipTime);
+ }
+
+ public override bool canPlay
+ {
+ get
+ {
+ return state != null && state.previewMode;
+ }
+ }
+
+ public override bool playing
+ {
+ get
+ {
+ return state != null && state.playing;
+ }
+ }
+
+ static void SetPlaybackState(bool playbackState)
+ {
+ if (state == null || playbackState == state.playing)
+ return;
+
+ state.SetPlaying(playbackState);
+ }
+
+ public override bool StartPlayback()
+ {
+ SetPlaybackState(true);
+ return state != null && state.playing;
+ }
+
+ public override void StopPlayback()
+ {
+ SetPlaybackState(false);
+ }
+
+ public override bool PlaybackUpdate() { return state != null && state.playing; }
+
+ public override bool canRecord
+ {
+ get { return state != null && state.canRecord; }
+ }
+
+ public override bool recording
+ {
+ get { return state != null && state.recording; }
+ }
+
+ public override bool canPreview
+ {
+ get { return false; }
+ }
+
+ public override bool previewing
+ {
+ get { return false; }
+ }
+
+ public override bool StartRecording(Object targetObject)
+ {
+ if (!canRecord)
+ return false;
+ if (Application.isPlaying)
+ return false;
+
+ if (state != null && track != null)
+ {
+ state.ArmForRecord(track);
+ return state.recording;
+ }
+
+ return false;
+ }
+
+ public override void StopRecording()
+ {
+ if (Application.isPlaying)
+ return;
+
+ if (state != null && track != null)
+ state.UnarmForRecord(track);
+ }
+
+ public override void OnSelectionChanged() {}
+
+ public override void ResampleAnimation() {}
+
+ public override bool StartPreview()
+ {
+ if (state != null)
+ state.previewMode = true;
+ return state != null && state.previewMode;
+ }
+
+ public override void StopPreview()
+ {
+ if (state != null)
+ state.previewMode = false;
+ }
+
+ public override void ProcessCandidates() {}
+ public override void ClearCandidates() {}
+
+ double durationD
+ {
+ get
+ {
+ if (m_Clip != null)
+ {
+ return ToAnimationClipTime(m_Clip.end);
+ }
+ return m_ClipData.duration;
+ }
+ }
+
+ double ToGlobalTime(float localTime)
+ {
+ if (m_Clip != null)
+ return Math.Max(0, m_Clip.FromLocalTimeUnbound(localTime));
+ return Math.Max(0, m_ClipData.start + localTime);
+ }
+
+ float ToAnimationClipTime(double globalTime)
+ {
+ if (m_Clip != null)
+ return (float)m_Clip.ToLocalTimeUnbound(globalTime);
+ return (float)(globalTime - m_ClipData.start);
+ }
+ }
+}