CubismPhysicsInput.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  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="normalization">Normalized components.</param>
  25. /// <param name="weight">Weight.</param>
  26. public delegate void NormalizedParameterValueGetter(
  27. ref Vector2 targetTranslation,
  28. ref float targetAngle,
  29. CubismParameter parameter,
  30. CubismPhysicsNormalization normalization,
  31. float weight
  32. );
  33. /// <summary>
  34. /// Gets Normalized parameter value from input translation X-axis.
  35. /// </summary>
  36. /// <param name="targetTranslation">Result of translation.</param>
  37. /// <param name="targetAngle">Result of rotation.</param>
  38. /// <param name="parameter">Parameter.</param>
  39. /// <param name="normalization">Normalized components.</param>
  40. /// <param name="weight">Weight.</param>
  41. private void GetInputTranslationXFromNormalizedParameterValue(
  42. ref Vector2 targetTranslation,
  43. ref float targetAngle,
  44. CubismParameter parameter,
  45. CubismPhysicsNormalization normalization,
  46. float weight
  47. )
  48. {
  49. targetTranslation.x += CubismPhysicsMath.Normalize(
  50. parameter,
  51. normalization.Position.Minimum,
  52. normalization.Position.Maximum,
  53. normalization.Position.Default,
  54. IsInverted
  55. ) * weight;
  56. }
  57. /// <summary>
  58. /// Gets Normalized parameter value from input translation Y-axis.
  59. /// </summary>
  60. /// <param name="targetTranslation">Result of translation.</param>
  61. /// <param name="targetAngle">Result of rotation.</param>
  62. /// <param name="parameter">Parameter.</param>
  63. /// <param name="normalization">Normalized components.</param>
  64. /// <param name="weight">Weight.</param>
  65. private void GetInputTranslationYFromNormalizedParameterValue(
  66. ref Vector2 targetTranslation,
  67. ref float targetAngle,
  68. CubismParameter parameter,
  69. CubismPhysicsNormalization normalization,
  70. float weight
  71. )
  72. {
  73. targetTranslation.y += CubismPhysicsMath.Normalize(
  74. parameter,
  75. normalization.Position.Minimum,
  76. normalization.Position.Maximum,
  77. normalization.Position.Default,
  78. IsInverted
  79. ) * weight;
  80. }
  81. /// <summary>
  82. /// Gets Normalized parameter value from input rotation.
  83. /// </summary>
  84. /// <param name="targetTranslation">Result of translation.</param>
  85. /// <param name="targetAngle">Result of rotation.</param>
  86. /// <param name="parameter">Parameter.</param>
  87. /// <param name="normalization">Normalized components.</param>
  88. /// <param name="weight">Weight.</param>
  89. private void GetInputAngleFromNormalizedParameterValue(
  90. ref Vector2 targetTranslation,
  91. ref float targetAngle,
  92. CubismParameter parameter,
  93. CubismPhysicsNormalization normalization,
  94. float weight
  95. )
  96. {
  97. targetAngle += CubismPhysicsMath.Normalize(
  98. parameter,
  99. normalization.Angle.Minimum,
  100. normalization.Angle.Maximum,
  101. normalization.Angle.Default,
  102. IsInverted
  103. ) * weight;
  104. }
  105. public void InitializeGetter()
  106. {
  107. switch (SourceComponent)
  108. {
  109. case CubismPhysicsSourceComponent.X:
  110. {
  111. GetNormalizedParameterValue =
  112. GetInputTranslationXFromNormalizedParameterValue;
  113. }
  114. break;
  115. case CubismPhysicsSourceComponent.Y:
  116. {
  117. GetNormalizedParameterValue =
  118. GetInputTranslationYFromNormalizedParameterValue;
  119. }
  120. break;
  121. case CubismPhysicsSourceComponent.Angle:
  122. {
  123. GetNormalizedParameterValue =
  124. GetInputAngleFromNormalizedParameterValue;
  125. }
  126. break;
  127. }
  128. }
  129. /// <summary>
  130. /// Parameter ID of source.
  131. /// </summary>
  132. [SerializeField]
  133. public string SourceId;
  134. /// <summary>
  135. /// Scale of translation.
  136. /// </summary>
  137. [SerializeField]
  138. public Vector2 ScaleOfTranslation;
  139. /// <summary>
  140. /// Scale of angle.
  141. /// </summary>
  142. [SerializeField]
  143. public float AngleScale;
  144. /// <summary>
  145. /// Weight.
  146. /// </summary>
  147. [SerializeField]
  148. public float Weight;
  149. /// <summary>
  150. /// Component of source.
  151. /// </summary>
  152. [SerializeField]
  153. public CubismPhysicsSourceComponent SourceComponent;
  154. /// <summary>
  155. /// True if value is inverted; otherwise.
  156. /// </summary>
  157. [SerializeField]
  158. public bool IsInverted;
  159. /// <summary>
  160. /// Source data from parameter.
  161. /// </summary>
  162. [NonSerialized]
  163. public CubismParameter Source;
  164. /// <summary>
  165. /// Function of getting normalized parameter value.
  166. /// </summary>
  167. [NonSerialized]
  168. public NormalizedParameterValueGetter GetNormalizedParameterValue;
  169. }
  170. }