106 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			106 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System; | ||
|  | using System.Linq; | ||
|  | using UnityEngine; | ||
|  | using UnityEngine.Timeline; | ||
|  | 
 | ||
|  | namespace UnityEditor.Timeline | ||
|  | { | ||
|  |     partial class TimelineWindow | ||
|  |     { | ||
|  |         /// <summary> | ||
|  |         /// Internal class that implements TimelinePlaybackControls | ||
|  |         /// </summary> | ||
|  |         internal class TimelinePlaybackControlsImpl : ITimelinePlaybackControls | ||
|  |         { | ||
|  |             public TimelinePlaybackControlsImpl(IWindowStateProvider window) | ||
|  |             { | ||
|  |                 if (window == null) | ||
|  |                     throw new ArgumentNullException(nameof(window), | ||
|  |                         "TimelineNavigator cannot be used with a null window"); | ||
|  |                 m_Window = window; | ||
|  |             } | ||
|  | 
 | ||
|  |             public void Play() | ||
|  |             { | ||
|  |                 windowState.SetPlaying(true); | ||
|  |             } | ||
|  | 
 | ||
|  |             public void Pause() | ||
|  |             { | ||
|  |                 windowState.SetPlaying(false); | ||
|  |             } | ||
|  | 
 | ||
|  |             public void PreviousFrame() | ||
|  |             { | ||
|  |                 windowState.editSequence.frame--; | ||
|  |             } | ||
|  | 
 | ||
|  |             public void NextFrame() | ||
|  |             { | ||
|  |                 windowState.editSequence.frame++; | ||
|  |             } | ||
|  | 
 | ||
|  |             public void GoToFirstFrame() | ||
|  |             { | ||
|  |                 windowState.editSequence.time = 0; | ||
|  |             } | ||
|  | 
 | ||
|  |             public void GoToLastFrame() | ||
|  |             { | ||
|  |                 windowState.editSequence.time = windowState.editSequence.duration; | ||
|  |             } | ||
|  | 
 | ||
|  |             public void SetCurrentTime(double time, TimelinePlaybackControls.Context context) | ||
|  |             { | ||
|  |                 ISequenceState targetSequenceState = GetTargetSequenceState(context); | ||
|  |                 targetSequenceState.time = time; | ||
|  |             } | ||
|  | 
 | ||
|  |             public void SetCurrentFrame(int frame, TimelinePlaybackControls.Context context) | ||
|  |             { | ||
|  |                 ISequenceState targetSequenceState = GetTargetSequenceState(context); | ||
|  |                 targetSequenceState.frame = frame; | ||
|  |             } | ||
|  | 
 | ||
|  |             public double GetCurrentTime(TimelinePlaybackControls.Context context) | ||
|  |             { | ||
|  |                 ISequenceState targetSequenceState = GetTargetSequenceState(context); | ||
|  |                 return targetSequenceState.time; | ||
|  |             } | ||
|  | 
 | ||
|  |             public int GetCurrentFrame(TimelinePlaybackControls.Context context) | ||
|  |             { | ||
|  |                 ISequenceState targetSequenceState = GetTargetSequenceState(context); | ||
|  |                 return targetSequenceState.frame; | ||
|  |             } | ||
|  | 
 | ||
|  |             ISequenceState GetTargetSequenceState(TimelinePlaybackControls.Context context) | ||
|  |             { | ||
|  |                 switch (context) | ||
|  |                 { | ||
|  |                     case TimelinePlaybackControls.Context.Global: | ||
|  |                         return windowState.masterSequence; | ||
|  |                     case TimelinePlaybackControls.Context.Local: | ||
|  |                         return windowState.editSequence; | ||
|  |                     default: | ||
|  |                         throw new ArgumentException("Unknown Context", nameof(context)); | ||
|  |                 } | ||
|  |             } | ||
|  | 
 | ||
|  |             IWindowState windowState | ||
|  |             { | ||
|  |                 get | ||
|  |                 { | ||
|  |                     if (m_Window == null || m_Window.windowState == null) | ||
|  |                         throw new InvalidOperationException("The Window associated to this instance has been destroyed"); | ||
|  |                     return m_Window.windowState; | ||
|  |                 } | ||
|  |             } | ||
|  | 
 | ||
|  |             readonly IWindowStateProvider m_Window; | ||
|  |         } | ||
|  | 
 | ||
|  |         public override TimelinePlaybackControls playbackControls => new TimelinePlaybackControls(this); | ||
|  |     } | ||
|  | } |