add menu installer targets to root menu groups on UI target selection

This commit is contained in:
bd_ 2023-02-25 14:12:33 +09:00
parent 259e17dbb3
commit 830401c8d1
2 changed files with 41 additions and 3 deletions

View File

@ -154,6 +154,18 @@ namespace nadena.dev.modular_avatar.core.editor
_menuTree = VirtualMenu.ForAvatar(_avatar);
var preferredRoot = FindPreferredRoot(_menuTree);
var rootName = "";
if (preferredRoot is ModularAvatarMenuGroup group)
{
if (group.targetObject != null) rootName = $"({group.targetObject.name})";
else rootName = $"({group.gameObject.name})";
}
else if (preferredRoot is VRCExpressionsMenu menu)
{
rootName = $"({menu.name})";
}
var root = new TreeViewItem(-1, -1, "<root>");
List<TreeViewItem> treeItems = new List<TreeViewItem>
{
@ -162,16 +174,37 @@ namespace nadena.dev.modular_avatar.core.editor
id = 0,
depth = 0,
displayName =
$"{Avatar.gameObject.name} ({(Avatar.expressionsMenu == null ? "None" : Avatar.expressionsMenu.name)})"
$"{Avatar.gameObject.name} {rootName}"
}
};
_nodeKeys.Add(_menuTree.RootMenuKey);
_visitedMenuStack.Push(_menuTree.RootMenuKey);
_nodeKeys.Add(preferredRoot);
_visitedMenuStack.Push(preferredRoot);
TraverseMenu(1, treeItems, _menuTree.RootMenuNode);
SetupParentsAndChildrenFromDepths(root, treeItems);
return root;
}
private object FindPreferredRoot(VirtualMenu menuTree)
{
// There's always a VRCExpressionsMenu at the root, but we'd prefer to add stuff under a MenuItem tree if
// available. See if we can find one.
foreach (var installer in _avatar.GetComponentsInChildren<ModularAvatarMenuInstaller>(true))
{
if (installer.installTargetMenu != null && installer.installTargetMenu != menuTree.RootMenuKey)
{
continue;
}
var menuSource = installer.GetComponent<MenuSource>();
if (menuSource == null || !(menuSource is ModularAvatarMenuGroup group)) continue;
return menuSource;
}
return menuTree.RootMenuKey;
}
private void TraverseMenu(int depth, List<TreeViewItem> items, VirtualMenuNode node)
{
IEnumerable<VirtualControl> children = node.Controls

View File

@ -217,6 +217,11 @@ namespace nadena.dev.modular_avatar.core.editor
menu = new MenuNodesUnder(menuParent);
}
}
else if (menu is ModularAvatarMenuGroup group)
{
if (group.targetObject != null) menu = new MenuNodesUnder(group.targetObject);
else menu = new MenuNodesUnder(group.gameObject);
}
if (menu is VRCExpressionsMenu expMenu)
{