// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2023 Kybernetik // using System; using UnityEngine; namespace Animancer { /// [Pro-Only] A which manages two float parameters. /// /// Documentation: Animator Controllers /// /// /// /// https://kybernetik.com.au/animancer/api/Animancer/Float2ControllerState /// public class Float2ControllerState : ControllerState { /************************************************************************************************************************/ /// An that creates a . public new interface ITransition : ITransition { } /************************************************************************************************************************/ private ParameterID _ParameterXID; /// The identifier of the parameter which will get and set. public ParameterID ParameterXID { get => _ParameterXID; set { _ParameterXID = value; _ParameterXID.ValidateHasParameter(Controller, AnimatorControllerParameterType.Float); } } /// /// Gets and sets a float parameter in the using the /// . /// /// The value is NaN or Infinity. public float ParameterX { get => Playable.GetFloat(_ParameterXID.Hash); set { AssertParameterValue(value); Playable.SetFloat(_ParameterXID.Hash, value); } } /************************************************************************************************************************/ private ParameterID _ParameterYID; /// The identifier of the parameter which will get and set. public ParameterID ParameterYID { get => _ParameterYID; set { _ParameterYID = value; _ParameterYID.ValidateHasParameter(Controller, AnimatorControllerParameterType.Float); } } /// /// Gets and sets a float parameter in the using the /// . /// /// The value is NaN or Infinity. public float ParameterY { get => Playable.GetFloat(_ParameterYID.Hash); set { AssertParameterValue(value); Playable.SetFloat(_ParameterYID.Hash, value); } } /************************************************************************************************************************/ /// /// Gets and sets and . /// public Vector2 Parameter { get => new Vector2(ParameterX, ParameterY); set { ParameterX = value.x; ParameterY = value.y; } } /************************************************************************************************************************/ /// Creates a new to play the `controller`. public Float2ControllerState(RuntimeAnimatorController controller, ParameterID parameterX, ParameterID parameterY, params ActionOnStop[] actionsOnStop) : base(controller, actionsOnStop) { _ParameterXID = parameterX; _ParameterXID.ValidateHasParameter(Controller, AnimatorControllerParameterType.Float); _ParameterYID = parameterY; _ParameterYID.ValidateHasParameter(Controller, AnimatorControllerParameterType.Float); } /// Creates a new to play the `controller`. public Float2ControllerState(RuntimeAnimatorController controller, ParameterID parameterX, ParameterID parameterY) : this(controller, parameterX, parameterY, null) { } /************************************************************************************************************************/ /// public override int ParameterCount => 2; /// public override int GetParameterHash(int index) { switch (index) { case 0: return _ParameterXID; case 1: return _ParameterYID; default: throw new ArgumentOutOfRangeException(nameof(index)); }; } /************************************************************************************************************************/ /// public override AnimancerState Clone(AnimancerPlayable root) { var clone = new Float2ControllerState(Controller, _ParameterXID, _ParameterYID); clone.SetNewCloneRoot(root); ((ICopyable)clone).CopyFrom(this); return clone; } /************************************************************************************************************************/ } }