mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2025-04-24 21:38:59 +08:00
AvMenuTreeView processing changes. It should work for now.
This commit is contained in:
parent
937b2a17b3
commit
9319148fee
@ -1,5 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.Immutable;
|
||||||
|
using System.Linq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
using UnityEditor.IMGUI.Controls;
|
using UnityEditor.IMGUI.Controls;
|
||||||
@ -83,6 +85,9 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
private List<VRCExpressionsMenu> _menuItems = new List<VRCExpressionsMenu>();
|
private List<VRCExpressionsMenu> _menuItems = new List<VRCExpressionsMenu>();
|
||||||
private HashSet<VRCExpressionsMenu> _visitedMenus = new HashSet<VRCExpressionsMenu>();
|
private HashSet<VRCExpressionsMenu> _visitedMenus = new HashSet<VRCExpressionsMenu>();
|
||||||
|
|
||||||
|
private MenuTree _menuTree;
|
||||||
|
private Stack<VRCExpressionsMenu> _visitedMenuStack = new Stack<VRCExpressionsMenu>();
|
||||||
|
|
||||||
public AvMenuTreeView(TreeViewState state) : base(state)
|
public AvMenuTreeView(TreeViewState state) : base(state)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -98,6 +103,53 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
OnDoubleclickSelect.Invoke();
|
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()
|
protected override TreeViewItem BuildRoot()
|
||||||
{
|
{
|
||||||
_menuItems.Clear();
|
_menuItems.Clear();
|
||||||
@ -143,5 +195,6 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user