2025-05-09 15:40:34 +08:00

55 lines
2.1 KiB
C#

// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik //
using UnityEngine.Animations;
namespace Animancer
{
/// <summary>[Pro-Only]
/// A base class that allows Animation Jobs to be easily inserted into an Animancer graph.
/// </summary>
///
/// <remarks>
/// <strong>Documentation:</strong>
/// <see href="https://kybernetik.com.au/animancer/docs/manual/ik#animated-properties">
/// Animated Properties</see>
/// </remarks>
///
/// https://kybernetik.com.au/animancer/api/Animancer/AnimancerJob_1
///
public abstract class AnimancerJob<T> where T : struct, IAnimationJob
{
/************************************************************************************************************************/
/// <summary>The <see cref="IAnimationJob"/>.</summary>
protected T _Job;
/// <summary>The <see cref="AnimationScriptPlayable"/> running the job.</summary>
protected AnimationScriptPlayable _Playable;
/************************************************************************************************************************/
/// <summary>Creates the <see cref="_Playable"/> and inserts it between the root and the graph output.</summary>
protected void CreatePlayable(AnimancerGraph animancer)
{
_Playable = animancer.InsertOutputJob(_Job);
}
/************************************************************************************************************************/
/// <summary>
/// Destroys the <see cref="_Playable"/> and restores the graph connection it was intercepting.
/// </summary>
/// <remarks>
/// This method is NOT called automatically, so if you need to guarantee that things will get cleaned up you
/// should use <see cref="AnimancerGraph.Disposables"/>.
/// </remarks>
public virtual void Destroy()
{
AnimancerUtilities.RemovePlayable(_Playable);
}
/************************************************************************************************************************/
}
}