diff --git a/Editor/Menu/VirtualMenu.cs b/Editor/Menu/VirtualMenu.cs index cfa797ba..b425a84a 100644 --- a/Editor/Menu/VirtualMenu.cs +++ b/Editor/Menu/VirtualMenu.cs @@ -235,6 +235,8 @@ namespace nadena.dev.modular_avatar.core.editor.menu private Dictionary _resolvedMenu = new Dictionary(); + private Dictionary _menuMap = new Dictionary(); + // TODO: immutable? public Dictionary ResolvedMenu => _resolvedMenu; public VirtualMenuNode RootMenuNode => ResolvedMenu[RootMenuKey]; @@ -274,11 +276,10 @@ namespace nadena.dev.modular_avatar.core.editor.menu { var menu = new VirtualMenu(avatar.expressionsMenu, context); - var menuMap = new Dictionary(); void GetMenuReferences(VRCExpressionsMenu exMenu) { - if (!exMenu || menuMap.ContainsValue(exMenu)) return; - menuMap[ObjectRegistry.GetReference(exMenu)] = exMenu; + if (!exMenu || menu._menuMap.ContainsValue(exMenu)) return; + menu._menuMap[ObjectRegistry.GetReference(exMenu)] = exMenu; foreach (var control in exMenu.controls) { if(control.type == VRCExpressionsMenu.Control.ControlType.SubMenu) @@ -289,7 +290,7 @@ namespace nadena.dev.modular_avatar.core.editor.menu foreach (var installer in avatar.GetComponentsInChildren(true)) { - menu.RegisterMenuInstaller(installer, menuMap); + menu.RegisterMenuInstaller(installer); } foreach (var target in avatar.GetComponentsInChildren(true)) @@ -321,13 +322,13 @@ namespace nadena.dev.modular_avatar.core.editor.menu /// determine the effects of this menu installer, further processing is deferred until we freeze the menu. /// /// - internal void RegisterMenuInstaller(ModularAvatarMenuInstaller installer, Dictionary menuMap) + internal void RegisterMenuInstaller(ModularAvatarMenuInstaller installer) { // initial validation if (installer.menuToAppend == null && installer.GetComponent() == null) return; var installTargetMenu = installer.installTargetMenu && - menuMap.TryGetValue(ObjectRegistry.GetReference(installer.installTargetMenu), out var currentMenu) ? + _menuMap.TryGetValue(ObjectRegistry.GetReference(installer.installTargetMenu), out var currentMenu) ? currentMenu : installer.installTargetMenu; var target = installTargetMenu ? (object) installTargetMenu : RootMenuKey;