| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 | // Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik //using System;using System.Collections.Generic;using UnityEngine;namespace Animancer{    /// <summary>A <see cref="ScriptableObject"/> based <see cref="ITransition"/>.</summary>    /// <remarks>    /// <strong>Documentation:</strong>    /// <see href="https://kybernetik.com.au/animancer/docs/manual/transitions/assets">    /// Transition Assets</see>    /// <para></para>    /// When adding a <see cref="CreateAssetMenuAttribute"/> to any derived classes, you can use    /// <see cref="Strings.MenuPrefix"/> and <see cref="Strings.AssetMenuOrder"/>.    /// </remarks>    /// https://kybernetik.com.au/animancer/api/Animancer/TransitionAssetBase    [AnimancerHelpUrl(typeof(TransitionAssetBase))]    public abstract partial class TransitionAssetBase : ScriptableObject,        ITransition,        ITransitionDetailed,        IWrapper,        IAnimationClipSource    {        /************************************************************************************************************************/        /// <summary>The name of the serialized backing field of <see cref="GetTransition"/>.</summary>        public const string TransitionField = "_Transition";        /************************************************************************************************************************/        /// <summary>Returns the <see cref="ITransitionDetailed"/> wrapped by this <see cref="ScriptableObject"/>.</summary>        public abstract ITransitionDetailed GetTransition();        /// <inheritdoc/>        object IWrapper.WrappedObject            => this != null            ? GetTransition()            : null;        /************************************************************************************************************************/        /// <inheritdoc/>        public virtual float FadeDuration => GetTransition().FadeDuration;        /// <inheritdoc/>        public virtual object Key => GetTransition().Key;        /// <inheritdoc/>        public virtual FadeMode FadeMode => GetTransition().FadeMode;        /// <inheritdoc/>        public virtual AnimancerState CreateState() => GetTransition().CreateState();        /// <inheritdoc/>        public virtual void Apply(AnimancerState state)        {            GetTransition().Apply(state);            state.SetDebugName(this);        }        /************************************************************************************************************************/        /// <summary>Can this transition create a valid <see cref="AnimancerState"/>?</summary>        /// <remarks>        /// Use <see cref="AnimancerUtilities.IsValid(ITransition)"/>        /// to also null check this reference, i.e: <c>transition.IsValid()</c>.        /// </remarks>        public virtual bool IsValid            => this != null            && GetTransition().IsValid();        /// <inheritdoc/>        public bool IsLooping => GetTransition().IsLooping;        /// <inheritdoc/>        public float NormalizedStartTime        {            get => GetTransition().NormalizedStartTime;            set => GetTransition().NormalizedStartTime = value;        }        /// <inheritdoc/>        public float MaximumDuration => GetTransition().MaximumDuration;        /// <inheritdoc/>        public float Speed        {            get => GetTransition().Speed;            set => GetTransition().Speed = value;        }        /************************************************************************************************************************/        /// <summary>[<see cref="IAnimationClipSource"/>]        /// Calls <see cref="AnimancerUtilities.GatherFromSource(ICollection{AnimationClip}, object)"/>.        /// </summary>        public virtual void GetAnimationClips(List<AnimationClip> clips)            => clips.GatherFromSource(GetTransition());        /************************************************************************************************************************/#if UNITY_EDITOR        /// <summary>[Editor-Only] Creates an instance of the main non-abstract inheritor of this class.</summary>        /// <remarks><c>TransitionAsset</c> sets this to use itself by default.</remarks>        public static new Func<ITransitionDetailed, TransitionAssetBase> CreateInstance { get; set; }#endif        /************************************************************************************************************************/    }}
 |