65 lines
2.3 KiB
C#
65 lines
2.3 KiB
C#
|
// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2023 Kybernetik //
|
||
|
|
||
|
using UnityEngine.Playables;
|
||
|
|
||
|
namespace Animancer
|
||
|
{
|
||
|
/// https://kybernetik.com.au/animancer/api/Animancer/AnimancerState
|
||
|
partial class AnimancerState
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Uses <see cref="AnimancerPlayable.RequirePostUpdate"/> to pause a <see cref="AnimancerNode._Playable"/>.
|
||
|
/// </summary>
|
||
|
public class DelayedPause : Key, IUpdatable
|
||
|
{
|
||
|
/************************************************************************************************************************/
|
||
|
|
||
|
/// <summary>The <see cref="AnimancerNode.Root"/>.</summary>
|
||
|
public AnimancerPlayable Root { get; set; }
|
||
|
|
||
|
/// <summary>The state that will be paused.</summary>
|
||
|
public AnimancerState State { get; set; }
|
||
|
|
||
|
/************************************************************************************************************************/
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets a <see cref="DelayedPause"/> from the <see cref="ObjectPool"/> and initializes it for the `state`.
|
||
|
/// </summary>
|
||
|
public static void Register(AnimancerState state)
|
||
|
{
|
||
|
var root = state.Root;
|
||
|
if (root == null)
|
||
|
return;
|
||
|
|
||
|
var pause = ObjectPool.Acquire<DelayedPause>();
|
||
|
pause.Root = root;
|
||
|
pause.State = state;
|
||
|
|
||
|
root.RequirePostUpdate(pause);
|
||
|
}
|
||
|
|
||
|
/************************************************************************************************************************/
|
||
|
|
||
|
/// <summary>
|
||
|
/// Pauses the <see cref="State"/> if <see cref="IsPlaying"/> hasn't been set to true and returns this
|
||
|
/// object to the <see cref="ObjectPool"/>.
|
||
|
/// </summary>
|
||
|
public void Update()
|
||
|
{
|
||
|
if (!State.IsPlaying)
|
||
|
State._Playable.Pause();
|
||
|
|
||
|
Root.CancelPostUpdate(this);
|
||
|
|
||
|
Root = null;
|
||
|
State = null;
|
||
|
|
||
|
ObjectPool.Release(this);
|
||
|
}
|
||
|
|
||
|
/************************************************************************************************************************/
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|