/** * Copyright(c) Live2D Inc. All rights reserved. * * Use of this source code is governed by the Live2D Open Software license * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. */ using Live2D.Cubism.Core; namespace Live2D.Cubism.Framework { /// /// Extensions for s. /// public static class CubismParameterExtensionMethods { /// /// Additively blends a value in. /// /// . /// Value to blend in. /// Blend weight. public static void AddToValue(this CubismParameter parameter, float value, float weight = 1f) { if (parameter == null) { return; } parameter.OverrideValue(parameter.Value + (value * weight)); } /// /// Multiply blends a value in. /// /// . /// Value to blend in. /// Blend weight. public static void MultiplyValueBy(this CubismParameter parameter, float value, float weight = 1f) { if (parameter == null) { return; } parameter.OverrideValue(parameter.Value * (1f + ((value - 1f) * weight))); } /// /// Override blends a value in. /// /// . /// Value to blend in. /// Blend weight. public static void OverrideValue(this CubismParameter parameter, float value, float weight = 1.0f) { if (parameter == null) { return; } if (parameter.IsRepeat()) { value = parameter.GetParameterRepeatValue(value); } else { value = parameter.GetParameterClampValue(value); } parameter.Value = parameter.Value * (1 - weight) + value * weight; } /// /// Blends a value in. /// /// . /// Value to blend in. /// Blend mode to use. public static void BlendToValue(this CubismParameter self, CubismParameterBlendMode mode, float value, float weight = 1.0f) { if (self == null) { return; } if (mode == CubismParameterBlendMode.Additive) { self.AddToValue(value, weight); return; } if (mode == CubismParameterBlendMode.Multiply) { self.MultiplyValueBy(value, weight); return; } self.OverrideValue(self.Value * (1 - weight) + value * weight); } /// /// Blends the same value into multiple s. /// /// . /// Value to blend in. /// Blend mode to use. public static void BlendToValue(this CubismParameter[] self, CubismParameterBlendMode mode, float value, float weight = 1.0f) { if (self == null) { return; } if (mode == CubismParameterBlendMode.Additive) { for (var i = 0; i < self.Length; ++i) { self[i].AddToValue(value, weight); } return; } if (mode == CubismParameterBlendMode.Multiply) { for (var i = 0; i < self.Length; ++i) { self[i].MultiplyValueBy(value, weight); } return; } for (var i = 0; i < self.Length; ++i) { self[i].OverrideValue(self[i].Value, weight); } } } }