fix: clearing conflicted MenuItem.isDefault affects unrelated MenuItems (#1089)

This commit is contained in:
nekobako 2024-09-04 07:28:27 +09:00 committed by GitHub
parent 22cff4ba3f
commit f9a9f1f1ef
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -528,34 +528,36 @@ namespace nadena.dev.modular_avatar.core.editor
{ {
if (serializedObject.isEditingMultipleObjects) return; if (serializedObject.isEditingMultipleObjects) return;
var menuItem = serializedObject.targetObject as ModularAvatarMenuItem; var myMenuItem = serializedObject.targetObject as ModularAvatarMenuItem;
if (menuItem == null) return; if (myMenuItem == null) return;
var parameterName = menuItem.Control.parameter.name; var myParameterName = myMenuItem.Control.parameter.name;
if (string.IsNullOrEmpty(parameterName)) return; if (string.IsNullOrEmpty(myParameterName)) return;
var myMappings = ParameterInfo.ForUI.GetParameterRemappingsAt(menuItem.gameObject); var myMappings = ParameterInfo.ForUI.GetParameterRemappingsAt(myMenuItem.gameObject);
if (myMappings.TryGetValue((ParameterNamespace.Animator, parameterName), out var replacement)) if (myMappings.TryGetValue((ParameterNamespace.Animator, myParameterName), out var myReplacement))
parameterName = replacement.ParameterName; myParameterName = myReplacement.ParameterName;
var avatarRoot = RuntimeUtil.FindAvatarInParents(menuItem.gameObject.transform); var avatarRoot = RuntimeUtil.FindAvatarInParents(myMenuItem.gameObject.transform);
foreach (var mami in avatarRoot.GetComponentsInChildren<ModularAvatarMenuItem>(true)) foreach (var otherMenuItem in avatarRoot.GetComponentsInChildren<ModularAvatarMenuItem>(true))
{ {
if (mami == menuItem) continue; if (otherMenuItem == myMenuItem) continue;
var paramMappings = ParameterInfo.ForUI.GetParameterRemappingsAt(mami.gameObject); var otherParameterName = otherMenuItem.Control.parameter.name;
var effectiveParam = parameterName; if (string.IsNullOrEmpty(otherParameterName)) continue;
if (paramMappings.TryGetValue((ParameterNamespace.Animator, parameterName), out replacement))
effectiveParam = replacement.ParameterName;
if (effectiveParam != parameterName) continue; var otherMappings = ParameterInfo.ForUI.GetParameterRemappingsAt(otherMenuItem.gameObject);
if (mami.isDefault) if (otherMappings.TryGetValue((ParameterNamespace.Animator, otherParameterName), out var otherReplacement))
otherParameterName = otherReplacement.ParameterName;
if (otherParameterName != myParameterName) continue;
if (otherMenuItem.isDefault)
{ {
Undo.RecordObject(mami, ""); Undo.RecordObject(otherMenuItem, "");
mami.isDefault = false; otherMenuItem.isDefault = false;
EditorUtility.SetDirty(mami); EditorUtility.SetDirty(otherMenuItem);
PrefabUtility.RecordPrefabInstancePropertyModifications(mami); PrefabUtility.RecordPrefabInstancePropertyModifications(otherMenuItem);
} }
} }
} }