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