CubismParameterExtensionMethods.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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. namespace Live2D.Cubism.Framework
  9. {
  10. /// <summary>
  11. /// Extensions for <see cref="CubismParameter"/>s.
  12. /// </summary>
  13. public static class CubismParameterExtensionMethods
  14. {
  15. /// <summary>
  16. /// Additively blends a value in.
  17. /// </summary>
  18. /// <param name="parameter"><see langword="this"/>.</param>
  19. /// <param name="value">Value to blend in.</param>
  20. /// <param name="weight">Blend weight.</param>
  21. public static void AddToValue(this CubismParameter parameter, float value, float weight = 1f)
  22. {
  23. if (parameter == null)
  24. {
  25. return;
  26. }
  27. parameter.OverrideValue(parameter.Value + (value * weight));
  28. }
  29. /// <summary>
  30. /// Multiply blends a value in.
  31. /// </summary>
  32. /// <param name="parameter"><see langword="this"/>.</param>
  33. /// <param name="value">Value to blend in.</param>
  34. /// <param name="weight">Blend weight.</param>
  35. public static void MultiplyValueBy(this CubismParameter parameter, float value, float weight = 1f)
  36. {
  37. if (parameter == null)
  38. {
  39. return;
  40. }
  41. parameter.OverrideValue(parameter.Value * (1f + ((value - 1f) * weight)));
  42. }
  43. /// <summary>
  44. /// Override blends a value in.
  45. /// </summary>
  46. /// <param name="parameter"><see langword="this"/>.</param>
  47. /// <param name="value">Value to blend in.</param>
  48. /// <param name="weight">Blend weight.</param>
  49. public static void OverrideValue(this CubismParameter parameter, float value, float weight = 1.0f)
  50. {
  51. if (parameter == null)
  52. {
  53. return;
  54. }
  55. if (parameter.IsRepeat())
  56. {
  57. value = parameter.GetParameterRepeatValue(value);
  58. }
  59. else
  60. {
  61. value = parameter.GetParameterClampValue(value);
  62. }
  63. parameter.Value = parameter.Value * (1 - weight) + value * weight;
  64. }
  65. /// <summary>
  66. /// Blends a value in.
  67. /// </summary>
  68. /// <param name="self"><see langword="this"/>.</param>
  69. /// <param name="value">Value to blend in.</param>
  70. /// <param name="mode">Blend mode to use.</param>
  71. public static void BlendToValue(this CubismParameter self, CubismParameterBlendMode mode, float value, float weight = 1.0f)
  72. {
  73. if (self == null)
  74. {
  75. return;
  76. }
  77. if (mode == CubismParameterBlendMode.Additive)
  78. {
  79. self.AddToValue(value, weight);
  80. return;
  81. }
  82. if (mode == CubismParameterBlendMode.Multiply)
  83. {
  84. self.MultiplyValueBy(value, weight);
  85. return;
  86. }
  87. self.OverrideValue(self.Value * (1 - weight) + value * weight);
  88. }
  89. /// <summary>
  90. /// Blends the same value into multiple <see cref="CubismParameter"/>s.
  91. /// </summary>
  92. /// <param name="self"><see langword="this"/>.</param>
  93. /// <param name="value">Value to blend in.</param>
  94. /// <param name="mode">Blend mode to use.</param>
  95. public static void BlendToValue(this CubismParameter[] self, CubismParameterBlendMode mode, float value, float weight = 1.0f)
  96. {
  97. if (self == null)
  98. {
  99. return;
  100. }
  101. if (mode == CubismParameterBlendMode.Additive)
  102. {
  103. for (var i = 0; i < self.Length; ++i)
  104. {
  105. self[i].AddToValue(value, weight);
  106. }
  107. return;
  108. }
  109. if (mode == CubismParameterBlendMode.Multiply)
  110. {
  111. for (var i = 0; i < self.Length; ++i)
  112. {
  113. self[i].MultiplyValueBy(value, weight);
  114. }
  115. return;
  116. }
  117. for (var i = 0; i < self.Length; ++i)
  118. {
  119. self[i].OverrideValue(self[i].Value, weight);
  120. }
  121. }
  122. }
  123. }