CubismParameterExtensionMethods.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. parameter.Value += (value * weight);
  24. }
  25. /// <summary>
  26. /// Multiply blends a value in.
  27. /// </summary>
  28. /// <param name="parameter"><see langword="this"/>.</param>
  29. /// <param name="value">Value to blend in.</param>
  30. /// <param name="weight">Blend weight.</param>
  31. public static void MultiplyValueBy(this CubismParameter parameter, float value, float weight = 1f)
  32. {
  33. parameter.Value *= (1f + ((value - 1f) * weight));
  34. }
  35. /// <summary>
  36. /// Blends a value in.
  37. /// </summary>
  38. /// <param name="self"><see langword="this"/>.</param>
  39. /// <param name="value">Value to blend in.</param>
  40. /// <param name="mode">Blend mode to use.</param>
  41. public static void BlendToValue(this CubismParameter self, CubismParameterBlendMode mode, float value)
  42. {
  43. if (mode == CubismParameterBlendMode.Additive)
  44. {
  45. self.AddToValue(value);
  46. return;
  47. }
  48. if (mode == CubismParameterBlendMode.Multiply)
  49. {
  50. self.MultiplyValueBy(value);
  51. return;
  52. }
  53. self.Value = value;
  54. }
  55. /// <summary>
  56. /// Blends the same value into multiple <see cref="CubismParameter"/>s.
  57. /// </summary>
  58. /// <param name="self"><see langword="this"/>.</param>
  59. /// <param name="value">Value to blend in.</param>
  60. /// <param name="mode">Blend mode to use.</param>
  61. public static void BlendToValue(this CubismParameter[] self, CubismParameterBlendMode mode, float value)
  62. {
  63. if (mode == CubismParameterBlendMode.Additive)
  64. {
  65. for (var i = 0; i < self.Length; ++i)
  66. {
  67. self[i].AddToValue(value);
  68. }
  69. return;
  70. }
  71. if (mode == CubismParameterBlendMode.Multiply)
  72. {
  73. for (var i = 0; i < self.Length; ++i)
  74. {
  75. self[i].MultiplyValueBy(value);
  76. }
  77. return;
  78. }
  79. for (var i = 0; i < self.Length; ++i)
  80. {
  81. self[i].Value = value;
  82. }
  83. }
  84. }
  85. }