Skip to content

Commit

Permalink
fix: incorrect handling of isDefault toggles for implicit parameters …
Browse files Browse the repository at this point in the history
…in UI (#1085)

Closes: #1079
  • Loading branch information
bdunderscore authored Sep 3, 2024
1 parent 1aa6c03 commit 371809f
Showing 1 changed file with 47 additions and 1 deletion.
48 changes: 47 additions & 1 deletion Editor/Inspector/Menu/MenuItemGUI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -448,6 +448,10 @@ private void ShowInnateParameterGUI()
var knownParamDefault = knownParameter?.DefaultValue;
var isDefaultByKnownParam =
knownParamDefault != null ? _value.floatValue == knownParamDefault : (bool?)null;

if (knownParameter != null && knownParameter.Source is ModularAvatarMenuItem otherMenuItem)
isDefaultByKnownParam = null;

Object controller = knownParameter?.Source;
var controllerIsElsewhere = controller != null && !(controller is ModularAvatarMenuItem);
// If we can't figure out what to reference the parameter names to, disable the UI
Expand All @@ -462,10 +466,16 @@ private void ShowInnateParameterGUI()
var anyIsDefault = _prop_isDefault.hasMultipleDifferentValues || _prop_isDefault.boolValue;
var multipleSelections = _obj.targetObjects.Length > 1;
var mixedIsDefault = multipleSelections && anyIsDefault;
using (new EditorGUI.DisabledScope(multipleSelections))
using (new EditorGUI.DisabledScope(multipleSelections || isDefaultByKnownParam != null))
{
EditorGUI.BeginChangeCheck();
DrawHorizontalToggleProp(_prop_isDefault, G("menuitem.prop.is_default"), mixedIsDefault,
multipleSelections ? false : isDefaultByKnownParam);
if (EditorGUI.EndChangeCheck())
{
_obj.ApplyModifiedProperties();
ClearConflictingDefaults(_obj);
}
}

GUILayout.FlexibleSpace();
Expand Down Expand Up @@ -514,6 +524,42 @@ private void ShowInnateParameterGUI()
EditorGUILayout.EndHorizontal();
}

private void ClearConflictingDefaults(SerializedObject serializedObject)
{
if (serializedObject.isEditingMultipleObjects) return;

var menuItem = serializedObject.targetObject as ModularAvatarMenuItem;
if (menuItem == null) return;

var parameterName = menuItem.Control.parameter.name;
if (string.IsNullOrEmpty(parameterName)) return;

var myMappings = ParameterInfo.ForUI.GetParameterRemappingsAt(menuItem.gameObject);
if (myMappings.TryGetValue((ParameterNamespace.Animator, parameterName), out var replacement))
parameterName = replacement.ParameterName;

var avatarRoot = RuntimeUtil.FindAvatarInParents(menuItem.gameObject.transform);

foreach (var mami in avatarRoot.GetComponentsInChildren<ModularAvatarMenuItem>(true))
{
if (mami == menuItem) continue;

var paramMappings = ParameterInfo.ForUI.GetParameterRemappingsAt(mami.gameObject);
var effectiveParam = parameterName;
if (paramMappings.TryGetValue((ParameterNamespace.Animator, parameterName), out replacement))
effectiveParam = replacement.ParameterName;

if (effectiveParam != parameterName) continue;
if (mami.isDefault)
{
Undo.RecordObject(mami, "");
mami.isDefault = false;
EditorUtility.SetDirty(mami);
PrefabUtility.RecordPrefabInstancePropertyModifications(mami);
}
}
}

private void EnsureLabelCount(int i)
{
if (_labels == null || _labelsRoot.arraySize < i || _labels.Length < i)
Expand Down

0 comments on commit 371809f

Please sign in to comment.