summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_PlayRange.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_PlayRange.cs')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_PlayRange.cs131
1 files changed, 131 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_PlayRange.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_PlayRange.cs
new file mode 100644
index 0000000..99a1ab6
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_PlayRange.cs
@@ -0,0 +1,131 @@
+using System.Linq;
+using UnityEngine;
+
+namespace UnityEditor.Timeline
+{
+ partial class TimelineWindow
+ {
+ TimeAreaItem m_PlayRangeEnd;
+ TimeAreaItem m_PlayRangeStart;
+
+ void PlayRangeGUI(TimelineItemArea area)
+ {
+ if (!currentMode.ShouldShowPlayRange(state) || treeView == null)
+ return;
+
+ if (state.masterSequence.asset != null && !state.masterSequence.asset.GetRootTracks().Any())
+ return;
+
+ // left Time Cursor
+ if (m_PlayRangeStart == null || m_PlayRangeStart.style != styles.playTimeRangeStart)
+ {
+ m_PlayRangeStart = new TimeAreaItem(styles.playTimeRangeStart, OnTrackHeadMinSelectDrag);
+ Vector2 offset = new Vector2(-2.0f, 0);
+ m_PlayRangeStart.boundOffset = offset;
+ }
+
+ // right Time Cursor
+ if (m_PlayRangeEnd == null || m_PlayRangeEnd.style != styles.playTimeRangeEnd)
+ {
+ m_PlayRangeEnd = new TimeAreaItem(styles.playTimeRangeEnd, OnTrackHeadMaxSelectDrag);
+ Vector2 offset = new Vector2(2.0f, 0);
+ m_PlayRangeEnd.boundOffset = offset;
+ }
+
+ if (area == TimelineItemArea.Header)
+ DrawPlayRange(true, false);
+ else if (area == TimelineItemArea.Lines)
+ DrawPlayRange(false, true);
+ }
+
+ void DrawPlayRange(bool drawHeads, bool drawLines)
+ {
+ Rect timeCursorRect = state.timeAreaRect;
+ timeCursorRect.height = clientArea.height;
+
+ m_PlayRangeEnd.HandleManipulatorsEvents(state);
+ m_PlayRangeStart.HandleManipulatorsEvents(state);
+
+ // The first time a user enable the play range, we put the play range 75% around the current time...
+ if (state.playRange == TimelineAssetViewModel.NoPlayRangeSet)
+ {
+ float minimumPlayRangeTime = 0.01f;
+ float t0 = Mathf.Max(0.0f, state.PixelToTime(state.timeAreaRect.xMin));
+ float t1 = Mathf.Min((float)state.masterSequence.duration, state.PixelToTime(state.timeAreaRect.xMax));
+
+ if (Mathf.Abs(t1 - t0) <= minimumPlayRangeTime)
+ {
+ state.playRange = new Vector2(t0, t1);
+ return;
+ }
+
+ float deltaT = (t1 - t0) * 0.25f / 2.0f;
+
+ t0 += deltaT;
+ t1 -= deltaT;
+
+ if (t1 < t0)
+ {
+ float temp = t0;
+ t0 = t1;
+ t1 = temp;
+ }
+
+ if (Mathf.Abs(t1 - t0) < minimumPlayRangeTime)
+ {
+ if (t0 - minimumPlayRangeTime > 0.0f)
+ t0 -= minimumPlayRangeTime;
+ else if (t1 + minimumPlayRangeTime < state.masterSequence.duration)
+ t1 += minimumPlayRangeTime;
+ }
+
+ state.playRange = new Vector2(t0, t1);
+ }
+
+ // Draw the head or the lines according to the parameters..
+ m_PlayRangeStart.drawHead = drawHeads;
+ m_PlayRangeStart.drawLine = drawLines;
+
+ m_PlayRangeEnd.drawHead = drawHeads;
+ m_PlayRangeEnd.drawLine = drawLines;
+
+ var playRangeTime = state.playRange;
+ m_PlayRangeStart.Draw(sequenceContentRect, state, playRangeTime.x);
+ m_PlayRangeEnd.Draw(sequenceContentRect, state, playRangeTime.y);
+
+ // Draw Time Range Box from Start to End...
+ if (state.playRangeEnabled && m_PlayHead != null)
+ {
+ Rect rect =
+ Rect.MinMaxRect(
+ Mathf.Clamp(state.TimeToPixel(playRangeTime.x), state.timeAreaRect.xMin, state.timeAreaRect.xMax),
+ m_PlayHead.bounds.yMax,
+ Mathf.Clamp(state.TimeToPixel(playRangeTime.y), state.timeAreaRect.xMin, state.timeAreaRect.xMax),
+ sequenceContentRect.height + state.timeAreaRect.height + timeCursorRect.y
+ );
+
+
+ EditorGUI.DrawRect(rect, DirectorStyles.Instance.customSkin.colorRange);
+
+ rect.height = 3f;
+ EditorGUI.DrawRect(rect, Color.white);
+ }
+ }
+
+ void OnTrackHeadMinSelectDrag(double newTime)
+ {
+ Vector2 range = state.playRange;
+ range.x = (float)newTime;
+ state.playRange = range;
+ m_PlayRangeStart.showTooltip = true;
+ }
+
+ void OnTrackHeadMaxSelectDrag(double newTime)
+ {
+ Vector2 range = state.playRange;
+ range.y = (float)newTime;
+ state.playRange = range;
+ m_PlayRangeEnd.showTooltip = true;
+ }
+ }
+}