You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
3.2 KiB
85 lines
3.2 KiB
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"></param> |
|
/// <returns></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; |
|
} |
|
} |
|
} |
|
}
|
|
|