示例#1
0
        public InterfaceView(InterfaceData interfaceData, uNodeData owner)
        {
            this.owner         = owner;
            this.interfaceData = interfaceData;
            title           = interfaceData.name;
            titleIcon.image = uNodeEditorUtility.GetTypeIcon(typeof(TypeIcons.InterfaceIcon));

            foreach (var p in interfaceData.properties)
            {
                AddChild(new InterfacePropertyView(p, interfaceData));
            }
            foreach (var f in interfaceData.functions)
            {
                AddChild(new InterfaceFunctionView(f, interfaceData));
            }
        }
示例#2
0
 public EnumView(EnumData enumData, uNodeData owner)
 {
     this.enumData    = enumData;
     this.owner       = owner;
     title            = enumData.name;
     titleIcon.image  = uNodeEditorUtility.GetTypeIcon(typeof(TypeIcons.EnumIcon));
     onFirstExpanded += () => {
         foreach (var e in enumData.enumeratorList)
         {
             var item = new SimpleTreeView(uNodeEditorUtility.GetTypeIcon(typeof(TypeIcons.EnumItemIcon)), null)
             {
                 title = e.name,
             };
             AddChild(item);
         }
     };
 }
示例#3
0
        public override void OnInspectorGUI()
        {
            uNodeData comp = target as uNodeData;

            EditorGUI.BeginChangeCheck();
            base.OnInspectorGUI();
            EditorGUI.BeginDisabledGroup(uNodeEditorUtility.IsPrefab(comp));
            VariableEditorUtility.DrawNamespace("Using Namespaces", comp.generatorSettings.usingNamespace.ToList(), comp, (arr) => {
                comp.generatorSettings.usingNamespace = arr.ToArray();
                uNodeEditorUtility.MarkDirty(comp);
            });
            EditorGUI.EndDisabledGroup();
            if (EditorGUI.EndChangeCheck())
            {
                uNodeGUIUtility.GUIChanged(comp);
            }
            if (comp.GetComponent <uNodeRoot>() == null)
            {
                if (GUILayout.Button(new GUIContent("Open uNode Editor", "Open uNode Editor to edit this uNode"), EditorStyles.toolbarButton))
                {
                    uNodeEditor.ChangeTarget(comp, true);
                }
            }
        }
示例#4
0
        private void ReloadTabbar()
        {
            if (tabbarContainer != null)
            {
                tabbarContainer.RemoveFromHierarchy();
            }
            tabbarContainer = new VisualElement()
            {
                name = "tabbar-container"
            };
            tabbarContainer.style.left = _tabPosition;
            tabbarContainer.AddStyleSheet("uNodeStyles/Tabbar");
            tabbarContainer.AddStyleSheet(UIElementUtility.Theme.tabbarStyle);
            var tabbar = new VisualElement()
            {
                name = "tabbar"
            };
            {
                #region Main/Selection Tab
                if (window.mainGraph != null && window.mainGraph == window.selectedGraph && !window.mainGraph.selectedData.isValidGraph)
                {
                    window.mainGraph.owner        = null;
                    window.mainGraph.graph        = null;
                    window.mainGraph.selectedData = new GraphEditorData();
                }
                var tabMainElement = new ClickableElement("\"Main\"")
                {
                    name    = "tab-element",
                    onClick = () => {
                        window.ChangeEditorTarget(null);
                    },
                };
                tabMainElement.AddManipulator(new ContextualMenuManipulator((evt) => {
                    evt.menu.AppendAction("Close All But This", (act) => {
                        window.graphs.Clear();
                        window.ChangeEditorTarget(null);
                        ReloadTabbar();
                    }, DropdownMenuAction.AlwaysEnabled);
                    evt.menu.AppendSeparator("");
                    evt.menu.AppendAction("Find Object", (act) => {
                        EditorGUIUtility.PingObject(window.mainGraph.owner);
                        ReloadTabbar();
                    }, DropdownMenuAction.AlwaysEnabled);
                    evt.menu.AppendAction("Select Object", (act) => {
                        EditorGUIUtility.PingObject(window.mainGraph.owner);
                        Selection.activeObject = window.mainGraph.owner;
                        ReloadTabbar();
                    }, DropdownMenuAction.AlwaysEnabled);
                }));
                if (window.selectedGraph == window.mainGraph)
                {
                    tabMainElement.AddToClassList("tab-selected");
                }
                tabbar.Add(tabMainElement);
                #endregion

                for (int i = 0; i < window.graphs.Count; i++)
                {
                    var graph = window.graphs[i];
                    try {
                        if (graph == null || graph.owner == null || !graph.selectedData.isValidGraph)
                        {
                            window.graphs.RemoveAt(i);
                            i--;
                            continue;
                        }
                    } catch {
                        window.graphs.RemoveAt(i);
                        i--;
                        continue;
                    }
                    var tabElement = new ClickableElement(graph.displayName)
                    {
                        name    = "tab-element",
                        onClick = () => {
                            window.ChangeEditorTarget(graph);
                        },
                    };
                    tabElement.AddManipulator(new ContextualMenuManipulator((evt) => {
                        evt.menu.AppendAction("Close", (act) => {
                            var oldData = window.selectedGraph;
                            window.graphs.Remove(graph);
                            window.ChangeEditorTarget(oldData);
                            ReloadTabbar();
                        }, DropdownMenuAction.AlwaysEnabled);
                        evt.menu.AppendAction("Close All", (act) => {
                            window.graphs.Clear();
                            window.ChangeEditorTarget(null);
                            ReloadTabbar();
                        }, DropdownMenuAction.AlwaysEnabled);
                        evt.menu.AppendAction("Close Others", (act) => {
                            var current = window.selectedGraph;
                            window.graphs.Clear();
                            window.graphs.Add(current);
                            window.ChangeEditorTarget(current);
                            ReloadTabbar();
                        }, DropdownMenuAction.AlwaysEnabled);
                        evt.menu.AppendSeparator("");
                        evt.menu.AppendAction("Find Object", (act) => {
                            EditorGUIUtility.PingObject(graph.owner);
                            ReloadTabbar();
                        }, DropdownMenuAction.AlwaysEnabled);
                        evt.menu.AppendAction("Select Object", (act) => {
                            EditorGUIUtility.PingObject(graph.owner);
                            Selection.activeObject = graph.owner;
                            ReloadTabbar();
                        }, DropdownMenuAction.AlwaysEnabled);
                    }));
                    if (window.selectedGraph == graph)
                    {
                        tabElement.AddToClassList("tab-selected");
                    }
                    tabbar.Add(tabElement);
                }
                #region Plus Tab
                {
                    var plusElement = new ClickableElement("+")
                    {
                        name = "tab-element",
                    };
                    {
                        plusElement.menu = new DropdownMenu();
                        plusElement.menu.AppendAction("Open...", (act) => {
                            window.OpenNewGraphTab();
                            ReloadTabbar();
                        });

                        #region Recent Files
                        List <UnityEngine.Object> lastOpenedObjects = uNodeEditor.FindLastOpenedGraphs();
                        for (int i = 0; i < lastOpenedObjects.Count; i++)
                        {
                            var obj = lastOpenedObjects[i];
                            if (obj is uNodeRoot)
                            {
                                uNodeRoot root = obj as uNodeRoot;
                                plusElement.menu.AppendAction("Open Recent/" + root.gameObject.name, (act) => {
                                    uNodeEditor.ChangeTarget(root, true);
                                });
                            }
                            else if (obj is uNodeData)
                            {
                                uNodeData data = obj as uNodeData;
                                plusElement.menu.AppendAction("Open Recent/" + data.gameObject.name, (act) => {
                                    uNodeEditor.ChangeTarget(data, true);
                                });
                            }
                        }
                        if (lastOpenedObjects.Count > 0)
                        {
                            plusElement.menu.AppendSeparator("Open Recent/");
                            plusElement.menu.AppendAction("Open Recent/Clear Recent", (act) => {
                                uNodeEditor.ClearLastOpenedGraphs();
                            });
                        }
                        #endregion

                        var graphSystem = GraphUtility.FindGraphSystemAttributes();
                        int lastOrder   = int.MinValue;
                        for (int i = 0; i < graphSystem.Count; i++)
                        {
                            var g = graphSystem[i];
                            if (i == 0 || Mathf.Abs(g.order - lastOrder) >= 10)
                            {
                                plusElement.menu.AppendSeparator("");
                            }
                            lastOrder = g.order;
                            plusElement.menu.AppendAction(g.menu, (act) => {
                                string path = EditorUtility.SaveFilePanelInProject("Create " + g.menu, "", "prefab", "");
                                if (!string.IsNullOrEmpty(path))
                                {
                                    GameObject go = new GameObject();
                                    go.name       = path.Split('/').Last().Split('.')[0];
                                    go.AddComponent(g.type);
                                    GameObject prefab = PrefabUtility.SaveAsPrefabAsset(go, path);
                                    UnityEngine.Object.DestroyImmediate(go);
                                    AssetDatabase.SaveAssets();
                                    EditorUtility.FocusProjectWindow();
                                    uNodeEditor.ChangeTarget(prefab.GetComponent(g.type) as uNodeRoot);
                                }
                            });
                        }
                    }
                    tabbar.Add(plusElement);
                }
                #endregion
            }
            var pathbar = new VisualElement()
            {
                name = "pathbar"
            };
            if (editorData.graph != null)
            {
                var graph = new ClickableElement(editorData.graph.DisplayName)
                {
                    name = "path-element"
                };
                graph.AddToClassList("path-graph");
                {
                    graph.menu = new DropdownMenu();
                    uNodeRoot[] graphs = editorData.graphs;
                    if (graphs == null)
                    {
                        return;
                    }
                    for (int i = 0; i < graphs.Length; i++)
                    {
                        var g = graphs[i];
                        if (g == null)
                        {
                            continue;
                        }
                        graph.menu.AppendAction(g.DisplayName, (act) => {
                            if (g == editorData.graph)
                            {
                                window.ChangeEditorSelection(g);
                            }
                            else
                            {
                                uNodeEditor.ChangeTarget(g);
                            }
                        }, (act) => {
                            if (g == editorData.graph)
                            {
                                return(DropdownMenuAction.Status.Checked);
                            }
                            return(DropdownMenuAction.Status.Normal);
                        });
                    }
                }
                Type graphIcon = typeof(TypeIcons.GraphIcon);
                if (editorData.graph is IClass)
                {
                    IClass classSystem = editorData.graph as IClass;
                    graphIcon = classSystem.IsStruct ? typeof(TypeIcons.StructureIcon) : typeof(TypeIcons.ClassIcon);
                }
                graph.ShowIcon(uNodeEditorUtility.GetTypeIcon(graphIcon));
                graph.EnableBreadcrumb(true);
                pathbar.Add(graph);
                var root     = window.selectedGraph.selectedData.selectedRoot;
                var function = new ClickableElement(root != null ? root.Name : editorData.graph is IStateGraph state && state.canCreateGraph ? "[State Graph]" : editorData.graph is IMacroGraph ? "[MACRO]" : "[NO ROOT]")
                {
                    name = "path-element"
                };
                function.AddToClassList("path-function");
                {
                    function.menu = new DropdownMenu();
                    if (editorData.graph is IStateGraph stateGraph && stateGraph.canCreateGraph)
                    {
                        function.menu.AppendAction("[State Graph]", (act) => {
                            if (editorData.selectedRoot != null || editorData.selectedGroup != null)
                            {
                                editorData.selected     = null;
                                editorData.selectedRoot = null;
                                Refresh();
                                UpdatePosition();
                            }
                            window.ChangeEditorSelection(null);
                        }, (act) => {
                            if (editorData.selectedRoot == null)
                            {
                                return(DropdownMenuAction.Status.Checked);
                            }
                            return(DropdownMenuAction.Status.Normal);
                        });
                    }

                    List <RootObject> roots = new List <RootObject>();
                    roots.AddRange(editorData.graph.Functions);
                    roots.Sort((x, y) => string.Compare(x.Name, y.Name));
                    for (int i = 0; i < roots.Count; i++)
                    {
                        var r = roots[i];
                        if (r == null)
                        {
                            continue;
                        }
                        function.menu.AppendAction(r.Name, (act) => {
                            if (editorData.currentCanvas == r)
                            {
                                window.ChangeEditorSelection(r);
                            }
                            else
                            {
                                editorData.selectedRoot = r;
                                SelectionChanged();
                                Refresh();
                                UpdatePosition();
                            }
                        }, (act) => {
                            if (r == editorData.selectedRoot)
                            {
                                return(DropdownMenuAction.Status.Checked);
                            }
                            return(DropdownMenuAction.Status.Normal);
                        });
                    }
                }
                function.ShowIcon(uNodeEditorUtility.GetTypeIcon(root == null ? typeof(TypeIcons.StateIcon) : typeof(TypeIcons.MethodIcon)));
                pathbar.Add(function);
                if (editorData.graph != null && editorData.selectedGroup && editorData.selectedGroup.owner == editorData.graph)
                {
                    function.EnableBreadcrumb(true);
                    List <Node> GN = new List <Node>();
                    GN.Add(editorData.selectedGroup);
                    NodeEditorUtility.FindParentNode(editorData.selectedGroup.transform, ref GN, editorData.graph);
                    for (int i = GN.Count - 1; i >= 0; i--)
                    {
                        var nestedGraph = GN[i];
                        var element     = new ClickableElement(nestedGraph.GetNodeName())
                        {
                            name    = "path-element",
                            onClick = () => {
                                window.ChangeEditorSelection(nestedGraph);
                                if (editorData.selectedGroup != nestedGraph)
                                {
                                    editorData.selectedGroup = nestedGraph;
                                    Refresh();
                                    UpdatePosition();
                                }
                            }
                        };
                        element.AddToClassList("path-nested");
                        element.ShowIcon(uNodeEditorUtility.GetTypeIcon(nestedGraph.GetNodeIcon()));
                        pathbar.Add(element);
                        if (i != 0)
                        {
                            element.EnableBreadcrumb(true);
                        }
                    }
                }
            }
            else
            {
                var graph = new ClickableElement("[NO GRAPH]")
                {
                    name = "path-element"
                };
                pathbar.Add(graph);
            }
            tabbarContainer.Add(tabbar);
            tabbarContainer.Add(pathbar);
            window.rootVisualElement.Add(tabbarContainer);
            tabbarContainer.SendToBack();
        }
        void Setup()
        {
            if (reflectionValue == null)
            {
                reflectionValue = MemberData.none;
            }
            if (filter == null)
            {
                filter = new FilterAttribute()
                {
                    UnityReference = false, OnlyGetType = onlyGetType
                };
            }
            if (onlyGetType)
            {
                filter = new FilterAttribute(filter)
                {
                    OnlyGetType = onlyGetType
                }
            }
            ;
            if (filter.OnlyGetType)
            {
                filter.ValidTargetType = MemberData.TargetType.Type | MemberData.TargetType.Null;
            }
            if (targetObject)
            {
                uNodeRoot UNR = null;
                if (targetObject is uNodeRoot)
                {
                    UNR = targetObject as uNodeRoot;
                }
                else if (targetObject is RootObject)
                {
                    UNR = (targetObject as RootObject).owner;
                }
                else if (targetObject is NodeComponent)
                {
                    UNR = (targetObject as NodeComponent).owner;
                }
                else if (targetObject is TransitionEvent)
                {
                    UNR = (targetObject as TransitionEvent).owner;
                }
                if (UNR)
                {
                    uNodeData data = UNR.GetComponent <uNodeData>();
                    if (data)
                    {
                        //Clear the default namespace
                        usingNamespaces.Clear();
                        //Add graph namespaces
                        foreach (var n in data.GetNamespaces())
                        {
                            usingNamespaces.Add(n);
                        }
                    }
                    if (UNR is IIndependentGraph graph)
                    {
                        if (data == null)
                        {
                            //Clear the default namespace
                            usingNamespaces.Clear();
                        }
                        foreach (var n in graph.UsingNamespaces)
                        {
                            usingNamespaces.Add(n);
                        }
                    }
                }
            }
            editorData.manager        = new Manager(new TreeViewState());
            editorData.manager.window = this;
            editorData.searchField    = new SearchField();
            editorData.searchField.downOrUpArrowKeyPressed  += editorData.manager.SetFocusAndEnsureSelectedItem;
            editorData.searchField.autoSetFocusOnFindCommand = true;
            window = this;
            uNodeThreadUtility.Queue(DoSetup);
        }

        void DoSetup()
        {
            editorData.setup.Setup((progress) => {
                if (progress == 1)
                {
                    uNodeThreadUtility.Queue(() => {
                        var categories = new List <TreeViewItem>();
                        if (displayDefaultItem)
                        {
                            var categoryTree = new SelectorCategoryTreeView("#", "", uNodeEditorUtility.GetUIDFromString("[CATEG]#"), -1);
                            categories.Add(categoryTree);
                            var recentTree = new SelectorCategoryTreeView("Recently", "", uNodeEditorUtility.GetUIDFromString("[CATEG]#Recently"), -1);
                            categories.Add(recentTree);
                            if (displayNoneOption && filter.IsValidTarget(MemberData.TargetType.None))
                            {
                                categoryTree.AddChild(new SelectorMemberTreeView(MemberData.none, "None", uNodeEditorUtility.GetUIDFromString("#None"))
                                {
                                    icon = uNodeEditorUtility.GetTypeIcon(typeof(TypeIcons.NullTypeIcon)) as Texture2D
                                });
                            }
                            if (!filter.SetMember)
                            {
                                if (!filter.IsValueTypes() && filter.IsValidTarget(MemberData.TargetType.Null) && !filter.OnlyGetType)
                                {
                                    categoryTree.AddChild(new SelectorMemberTreeView(MemberData.Null, "Null", uNodeEditorUtility.GetUIDFromString("#Null"))
                                    {
                                        icon = uNodeEditorUtility.GetTypeIcon(typeof(TypeIcons.NullTypeIcon)) as Texture2D
                                    });
                                }
                                //if(!filter.OnlyGetType && filter.IsValidTarget(MemberData.TargetType.Values) &&
                                //	(filter.Types == null || filter.Types.Count != 1 || filter.Types[0] != typeof(Type))) {
                                //	categoryTree.AddChild(new SelectorCallbackTreeView((cRect) => {
                                //		var screenRect = cRect.ToScreenRect();
                                //		FilterAttribute F = new FilterAttribute(filter);
                                //		F.OnlyGetType = true;
                                //		ItemSelector w = null;
                                //		Action<MemberData> action = delegate (MemberData m) {
                                //			if(w != null) {
                                //				w.Close();
                                //				//EditorGUIUtility.ExitGUI();
                                //			}
                                //			if(filter.CanManipulateArray()) {
                                //				if(Event.current.button == 0) {
                                //					TypeSelectorWindow.ShowAsNew(Rect.zero, F, delegate (MemberData[] members) {
                                //						Type t = members[0].Get<Type>();
                                //						SelectValues(t);
                                //					}, m).ChangePosition(screenRect);
                                //				} else {
                                //					CommandWindow.CreateWindow(screenRect, (items) => {
                                //						var member = CompletionEvaluator.CompletionsToMemberData(items);
                                //						if(member != null) {
                                //							Type t = member.Get<Type>();
                                //							SelectValues(t);
                                //							return true;
                                //						}
                                //						return false;
                                //					}, new CompletionEvaluator.CompletionSetting() {
                                //						validCompletionKind = CompletionKind.Type | CompletionKind.Namespace | CompletionKind.Keyword,
                                //					});
                                //				}
                                //			} else {
                                //				Type t = m.Get<Type>();
                                //				SelectValues(t);
                                //			}
                                //		};
                                //		w = ShowAsNew(targetObject, F, action, true).ChangePosition(screenRect);
                                //	}, "Values", uNodeEditorUtility.GetUIDFromString("#Values"), -1) {
                                //		icon = uNodeEditorUtility.GetTypeIcon(typeof(TypeIcons.ValueIcon)) as Texture2D
                                //	});
                                //}
                            }
                            if (displayRecentItem)
                            {
                                var listRecentItems = new List <TreeViewItem>();
                                if (uNodeEditor.SavedData.recentItems != null)
                                {
                                    foreach (var recent in uNodeEditor.SavedData.recentItems)
                                    {
                                        if (recent != null && recent.info != null)
                                        {
                                            if (recent.info is Type)
                                            {
                                                listRecentItems.Add(new TypeTreeView(recent.info as Type, recent.GetHashCode(), -1));
                                            }
                                            else if (!filter.OnlyGetType && (recent.isStatic || filter.DisplayInstanceOnStatic))
                                            {
                                                listRecentItems.Add(new MemberTreeView(recent.info, recent.GetHashCode(), -1));
                                            }
                                        }
                                    }
                                }
                                while (listRecentItems.Count > 10)
                                {
                                    listRecentItems.RemoveAt(listRecentItems.Count - 1);
                                }
                                if (listRecentItems.Count > 0)
                                {
                                    foreach (var item in listRecentItems)
                                    {
                                        if (item is MemberTreeView)
                                        {
                                            var tree = item as MemberTreeView;
                                            if (!(tree.member is Type))
                                            {
                                                tree.displayName = tree.member.DeclaringType.Name + "." + tree.displayName;
                                            }
                                        }
                                        recentTree.AddChild(item);
                                    }
                                    recentTree.expanded = false;
                                }
                            }
                            if (!filter.OnlyGetType && filter.UnityReference)
                            {
                                if (reflectionValue != null && reflectionValue.GetInstance() != null && !(reflectionValue.GetInstance() is IGraphSystem) && !(reflectionValue.GetInstance() is INode))
                                {
                                    categories.Add(TreeFunction.CreateTargetItem(reflectionValue.GetInstance(), "Target Reference", filter));
                                }
                                categories.AddRange(TreeFunction.CreateGraphItem(targetObject, reflectionValue, filter));
                            }
                            if (filter.UnityReference)
                            {
                                categories.AddRange(TreeFunction.CreateRootItem(targetObject, filter));
                            }
                            categories.AddRange(TreeFunction.CreateCustomItem(customItems));
                            if (filter.DisplayDefaultStaticType)
                            {
                                categoryTree.AddChild(new SelectorGroupedTreeView(() => {
                                    var result = new List <TreeViewItem>();
                                    result.Add(new SelectorSearchTreeView((prog) => {
                                        var treeResult = new List <TreeViewItem>();
                                        var sp         = new SearchProgress();
                                        prog?.Invoke(sp);
                                        var allTypes = GetAllTypes((currProgress) => {
                                            prog?.Invoke(currProgress);
                                        }, true, true);
                                        sp.info = "Setup Items";
                                        for (int i = 0; i < allTypes.Count; i++)
                                        {
                                            var pair   = allTypes[i];
                                            var nsTree = new SelectorCategoryTreeView(pair.Key, "", uNodeEditorUtility.GetUIDFromString("[CATEG-SEARCH]" + pair.Key), -1);
                                            foreach (var type in pair.Value)
                                            {
                                                nsTree.AddChild(new TypeTreeView(type, type.GetHashCode(), -1));
                                            }
                                            treeResult.Add(nsTree);
                                            sp.progress = (float)i / (float)allTypes.Count;
                                            prog?.Invoke(sp);
                                        }
                                        return(treeResult);
                                    }, "Search All Types", uNodeEditorUtility.GetUIDFromString("[SAT]"), -1));
                                    var nestedNS = new HashSet <string>();
                                    //var excludedNs = uNodePreference.GetExcludedNamespace();
                                    var namespaces = new List <string>(EditorReflectionUtility.GetNamespaces());
                                    namespaces.Sort();
                                    namespaces.RemoveAll(i => /*excludedNs.Contains(i) ||*/ i == null || i.Contains("."));
                                    foreach (var ns in namespaces)
                                    {
                                        result.Add(new NamespaceTreeView(ns, uNodeEditorUtility.GetUIDFromString("[N]" + ns), -1));
                                    }
                                    //var nsTypes = GetNamespaceTypes(namespaces);
                                    //foreach(var pair in nsTypes) {
                                    //	var nsTree = new SelectorCategoryTreeView(pair.Key, "", uNodeEditorUtility.GetUIDFromString("[Nested-NS]" + pair.Key), -1);
                                    //	foreach(var ns in nestedNS) {
                                    //		if(ns.StartsWith(pair.Key)) {
                                    //			nsTree.AddChild(new NamespaceTreeView(ns, uNodeEditorUtility.GetUIDFromString("[N]" + ns), -1));
                                    //		}
                                    //	}
                                    //	foreach(var type in pair.Value) {
                                    //		nsTree.AddChild(new TypeTreeView(type, type.GetHashCode(), -1));
                                    //	}
                                    //	//nsTree.children.Sort((x, y) => string.Compare(x.displayName, y.displayName));
                                    //	nsTree.expanded = false;
                                    //	result.Add(nsTree);
                                    //}
                                    return(result);
                                }, "All Namespaces", uNodeEditorUtility.GetUIDFromString("[ALL-NS]"), -1)
                                {
                                    icon = uNodeEditorUtility.GetTypeIcon(typeof(TypeIcons.NamespaceIcon)) as Texture2D
                                });
                                categoryTree.AddChild(new SelectorGroupedTreeView(() => {
                                    var result    = new List <TreeViewItem>();
                                    var favorites = uNodeEditor.SavedData.favoriteItems;
                                    if (favorites != null)                                     //Favorite Type and Members
                                    {
                                        var typeTrees   = new List <TypeTreeView>();
                                        var memberTrees = new List <MemberTreeView>();
                                        foreach (var fav in favorites)
                                        {
                                            if (fav.info != null && window.filter.IsValidMember(fav.info))
                                            {
                                                if (fav.info is Type type)
                                                {
                                                    typeTrees.Add(new TypeTreeView(type));
                                                }
                                                else
                                                {
                                                    var tree         = new MemberTreeView(fav.info);
                                                    tree.displayName = tree.member.DeclaringType.Name + "." + tree.displayName;
                                                    memberTrees.Add(tree);
                                                }
                                            }
                                        }
                                        typeTrees.Sort((x, y) => string.Compare(x.displayName, y.displayName));
                                        memberTrees.Sort((x, y) => string.Compare(x.displayName, y.displayName));
                                        var typeCategory = new SelectorCategoryTreeView("Types", "", uNodeEditorUtility.GetUIDFromString("[TYPES]"), -1);
                                        foreach (var tree in typeTrees)
                                        {
                                            typeCategory.AddChild(tree);
                                        }
                                        var memberCategory = new SelectorCategoryTreeView("Members", "", uNodeEditorUtility.GetUIDFromString("[MEMBERS]"), -1);
                                        foreach (var tree in memberTrees)
                                        {
                                            memberCategory.AddChild(tree);
                                        }
                                        if (typeCategory.hasChildren)
                                        {
                                            result.Add(typeCategory);
                                        }
                                        if (memberCategory.hasChildren)
                                        {
                                            result.Add(memberCategory);
                                        }
                                    }
                                    {                                    //Favorite Namespaces
                                        var nsTrees = new List <NamespaceTreeView>();
                                        foreach (var fav in uNodeEditor.SavedData.favoriteNamespaces)
                                        {
                                            nsTrees.Add(new NamespaceTreeView(fav, uNodeEditorUtility.GetUIDFromString("[NS-FAV]" + fav), -1));
                                        }
                                        nsTrees.Sort((x, y) => string.Compare(x.displayName, y.displayName));
                                        var nsCategory = new SelectorCategoryTreeView("Namespaces", "", uNodeEditorUtility.GetUIDFromString("[NS]"), -1);
                                        foreach (var tree in nsTrees)
                                        {
                                            nsCategory.AddChild(tree);
                                        }
                                        if (nsCategory.hasChildren)
                                        {
                                            result.Add(nsCategory);
                                        }
                                    }
                                    return(result);
                                }, "Favorites", uNodeEditorUtility.GetUIDFromString("[fav]"), -1)
                                {
                                    icon = uNodeGUIUtility.Styles.favoriteIconOn
                                });
                                var namespaceTrees = new SelectorCategoryTreeView("Types", "", uNodeEditorUtility.GetUIDFromString("[NS]"), -1);
                                if (displayGeneralType)
                                {
                                    var categTree = new SelectorCategoryTreeView("General", "", uNodeEditorUtility.GetUIDFromString("[GENERAL]"), -1);
                                    var items     = TreeFunction.GetGeneralTrees();
                                    items.ForEach(tree => categTree.AddChild(tree));
                                    namespaceTrees.AddChild(categTree);
                                }
                                if (filter.DisplayRuntimeType)
                                {
                                    var runtimeItems = TreeFunction.GetRuntimeItems();
                                    var runtimeTypes = new Dictionary <string, List <TypeTreeView> >();
                                    foreach (var item in runtimeItems)
                                    {
                                        var ns = item.type.Namespace;
                                        if (string.IsNullOrEmpty(ns) || ns == RuntimeType.RuntimeNamespace)
                                        {
                                            ns = "Generated Type";
                                        }
                                        List <TypeTreeView> list;
                                        if (!runtimeTypes.TryGetValue(ns, out list))
                                        {
                                            list             = new List <TypeTreeView>();
                                            runtimeTypes[ns] = list;
                                        }
                                        list.Add(item);
                                    }
                                    foreach (var pair in runtimeTypes)
                                    {
                                        var categTree = new SelectorCategoryTreeView(pair.Key, "", uNodeEditorUtility.GetUIDFromString("[RT]" + pair.Key), -1);
                                        var items     = pair.Value;
                                        items.ForEach(tree => categTree.AddChild(tree));
                                        namespaceTrees.AddChild(categTree);
                                    }
                                }
                                var typeList = editorData.setup.typeList;
                                foreach (var pair in typeList)
                                {
                                    var nsTree = new SelectorCategoryTreeView(pair.Key, "", uNodeEditorUtility.GetUIDFromString("[CATEG]" + pair.Key), -1);
                                    foreach (var type in pair.Value)
                                    {
                                        nsTree.AddChild(new TypeTreeView(type, type.GetHashCode(), -1));
                                    }
                                    namespaceTrees.AddChild(nsTree);
                                }
                                categories.Add(namespaceTrees);
                            }
                        }
示例#6
0
        public static CodeGenerator.GeneratedData GenerateCSharpScript(IList <uNodeRoot> roots, uNodeData targetData, bool force = true, Action <float, string> updateProgress = null)
        {
            if (!force && targetData == null && roots.All(r => r.graphData.isUpToDate) || roots.Count == 0 && targetData == null)
            {
                return(null);
            }
            var            generatorSettings = targetData?.generatorSettings;
            string         nameSpace;
            IList <string> usingNamespace;
            bool           debug, debugValue;

            if (generatorSettings != null)
            {
                nameSpace      = generatorSettings.Namespace;
                usingNamespace = generatorSettings.usingNamespace;
                debug          = generatorSettings.debug;
                debugValue     = generatorSettings.debugValueNode;
            }
            else if (roots.Count == 1 && roots[0] is IIndependentGraph graph)
            {
                if (graph is IMacroGraph)
                {
                    return(null);                                     //Ensure to bypass macro graph since we don't support it yet.
                }
                nameSpace      = graph.Namespace;
                usingNamespace = graph.UsingNamespaces;
                debug          = roots[0].graphData.debug;
                debugValue     = roots[0].graphData.debugValueNode;
            }
            else if (roots.Count > 0)
            {
                var root = roots.FirstOrDefault();
                nameSpace      = RuntimeType.RuntimeNamespace;
                usingNamespace = (root as INamespaceSystem)?.GetNamespaces().ToList();
                debug          = false;
                debugValue     = false;
            }
            else
            {
                throw new InvalidOperationException();
            }
            return(CodeGenerator.Generate(new CodeGenerator.GeneratorSetting(roots, nameSpace, usingNamespace)
            {
                forceGenerateAllNode = preferenceData.generatorData.forceGenerateAllNode,
                resolveUnityObject = preferenceData.generatorData.resolveUnityObject,
                fullTypeName = preferenceData.generatorData.fullTypeName,
                enableOptimization = preferenceData.generatorData.enableOptimization,
                fullComment = preferenceData.generatorData.fullComment,
                generateTwice = preferenceData.generatorData.generateNodeTwice,
                generationMode = preferenceData.generatorData.generationMode,
                debugScript = debug,
                debugValueNode = debugValue,
                targetData = targetData,
                updateProgress = updateProgress,
            }));
        }