// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik // using System; using System.Collections.Generic; using UnityEngine; namespace Animancer { /// /// https://kybernetik.com.au/animancer/api/Animancer/TransitionAsset_1 [AnimancerHelpUrl(typeof(TransitionAsset))] public class TransitionAsset : TransitionAssetBase where TTransition : ITransitionDetailed { /************************************************************************************************************************/ [SerializeReference] private TTransition _Transition; /// [] /// The wrapped by this . /// /// /// WARNING: the holds the most recently played state, so /// if you're sharing this transition between multiple objects it will only remember one of them. /// /// You can use /// or /// to get or create the state for a specific object. /// public TTransition Transition { get { AssertTransition(); return _Transition; } set => _Transition = value; } /// Returns the wrapped by this . public override ITransitionDetailed GetTransition() { AssertTransition(); return _Transition; } /************************************************************************************************************************/ /// [Assert-Conditional] /// Throws a if the is null. /// [System.Diagnostics.Conditional(Strings.Assertions)] private void AssertTransition() { if (_Transition == null) throw new NullReferenceException( $"'{name}' {nameof(Transition)} is null." + $" {nameof(HasTransition)} can be used to check without triggering this error."); } /************************************************************************************************************************/ /// public override bool IsValid => _Transition.IsValid(); /// public override float FadeDuration => _Transition.FadeDuration; /// public override object Key => _Transition.Key; /// public override FadeMode FadeMode => _Transition.FadeMode; /// public override AnimancerState CreateState() => _Transition.CreateState(); /// public override void Apply(AnimancerState state) { _Transition.Apply(state); state.SetDebugName(this); } /// public override void GetAnimationClips(List clips) => clips.GatherFromSource(_Transition); /************************************************************************************************************************/ /// Is the assigned (i.e. not null)? public bool HasTransition => _Transition != null; /************************************************************************************************************************/ #if UNITY_EDITOR /// [Editor-Only] /// Assigns a default to the field. /// protected virtual void Reset() { _Transition = AnimancerReflection.CreateDefaultInstance(); } #endif /************************************************************************************************************************/ } }