Float2ControllerState.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. // Animancer // https://kybernetik.com.au/animancer // Copyright 2022 Kybernetik //
  2. using System;
  3. using UnityEngine;
  4. namespace Animancer
  5. {
  6. /// <summary>[Pro-Only] A <see cref="ControllerState"/> which manages two float parameters.</summary>
  7. /// <remarks>
  8. /// Documentation: <see href="https://kybernetik.com.au/animancer/docs/manual/animator-controllers">Animator Controllers</see>
  9. /// </remarks>
  10. /// <seealso cref="Float1ControllerState"/>
  11. /// <seealso cref="Float3ControllerState"/>
  12. /// https://kybernetik.com.au/animancer/api/Animancer/Float2ControllerState
  13. ///
  14. public class Float2ControllerState : ControllerState
  15. {
  16. /************************************************************************************************************************/
  17. /// <summary>An <see cref="ITransition{TState}"/> that creates a <see cref="Float2ControllerState"/>.</summary>
  18. public new interface ITransition : ITransition<Float2ControllerState> { }
  19. /************************************************************************************************************************/
  20. private ParameterID _ParameterXID;
  21. /// <summary>The identifier of the parameter which <see cref="ParameterX"/> will get and set.</summary>
  22. public ParameterID ParameterXID
  23. {
  24. get => _ParameterXID;
  25. set
  26. {
  27. _ParameterXID = value;
  28. _ParameterXID.ValidateHasParameter(Controller, AnimatorControllerParameterType.Float);
  29. }
  30. }
  31. /// <summary>
  32. /// Gets and sets a float parameter in the <see cref="ControllerState.Controller"/> using the
  33. /// <see cref="ParameterXID"/>.
  34. /// </summary>
  35. /// <exception cref="ArgumentOutOfRangeException">The value is NaN or Infinity.</exception>
  36. public float ParameterX
  37. {
  38. get => Playable.GetFloat(_ParameterXID.Hash);
  39. set
  40. {
  41. AssertParameterValue(value);
  42. Playable.SetFloat(_ParameterXID.Hash, value);
  43. }
  44. }
  45. /************************************************************************************************************************/
  46. private ParameterID _ParameterYID;
  47. /// <summary>The identifier of the parameter which <see cref="ParameterY"/> will get and set.</summary>
  48. public ParameterID ParameterYID
  49. {
  50. get => _ParameterYID;
  51. set
  52. {
  53. _ParameterYID = value;
  54. _ParameterYID.ValidateHasParameter(Controller, AnimatorControllerParameterType.Float);
  55. }
  56. }
  57. /// <summary>
  58. /// Gets and sets a float parameter in the <see cref="ControllerState.Controller"/> using the
  59. /// <see cref="ParameterYID"/>.
  60. /// </summary>
  61. /// <exception cref="ArgumentOutOfRangeException">The value is NaN or Infinity.</exception>
  62. public float ParameterY
  63. {
  64. get => Playable.GetFloat(_ParameterYID.Hash);
  65. set
  66. {
  67. AssertParameterValue(value);
  68. Playable.SetFloat(_ParameterYID.Hash, value);
  69. }
  70. }
  71. /************************************************************************************************************************/
  72. /// <summary>
  73. /// Gets and sets <see cref="ParameterX"/> and <see cref="ParameterY"/>.
  74. /// </summary>
  75. public Vector2 Parameter
  76. {
  77. get => new Vector2(ParameterX, ParameterY);
  78. set
  79. {
  80. ParameterX = value.x;
  81. ParameterY = value.y;
  82. }
  83. }
  84. /************************************************************************************************************************/
  85. /// <summary>Creates a new <see cref="Float2ControllerState"/> to play the `controller`.</summary>
  86. public Float2ControllerState(RuntimeAnimatorController controller,
  87. ParameterID parameterX, ParameterID parameterY, params ActionOnStop[] actionsOnStop)
  88. : base(controller, actionsOnStop)
  89. {
  90. _ParameterXID = parameterX;
  91. _ParameterXID.ValidateHasParameter(Controller, AnimatorControllerParameterType.Float);
  92. _ParameterYID = parameterY;
  93. _ParameterYID.ValidateHasParameter(Controller, AnimatorControllerParameterType.Float);
  94. }
  95. /// <summary>Creates a new <see cref="Float2ControllerState"/> to play the `controller`.</summary>
  96. public Float2ControllerState(RuntimeAnimatorController controller, ParameterID parameterX, ParameterID parameterY)
  97. : this(controller, parameterX, parameterY, null)
  98. { }
  99. /************************************************************************************************************************/
  100. /// <inheritdoc/>
  101. public override int ParameterCount => 2;
  102. /// <inheritdoc/>
  103. public override int GetParameterHash(int index)
  104. {
  105. switch (index)
  106. {
  107. case 0: return _ParameterXID;
  108. case 1: return _ParameterYID;
  109. default: throw new ArgumentOutOfRangeException(nameof(index));
  110. };
  111. }
  112. /************************************************************************************************************************/
  113. }
  114. }