using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.Playables; using UnityEngine.Timeline; namespace UnityEditor.Timeline.Actions { /// <summary> /// Action context to be used by actions. /// </summary> /// <seealso cref="Invoker"/> /// <seealso cref="TimelineAction"/> public struct ActionContext { IEnumerable<TrackAsset> m_Tracks; IEnumerable<TimelineClip> m_Clips; IEnumerable<IMarker> m_Markers; /// <summary> /// The Timeline asset that is currently opened in the Timeline window. /// </summary> public TimelineAsset timeline; /// <summary> /// The PlayableDirector that is used to play the current Timeline asset. /// </summary> public PlayableDirector director; /// <summary> /// Time based on the position of the cursor on the timeline (in seconds). /// null if the time is not available (in case of a shortcut for example). /// </summary> public double? invocationTime; /// <summary> /// Tracks that will be used by the actions. /// </summary> public IEnumerable<TrackAsset> tracks { get => m_Tracks ?? Enumerable.Empty<TrackAsset>(); set => m_Tracks = value; } /// <summary> /// Clips that will be used by the actions. /// </summary> public IEnumerable<TimelineClip> clips { get => m_Clips ?? Enumerable.Empty<TimelineClip>(); set => m_Clips = value; } /// <summary> /// Markers that will be used by the actions. /// </summary> public IEnumerable<IMarker> markers { get => m_Markers ?? Enumerable.Empty<IMarker>(); set => m_Markers = value; } } }