Initial Commit
This commit is contained in:
parent
53eb92e9af
commit
270ab7d11f
15341 changed files with 700234 additions and 0 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue