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);
 | |
|         }
 | |
|     }
 | |
| }
 |