123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- using System;
- using UnityEngine;
- using UnityEngine.Timeline;
- using UnityEngine.Playables;
-
- namespace UnityEditor.Timeline
- {
- partial class TimelineWindow
- {
- TimeAreaItem m_PlayHead;
-
- void TimeCursorGUI(TimelineItemArea area)
- {
- DrawTimeOnSlider();
- if (!CanDrawTimeCursor(area))
- return;
-
- if (m_PlayHead == null || m_PlayHead.style != styles.timeCursor)
- {
- m_PlayHead = new TimeAreaItem(styles.timeCursor, OnTrackHeadDrag);
- m_PlayHead.AddManipulator(new PlayheadContextMenu(m_PlayHead));
- }
-
- var headerMode = area == TimelineItemArea.Header;
- DrawTimeCursor(headerMode, !headerMode);
- }
-
- bool CanDrawTimeCursor(TimelineItemArea area)
- {
- if (!currentMode.ShouldShowTimeCursor(state))
- return false;
-
- if (treeView == null || state.editSequence.asset == null || (state.editSequence.asset != null && state.IsEditingAnEmptyTimeline()))
- return false;
-
- if (area == TimelineItemArea.Lines && !state.TimeIsInRange((float)state.editSequence.time))
- return false;
-
- return true;
- }
-
- void DrawTimeOnSlider()
- {
- if (currentMode.ShouldShowTimeCursor(state))
- {
- var colorDimFactor = EditorGUIUtility.isProSkin ? 0.7f : 0.9f;
- var c = styles.timeCursor.normal.textColor * colorDimFactor;
-
- float time = Mathf.Max((float)state.editSequence.time, 0);
- float duration = (float)state.editSequence.duration;
-
- m_TimeArea.DrawTimeOnSlider(time, c, duration, DirectorStyles.kDurationGuiThickness);
- }
- }
-
- void DrawTimeCursor(bool drawHead, bool drawline)
- {
- m_PlayHead.HandleManipulatorsEvents(state);
-
- if (Event.current.type == EventType.MouseDown && Event.current.button == 0)
- {
- if (state.timeAreaRect.Contains(Event.current.mousePosition))
- {
- state.SetPlaying(false);
- m_PlayHead.HandleManipulatorsEvents(state);
- state.editSequence.time = Math.Max(0.0, state.GetSnappedTimeAtMousePosition(Event.current.mousePosition));
- }
- }
-
- m_PlayHead.drawLine = drawline;
- m_PlayHead.drawHead = drawHead;
- m_PlayHead.Draw(sequenceContentRect, state, state.editSequence.time);
- }
-
- void OnTrackHeadDrag(double newTime)
- {
- state.editSequence.time = Math.Max(0.0, newTime);
- m_PlayHead.showTooltip = true;
- }
- }
- }
|