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