// Adds or removes a parameter based on the enabled boolean. public void UpdateParameter(AnimatorControllerParameter parameter, bool enabled) { if (parameter.type == AnimatorControllerParameterType.Int || parameter.type == AnimatorControllerParameterType.Float || parameter.type == AnimatorControllerParameterType.Bool) { List <Parameter> param = new List <Parameter>(_avatar.expressionParameters.parameters); bool somethingModified = false; if (enabled) { param.Add(new Parameter { name = parameter.name, valueType = AV3ManagerFunctions.GetValueTypeFromAnimatorParameterType(parameter.type), defaultValue = 0, saved = false }); somethingModified = true; } else { for (int i = 0; i < param.Count; i++) { if (!param[i].name.Equals(parameter.name)) { continue; } param.RemoveAt(i); somethingModified = true; } } if (somethingModified) { _avatar.expressionParameters.parameters = param.ToArray(); foreach (var layer in _layers) { layer.UpdateParameterList(); } } EditorUtility.SetDirty(_avatar.expressionParameters); } UsedParameterMemory = _avatar.expressionParameters.CalcTotalCost(); }
public void CleanupParametersList() { var syncedParameters = _layers?.SelectMany(x => x.Parameters) .Where(x => x.Item2) .Select(x => x.Item1) .ToArray(); if (_useDefaultParameters) { syncedParameters = (syncedParameters ?? Array.Empty <AnimatorControllerParameter>()).Append(new AnimatorControllerParameter { name = "VRCEmote", type = AnimatorControllerParameterType.Int, defaultInt = 0 }) .Append(new AnimatorControllerParameter { name = "VRCFaceBlendH", type = AnimatorControllerParameterType.Float, defaultFloat = 0 }) .Append(new AnimatorControllerParameter { name = "VRCFaceBlendV", type = AnimatorControllerParameterType.Float, defaultFloat = 0 }) .ToArray(); } var param = new List <Parameter>(_avatar.expressionParameters.parameters); var remaining = new List <Parameter>(param); bool somethingModified = false; foreach (var parameter in param) { bool toDelete = syncedParameters?.All(syncedParameter => !parameter.name.Equals(syncedParameter.name)) ?? false; if (!toDelete) { continue; } remaining.Remove(parameter); somethingModified = true; } foreach (var syncedParameter in syncedParameters) { bool toAdd = param.All(parameter => !parameter.name.Equals(syncedParameter.name)); if (!toAdd) { continue; } remaining.Add(new Parameter { name = syncedParameter.name, valueType = AV3ManagerFunctions.GetValueTypeFromAnimatorParameterType(syncedParameter.type), defaultValue = 0, saved = false }); somethingModified = true; } if (!somethingModified) { return; } _avatar.expressionParameters.parameters = remaining.ToArray(); EditorUtility.SetDirty(_avatar.expressionParameters); UsedParameterMemory = _avatar.expressionParameters.CalcTotalCost(); }