145 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			145 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System.Collections.Generic; | ||
|  | using UnityEngine; | ||
|  | 
 | ||
|  | namespace UnityEditor.Timeline | ||
|  | { | ||
|  |     internal interface ITimelinePlaybackControls | ||
|  |     { | ||
|  |         void Play(); | ||
|  |         void Pause(); | ||
|  |         void PreviousFrame(); | ||
|  |         void NextFrame(); | ||
|  |         void GoToFirstFrame(); | ||
|  |         void GoToLastFrame(); | ||
|  |         void SetCurrentTime(double time, TimelinePlaybackControls.Context context); | ||
|  |         void SetCurrentFrame(int frame, TimelinePlaybackControls.Context context); | ||
|  |         double GetCurrentTime(TimelinePlaybackControls.Context context); | ||
|  |         int GetCurrentFrame(TimelinePlaybackControls.Context context); | ||
|  |     } | ||
|  |     /// <summary> | ||
|  |     /// Use the TimelinePlaybackControls to manage the Timeline window's playback state, playhead location, and play range. | ||
|  |     /// </summary> | ||
|  |     public sealed class TimelinePlaybackControls | ||
|  |     { | ||
|  |         TimelineWindow.TimelinePlaybackControlsImpl m_Impl; | ||
|  | 
 | ||
|  |         internal TimelinePlaybackControls(IWindowStateProvider stateProvider) | ||
|  |         { | ||
|  |             m_Impl = new TimelineWindow.TimelinePlaybackControlsImpl(stateProvider); | ||
|  |         } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Use Context to specify whether the time is based on local time or global time. | ||
|  |         /// </summary> | ||
|  |         public enum Context | ||
|  |         { | ||
|  |             /// <summary> | ||
|  |             /// Time is relative to the current Timeline | ||
|  |             /// </summary> | ||
|  |             Local, | ||
|  |             /// <summary> | ||
|  |             /// Time is relative to the main Timeline | ||
|  |             /// </summary> | ||
|  |             Global | ||
|  |         } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Starts playback. | ||
|  |         /// </summary> | ||
|  |         /// <exception cref="System.InvalidOperationException">The Window associated with this instance has been destroyed.</exception> | ||
|  |         public void Play() { m_Impl.Play(); } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Pauses playback. | ||
|  |         /// </summary> | ||
|  |         /// <exception cref="System.InvalidOperationException">The Window associated with this instance has been destroyed.</exception> | ||
|  |         public void Pause() { m_Impl.Pause(); } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Moves the playhead to the previous frame. | ||
|  |         /// </summary> | ||
|  |         /// <exception cref="System.InvalidOperationException">The Window associated with this instance has been destroyed.</exception> | ||
|  |         public void PreviousFrame() { m_Impl.PreviousFrame(); } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Moves the playhead to the next frame. | ||
|  |         /// </summary> | ||
|  |         /// <exception cref="System.InvalidOperationException">The Window associated with this instance has been destroyed.</exception> | ||
|  |         public void NextFrame() { m_Impl.NextFrame(); } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Moves the playhead to the first frame. | ||
|  |         /// </summary> | ||
|  |         /// <exception cref="System.InvalidOperationException"> The Window associated with this instance has been destroyed.</exception> | ||
|  |         public void GoToFirstFrame() { m_Impl.GoToFirstFrame(); } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Moves the playhead to the last frame. | ||
|  |         /// </summary> | ||
|  |         /// <exception cref="System.InvalidOperationException"> The Window associated with this instance has been destroyed.</exception> | ||
|  |         public void GoToLastFrame() { m_Impl.GoToLastFrame(); } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Moves the playhead to a specific time. | ||
|  |         /// </summary> | ||
|  |         /// <param name="time">The time in seconds.</param> | ||
|  |         /// <param name="context"> | ||
|  |         /// Use Context with a Sub-Timeline to specify whether the specified time is relative to the Sub-Timeline or the main Timeline. | ||
|  |         /// If the Timeline is not a Sub-Timeline, the context uses local time regardless of the specified context. | ||
|  |         /// Use <see cref="Context.Local"/>, the default, to move the playhead relative to the Sub-Timeline or Timeline. | ||
|  |         /// Use <see cref="Context.Global"/> to move the playhead relative to the main Timeline. | ||
|  |         /// </param> | ||
|  |         /// <exception cref="System.InvalidOperationException">The Window associated with this instance has been destroyed.</exception> | ||
|  |         /// <exception cref="System.ArgumentException">The context is invalid.</exception> | ||
|  |         public void SetCurrentTime(double time, Context context = Context.Local) { m_Impl.SetCurrentTime(time, context); } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Moves the playhead to a specific frame. | ||
|  |         /// </summary> | ||
|  |         /// <param name="frame">The frame to move to.</param> | ||
|  |         /// <param name="context"> | ||
|  |         /// Use Context with a Sub-Timeline to specify whether the specified frame is relative to the Sub-Timeline or the main Timeline. | ||
|  |         /// If the Timeline is not a Sub-Timeline, the context uses local time regardless of the specified context. | ||
|  |         /// Use <see cref="Context.Local"/>, the default, to move the playhead relative to the Sub-Timeine. | ||
|  |         /// Use <see cref="Context.Global"/> to move the playhead relative to the main Timeline. | ||
|  |         /// </param> | ||
|  |         /// <exception cref="System.InvalidOperationException">The Window associated with this instance has been destroyed.</exception> | ||
|  |         /// <exception cref="System.ArgumentException">The context is invalid.</exception> | ||
|  |         public void SetCurrentFrame(int frame, Context context = Context.Local) { m_Impl.SetCurrentFrame(frame, context); } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Retrieves the location of the timeline playhead in seconds. | ||
|  |         /// </summary> | ||
|  |         /// <param name="context"> | ||
|  |         /// Use Context with a Sub-Timeline to specify whether the returned value is relative to the Sub-Timeline or the main Timeline. | ||
|  |         /// If the Timeline is not a Sub-Timeline, the context uses local time regardless of the specified context. | ||
|  |         /// Use <see cref="Context.Local"/>, the default, to retrieve the playhead location relative to the Sub-Timeline. | ||
|  |         /// Use <see cref="Context.Global"/> to retrive the location relative to the main Timeline. | ||
|  |         /// </param> | ||
|  |         /// <exception cref="System.InvalidOperationException">The Window associated with this instance has been destroyed.</exception> | ||
|  |         /// <exception cref="System.ArgumentException">The context is invalid.</exception> | ||
|  |         /// <returns>The playhead location in seconds.</returns> | ||
|  |         public double GetCurrentTime(Context context = Context.Local) | ||
|  |         { | ||
|  |             return m_Impl.GetCurrentTime(context); | ||
|  |         } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Retrieves the location of the timeline playhead in frames. | ||
|  |         /// </summary> | ||
|  |         /// <param name="context"> | ||
|  |         /// Use Context with a Sub-Timeline to specify whether the returned value is relative to the Sub-Timeline or the main Timeline. | ||
|  |         /// If the Timeline is not a Sub-Timeline, the context uses local time regardless of the specified context. | ||
|  |         /// Use <see cref="Context.Local"/>, the default, to retrieve the playhead location relative to the Sub-Timeline. | ||
|  |         /// Use <see cref="Context.Global"/> to retrive the playhead location relative to the main Timeline. | ||
|  |         /// </param> | ||
|  |         /// <exception cref="System.InvalidOperationException">The Window associated with this instance has been destroyed.</exception> | ||
|  |         /// <exception cref="System.ArgumentException">The context is invalid.</exception> | ||
|  |         /// <returns>The playhead location in frames.</returns> | ||
|  |         public int GetCurrentFrame(Context context = Context.Local) | ||
|  |         { | ||
|  |             return m_Impl.GetCurrentFrame(context); | ||
|  |         } | ||
|  |     } | ||
|  | } |