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