// 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
/************************************************************************************************************************/
}
}