diff --git a/Editor/MenuInstallHook.cs b/Editor/MenuInstallHook.cs index 2d1efd81..4d285ae7 100644 --- a/Editor/MenuInstallHook.cs +++ b/Editor/MenuInstallHook.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; using nadena.dev.modular_avatar.core.editor.menu; +using nadena.dev.ndmf; using UnityEditor; using UnityEngine; using VRC.SDK3.Avatars.Components; @@ -45,6 +46,26 @@ namespace nadena.dev.modular_avatar.core.editor avatar.expressionsMenu = menu; context.ClonedMenus[menu] = menu; } + else + { + IEnumerable GetMenus(VRCExpressionsMenu menu) + { + if (!menu) yield break; + foreach (var m in menu.controls + .Where(control => control.type == VRCExpressionsMenu.Control.ControlType.SubMenu) + .SelectMany(control => GetMenus(control.subMenu))) + yield return m; + yield return menu; + } + var currentMenus = GetMenus(avatar.expressionsMenu) + .ToDictionary(menu => ObjectRegistry.GetReference(menu), menu => menu); + foreach (var menuInstaller in menuInstallers) + { + var reference = ObjectRegistry.GetReference(menuInstaller.installTargetMenu); + if (currentMenus.ContainsKey(reference)) + menuInstaller.installTargetMenu = currentMenus[reference]; + } + } _rootMenu = avatar.expressionsMenu; var virtualMenu = VirtualMenu.ForAvatar(avatar, context);