86 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using UnityEngine.Playables;
 | |
| 
 | |
| namespace UnityEngine.Timeline
 | |
| {
 | |
|     /// <summary>
 | |
|     /// A PlayableBehaviour that manages a component that implements the ITimeControl interface
 | |
|     /// </summary>
 | |
|     public class TimeControlPlayable : PlayableBehaviour
 | |
|     {
 | |
|         ITimeControl m_timeControl;
 | |
| 
 | |
|         bool m_started;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Creates a Playable with a TimeControlPlayable behaviour attached
 | |
|         /// </summary>
 | |
|         /// <param name="graph">The PlayableGraph to inject the Playable into.</param>
 | |
|         /// <param name="timeControl">Component that implements the ITimeControl interface.</param>
 | |
|         /// <returns>The playable created</returns>
 | |
|         public static ScriptPlayable<TimeControlPlayable> Create(PlayableGraph graph, ITimeControl timeControl)
 | |
|         {
 | |
|             if (timeControl == null)
 | |
|                 return ScriptPlayable<TimeControlPlayable>.Null;
 | |
| 
 | |
|             var handle = ScriptPlayable<TimeControlPlayable>.Create(graph);
 | |
|             handle.GetBehaviour().Initialize(timeControl);
 | |
|             return handle;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Initializes the behaviour
 | |
|         /// </summary>
 | |
|         /// <param name="timeControl">Component that implements the ITimeControl interface</param>
 | |
|         public void Initialize(ITimeControl timeControl)
 | |
|         {
 | |
|             m_timeControl = timeControl;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// This function is called during the PrepareFrame phase of the PlayableGraph.
 | |
|         /// </summary>
 | |
|         /// <param name="playable">The Playable that owns the current PlayableBehaviour.</param>
 | |
|         /// <param name="info">A FrameData structure that contains information about the current frame context.</param>
 | |
|         public override void PrepareFrame(Playable playable, FrameData info)
 | |
|         {
 | |
|             Debug.Assert(m_started, "PrepareFrame has been called without OnControlTimeStart being called first.");
 | |
|             if (m_timeControl != null)
 | |
|                 m_timeControl.SetTime(playable.GetTime());
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// This function is called when the Playable play state is changed to Playables.PlayState.Playing.
 | |
|         /// </summary>
 | |
|         /// <param name="playable">The Playable that owns the current PlayableBehaviour.</param>
 | |
|         /// <param name="info">A FrameData structure that contains information about the current frame context.</param>
 | |
|         public override void OnBehaviourPlay(Playable playable, FrameData info)
 | |
|         {
 | |
|             if (m_timeControl == null)
 | |
|                 return;
 | |
| 
 | |
|             if (!m_started)
 | |
|             {
 | |
|                 m_timeControl.OnControlTimeStart();
 | |
|                 m_started = true;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// This function is called when the Playable play state is changed to PlayState.Paused.
 | |
|         /// </summary>
 | |
|         /// <param name="playable">The playable this behaviour is attached to.</param>
 | |
|         /// <param name="info">A FrameData structure that contains information about the current frame context.</param>
 | |
|         public override void OnBehaviourPause(Playable playable, FrameData info)
 | |
|         {
 | |
|             if (m_timeControl == null)
 | |
|                 return;
 | |
| 
 | |
|             if (m_started)
 | |
|             {
 | |
|                 m_timeControl.OnControlTimeStop();
 | |
|                 m_started = false;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |