// Animancer // Copyright 2020 Kybernetik // #pragma warning disable CS0618 // Type or member is obsolete (for Animancer Events in Animancer Lite). #pragma warning disable CS0649 // Field is never assigned to, and will always have its default value. using UnityEngine; namespace Animancer.Examples.Events { /// <summary> /// An <see cref="GolfHitController"/> that uses an Animancer Event which has its time set in the Inspector but its /// callback left blank so that it can be assigned by code (a "hybrid" between Inspector and Code based systems). /// </summary> [AddComponentMenu(Strings.MenuPrefix + "Examples/Golf Events - Animancer Hybrid")] [HelpURL(Strings.APIDocumentationURL + ".Examples.AnimationEvents/GolfHitControllerAnimancerHybrid")] public sealed class GolfHitControllerAnimancerHybrid : GolfHitController { /************************************************************************************************************************/ /// <summary> /// Calls the base <see cref="GolfHitController.Awake"/> method and register /// <see cref="GolfHitController.EndSwing"/> to be called whenever the swing animation ends. /// <para></para> /// The <see cref="GolfHitController._Swing"/> transition has its End Time set so that it will execute the /// registered method at some point during the animation, but its End Callback was left blank so it can be /// assigned here. /// </summary> protected override void Awake() { base.Awake(); Debug.Assert(_Swing.Events.Sequence.Count == 1, "Expected one event for hitting the ball", this); _Swing.Events.Sequence.Set(0, HitBall); // If we did not create the event in the Inspector, we could add it here: //_Swing.Events.Sequence.Add(new AnimancerEvent(0.375f, OnHitBall)); _Swing.Events.Sequence.OnEnd = EndSwing; } /************************************************************************************************************************/ } }