AnimancerTransitionAssetBase.cs 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // Animancer // https://kybernetik.com.au/animancer // Copyright 2022 Kybernetik //
  2. using UnityEngine;
  3. using System.Collections.Generic;
  4. #if UNITY_EDITOR
  5. using UnityEditor;
  6. #endif
  7. namespace Animancer
  8. {
  9. /// <summary>A <see cref="ScriptableObject"/> based <see cref="ITransition"/>.</summary>
  10. /// <remarks>
  11. /// Documentation: <see href="https://kybernetik.com.au/animancer/docs/manual/transitions/assets">Transition Assets</see>
  12. /// <para></para>
  13. /// When adding a <see cref="CreateAssetMenuAttribute"/> to any derived classes, you can use
  14. /// <see cref="Strings.MenuPrefix"/> and <see cref="Strings.AssetMenuOrder"/>.
  15. /// <para></para>
  16. /// If you are using <see cref="AnimancerEvent"/>s, consider using an <see cref="UnShared{TAsset}"/> instead of
  17. /// referencing this asset directly in order to avoid common issues with shared events.
  18. /// </remarks>
  19. /// https://kybernetik.com.au/animancer/api/Animancer/AnimancerTransitionAssetBase
  20. ///
  21. [HelpURL(Strings.DocsURLs.APIDocumentation + "/" + nameof(AnimancerTransitionAssetBase))]
  22. public abstract partial class AnimancerTransitionAssetBase : ScriptableObject, ITransition, IWrapper, IAnimationClipSource
  23. {
  24. /************************************************************************************************************************/
  25. /// <summary>Returns the <see cref="ITransition"/> wrapped by this <see cref="ScriptableObject"/>.</summary>
  26. public abstract ITransition GetTransition();
  27. /// <inheritdoc/>
  28. object IWrapper.WrappedObject => GetTransition();
  29. /************************************************************************************************************************/
  30. /// <summary>Can this transition create a valid <see cref="AnimancerState"/>?</summary>
  31. public virtual bool IsValid => GetTransition().IsValid();
  32. /// <inheritdoc/>
  33. public virtual float FadeDuration => GetTransition().FadeDuration;
  34. /// <inheritdoc/>
  35. public virtual object Key => GetTransition().Key;
  36. /// <inheritdoc/>
  37. public virtual FadeMode FadeMode => GetTransition().FadeMode;
  38. /// <inheritdoc/>
  39. public virtual AnimancerState CreateState() => GetTransition().CreateState();
  40. /// <inheritdoc/>
  41. public virtual void Apply(AnimancerState state)
  42. {
  43. GetTransition().Apply(state);
  44. state.SetDebugName(name);
  45. }
  46. /************************************************************************************************************************/
  47. /// <summary>[<see cref="IAnimationClipSource"/>]
  48. /// Calls <see cref="AnimancerUtilities.GatherFromSource(ICollection{AnimationClip}, object)"/>.
  49. /// </summary>
  50. public virtual void GetAnimationClips(List<AnimationClip> clips)
  51. => clips.GatherFromSource(GetTransition());
  52. /************************************************************************************************************************/
  53. }
  54. }
  55. /************************************************************************************************************************/
  56. #if UNITY_EDITOR
  57. namespace Animancer.Editor
  58. {
  59. /// <summary>A custom editor for <see cref="AnimancerTransitionAssetBase"/>.</summary>
  60. [CustomEditor(typeof(AnimancerTransitionAssetBase), true), CanEditMultipleObjects]
  61. internal class AnimancerTransitionAssetBaseEditor : ScriptableObjectEditor { }
  62. }
  63. #endif