AvMenuTreeView processing changes. It should work for now.

This commit is contained in:
raiti-chan 2022-12-12 18:20:57 +09:00
parent 937b2a17b3
commit 9319148fee

View File

@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using NUnit.Framework;
using UnityEditor;
using UnityEditor.IMGUI.Controls;
@ -83,6 +85,9 @@ namespace nadena.dev.modular_avatar.core.editor
private List<VRCExpressionsMenu> _menuItems = new List<VRCExpressionsMenu>();
private HashSet<VRCExpressionsMenu> _visitedMenus = new HashSet<VRCExpressionsMenu>();
private MenuTree _menuTree;
private Stack<VRCExpressionsMenu> _visitedMenuStack = new Stack<VRCExpressionsMenu>();
public AvMenuTreeView(TreeViewState state) : base(state)
{
}
@ -98,6 +103,53 @@ namespace nadena.dev.modular_avatar.core.editor
OnDoubleclickSelect.Invoke();
}
protected override TreeViewItem BuildRoot() {
this._menuItems.Clear();
this._visitedMenuStack.Clear();
if (Avatar.expressionsMenu == null) {
// TODO: nullの場合もツリーを表示できるように(Installerがあれば子もあるので)
return new TreeViewItem(0, -1, "No menu");
}
_menuTree = new MenuTree(Avatar);
_menuTree.AvatarsMenuMapping();
var root = new TreeViewItem(-1, -1, "<root>");
List<TreeViewItem> treeItems = new List<TreeViewItem> {
new TreeViewItem {
id = 0,
depth = 0,
displayName = $"{Avatar.gameObject.name} ({Avatar.expressionsMenu.name})"
}
};
this._menuItems.Add(Avatar.expressionsMenu);
this._visitedMenuStack.Push(Avatar.expressionsMenu);
this.TraverseMenu(1, treeItems, Avatar.expressionsMenu);
SetupParentsAndChildrenFromDepths(root, treeItems);
return root;
}
private void TraverseMenu(int depth, List<TreeViewItem> items, VRCExpressionsMenu menu) {
IEnumerable<VRCExpressionsMenu> children = this._menuTree.GetChildren(menu)
.Where(child => !this._visitedMenuStack.Contains(child));
foreach (VRCExpressionsMenu child in children) {
items.Add(
new TreeViewItem {
id = items.Count,
depth = depth,
displayName = $"{ /*control.name*/null} ({child.name})" // TODO: サブメニュー名を取ってこれるように
}
);
this._menuItems.Add(child);
this._visitedMenuStack.Push(child);
this.TraverseMenu(depth + 1, items, child);
this._visitedMenuStack.Pop();
}
}
/*
protected override TreeViewItem BuildRoot()
{
_menuItems.Clear();
@ -143,5 +195,6 @@ namespace nadena.dev.modular_avatar.core.editor
}
}
}
*/
}
}