private static void BlendSetters(MaterialPropertySetterGroup blendedSetter, List <WeightedSingleSetter> samePropertySetters) { switch (samePropertySetters[0].setter) { case FloatMaterialPropertySetter floatMaterialPropertySetter: { blendedSetter.floatSetters.Add(BlendFloatSetters(samePropertySetters)); } break; case IntMaterialPropertySetter intMaterialPropertySetter: { blendedSetter.intSettters.Add(BlendIntSetters(samePropertySetters)); } break; case TextureMaterialPropertySetter textureMaterialPropertySetter: { blendedSetter.textureSetters.Add(BlendTextureSetters(samePropertySetters)); } break; case VectorMaterialPropertySetter vectorMaterialPropertySetter: { blendedSetter.vectorSetters.Add(BlendVectorSetters(samePropertySetters)); } break; case ColorMaterialPropertySetter colorMaterialPropertySetter: { blendedSetter.colorSetters.Add(BlendColorSetters(samePropertySetters)); } break; default: Debug.LogWarning("MaterialPropertySetter: GetBlendedSetter: Warning: Blending setters of type " + samePropertySetters[0].setter.GetType() + " is not implemented"); break; } }
public static MaterialPropertySetterGroup GetBlendedSetter(List <WeightedSingleSetter> singleSetters, List <SingleMaterialPropertySetter> defaults = null) { MaterialPropertySetterGroup blendedSetter = new MaterialPropertySetterGroup(); List <WeightedSingleSetter> remainingSetters = new List <WeightedSingleSetter>(singleSetters); foreach (var singleSetter in singleSetters) { if (remainingSetters.Contains(singleSetter) == false) { continue; } List <WeightedSingleSetter> samePropertySetters = GetSamePropertySetters(remainingSetters, singleSetter.setter.propertyName); float weightSum = samePropertySetters.Select(s => s.weight).Sum(); if (defaults != null && weightSum < 1) { var defaultPropertySetter = defaults.Find(s => s.propertyName == singleSetter.setter.propertyName); samePropertySetters.Add(new WeightedSingleSetter(defaultPropertySetter, 1f - weightSum)); } BlendSetters(blendedSetter, samePropertySetters); remainingSetters = remainingSetters.Except(samePropertySetters).ToList(); } return(blendedSetter); }