CubismPhysicsInput.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. /**
  2. * Copyright(c) Live2D Inc. All rights reserved.
  3. *
  4. * Use of this source code is governed by the Live2D Open Software license
  5. * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html.
  6. */
  7. using Live2D.Cubism.Core;
  8. using System;
  9. using UnityEngine;
  10. namespace Live2D.Cubism.Framework.Physics
  11. {
  12. /// <summary>
  13. /// Input data of physics.
  14. /// </summary>
  15. [Serializable]
  16. public struct CubismPhysicsInput
  17. {
  18. /// <summary>
  19. /// Delegation of function of getting normalized parameter value.
  20. /// </summary>
  21. /// <param name="targetTranslation">Result of translation.</param>
  22. /// <param name="targetAngle">Result of rotation.</param>
  23. /// <param name="parameter">Parameter.</param>
  24. /// <param name="parameterValue">Parameter value.</param>
  25. /// <param name="normalization">Normalized components.</param>
  26. /// <param name="weight">Weight.</param>
  27. public delegate void NormalizedParameterValueGetter(
  28. ref Vector2 targetTranslation,
  29. ref float targetAngle,
  30. CubismParameter parameter,
  31. ref float parameterValue,
  32. CubismPhysicsNormalization normalization,
  33. float weight
  34. );
  35. /// <summary>
  36. /// Gets Normalized parameter value from input translation X-axis.
  37. /// </summary>
  38. /// <param name="targetTranslation">Result of translation.</param>
  39. /// <param name="targetAngle">Result of rotation.</param>
  40. /// <param name="parameter">Parameter.</param>
  41. /// <param name="parameterValue">Parameter value.</param>
  42. /// <param name="normalization">Normalized components.</param>
  43. /// <param name="weight">Weight.</param>
  44. private void GetInputTranslationXFromNormalizedParameterValue(
  45. ref Vector2 targetTranslation,
  46. ref float targetAngle,
  47. CubismParameter parameter,
  48. ref float parameterValue,
  49. CubismPhysicsNormalization normalization,
  50. float weight
  51. )
  52. {
  53. targetTranslation.x += CubismPhysicsMath.Normalize(
  54. parameter,
  55. ref parameterValue,
  56. normalization.Position.Minimum,
  57. normalization.Position.Maximum,
  58. normalization.Position.Default,
  59. IsInverted
  60. ) * weight;
  61. }
  62. /// <summary>
  63. /// Gets Normalized parameter value from input translation Y-axis.
  64. /// </summary>
  65. /// <param name="targetTranslation">Result of translation.</param>
  66. /// <param name="targetAngle">Result of rotation.</param>
  67. /// <param name="parameter">Parameter.</param>
  68. /// <param name="parameterValue">Parameter value.</param>
  69. /// <param name="normalization">Normalized components.</param>
  70. /// <param name="weight">Weight.</param>
  71. private void GetInputTranslationYFromNormalizedParameterValue(
  72. ref Vector2 targetTranslation,
  73. ref float targetAngle,
  74. CubismParameter parameter,
  75. ref float parameterValue,
  76. CubismPhysicsNormalization normalization,
  77. float weight
  78. )
  79. {
  80. targetTranslation.y += CubismPhysicsMath.Normalize(
  81. parameter,
  82. ref parameterValue,
  83. normalization.Position.Minimum,
  84. normalization.Position.Maximum,
  85. normalization.Position.Default,
  86. IsInverted
  87. ) * weight;
  88. }
  89. /// <summary>
  90. /// Gets Normalized parameter value from input rotation.
  91. /// </summary>
  92. /// <param name="targetTranslation">Result of translation.</param>
  93. /// <param name="targetAngle">Result of rotation.</param>
  94. /// <param name="parameter">Parameter.</param>
  95. /// <param name="parameterValue">Parameter value.</param>
  96. /// <param name="normalization">Normalized components.</param>
  97. /// <param name="weight">Weight.</param>
  98. private void GetInputAngleFromNormalizedParameterValue(
  99. ref Vector2 targetTranslation,
  100. ref float targetAngle,
  101. CubismParameter parameter,
  102. ref float parameterValue,
  103. CubismPhysicsNormalization normalization,
  104. float weight
  105. )
  106. {
  107. targetAngle += CubismPhysicsMath.Normalize(
  108. parameter,
  109. ref parameterValue,
  110. normalization.Angle.Minimum,
  111. normalization.Angle.Maximum,
  112. normalization.Angle.Default,
  113. IsInverted
  114. ) * weight;
  115. }
  116. public void InitializeGetter()
  117. {
  118. switch (SourceComponent)
  119. {
  120. case CubismPhysicsSourceComponent.X:
  121. {
  122. GetNormalizedParameterValue =
  123. GetInputTranslationXFromNormalizedParameterValue;
  124. }
  125. break;
  126. case CubismPhysicsSourceComponent.Y:
  127. {
  128. GetNormalizedParameterValue =
  129. GetInputTranslationYFromNormalizedParameterValue;
  130. }
  131. break;
  132. case CubismPhysicsSourceComponent.Angle:
  133. {
  134. GetNormalizedParameterValue =
  135. GetInputAngleFromNormalizedParameterValue;
  136. }
  137. break;
  138. }
  139. }
  140. /// <summary>
  141. /// Parameter ID of source.
  142. /// </summary>
  143. [SerializeField]
  144. public string SourceId;
  145. /// <summary>
  146. /// Scale of translation.
  147. /// </summary>
  148. [SerializeField]
  149. public Vector2 ScaleOfTranslation;
  150. /// <summary>
  151. /// Scale of angle.
  152. /// </summary>
  153. [SerializeField]
  154. public float AngleScale;
  155. /// <summary>
  156. /// Weight.
  157. /// </summary>
  158. [SerializeField]
  159. public float Weight;
  160. /// <summary>
  161. /// Component of source.
  162. /// </summary>
  163. [SerializeField]
  164. public CubismPhysicsSourceComponent SourceComponent;
  165. /// <summary>
  166. /// True if value is inverted; otherwise.
  167. /// </summary>
  168. [SerializeField]
  169. public bool IsInverted;
  170. /// <summary>
  171. /// Source data from parameter.
  172. /// </summary>
  173. [NonSerialized]
  174. public CubismParameter Source;
  175. /// <summary>
  176. /// <see cref="Source"/> index.
  177. /// </summary>
  178. [NonSerialized]
  179. public int SourceIndex;
  180. /// <summary>
  181. /// Function of getting normalized parameter value.
  182. /// </summary>
  183. [NonSerialized]
  184. public NormalizedParameterValueGetter GetNormalizedParameterValue;
  185. }
  186. }