public override bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context) { if (entry.userData is UdonNodeDefinition definition && !_graphView.IsDuplicateEventNode(definition.fullName)) { _graphView.AddNodeFromSearch(definition, GetGraphPositionFromContext(context)); return(true); }
public bool OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context) { var type = (Type)searchTreeEntry.userData; _onSelect?.Invoke(type); return(true); }
private void OnCreateNode(NodeCreationContext context) { var windowContext = new SearchWindowContext(context.screenMousePosition, SearchWindowWidth, SearchWindowHeight); SearchWindow.Open(windowContext, m_searchWindowProvider); }
public List <SearchTreeEntry> CreateSearchTree(SearchWindowContext context) { var entries = new List <SearchTreeEntry> { new SearchTreeGroupEntry(new GUIContent("Create Node")) }; var names = Enum.GetNames(typeof(UILayer)); var viewConfiguration = UIViewConfiguration.GlobalInstance; for (int i = 0; i < names.Length - 2; i++) { entries.Add(new SearchTreeGroupEntry(new GUIContent(names[i])) { level = 1 }); var layer = (UILayer)Enum.Parse(typeof(UILayer), names[i]); foreach (var configuration in viewConfiguration.Configurations) { if (configuration.AttachLayer == layer) { entries.Add(new SearchTreeEntry(new GUIContent(configuration.Name)) { level = 2, userData = configuration }); } } } return(entries); }
public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context) { if (entry is SearchTreeGroupEntry) { return(false); } var actorConfig = (ActorConfig)entry.userData; var actorSetup = ActorSystemSetupAnalyzer.CreateActorSetup(actorConfig); m_Asset.ActorSetups.Add(actorSetup); foreach (var inputConfig in actorConfig.InputConfigs) { var isValid = MultiplicityValidator.IsValid(m_Asset.ComponentConfigs.First(x => x.Id == inputConfig.ComponentConfigId).InputMultiplicity, 0); actorSetup.Inputs.Add(new ActorPort(Guid.NewGuid().ToString(), inputConfig.Id, new List <ActorLink>(), isValid, false)); } foreach (var outputConfig in actorConfig.OutputConfigs) { var isValid = MultiplicityValidator.IsValid(m_Asset.ComponentConfigs.First(x => x.Id == outputConfig.ComponentConfigId).OutputMultiplicity, 0); actorSetup.Outputs.Add(new ActorPort(Guid.NewGuid().ToString(), outputConfig.Id, new List <ActorLink>(), isValid, false)); } var node = CreateNode(actorSetup); var pointInWindow = context.screenMousePosition - position.position; var pointInGraph = node.parent.WorldToLocal(pointInWindow); node.SetPosition(new Rect(pointInGraph, Vector2.zero)); actorSetup.Position = pointInGraph; return(true); }
public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context) { var nodeEntry = (NodeEntry)entry.userData; var nodeEditor = nodeEntry.LogicNodeEditor; var windowMousePosition = _editorWindow.rootVisualElement.ChangeCoordinatesTo(_editorWindow.rootVisualElement.parent, context.screenMousePosition - _editorWindow.position.position); var graphMousePosition = _graphView.contentViewContainer.WorldToLocal(windowMousePosition); nodeEditor.Position = new Vector3(graphMousePosition.x, graphMousePosition.y, 0); _logicGraphEditorView.AddNode(nodeEditor); if (ConnectedLogicPort != null) { var connectedSlotReference = ConnectedLogicPort.Slot; var compatibleSlotReference = nodeEditor.FindOutputSlot <LogicSlot>(nodeEntry.compatibleSlotId); var fromReference = ConnectedLogicPort.Slot.isOutputSlot ? connectedSlotReference : compatibleSlotReference; var toReference = ConnectedLogicPort.Slot.isOutputSlot ? compatibleSlotReference : connectedSlotReference; _logicGraphEditorView.RemoveEdgesConnectedTo(ConnectedLogicPort); _logicGraphEditorView.AddEdge(fromReference, toReference); } return(true); }
public List <SearchTreeEntry> CreateSearchTree(SearchWindowContext context) { var entries = new List <SearchTreeEntry> { new SearchTreeGroupEntry(new GUIContent("Create Node")), new SearchTreeEntry(new GUIContent("State")) { level = 1 }, new SearchTreeEntry(new GUIContent("Any State")) { level = 1 }, new SearchTreeEntry(new GUIContent("Parameter")) { level = 1 }, }; if (!GraphView.nodes.ToList().Exists(n => n is AnyStatePriorityManagerNodeUI)) { entries.Insert(3, new SearchTreeEntry(new GUIContent("Any State Priority Manager")) { level = 1 }); } return(entries); }
public List <SearchTreeEntry> CreateSearchTree(SearchWindowContext context) { var tree = new List <SearchTreeEntry>(); tree.Add(new SearchTreeGroupEntry(new GUIContent("Create Node"), 0)); Texture2D icon = EditorGUIUtility.FindTexture("cs Script Icon"); tree.Add(new SearchTreeGroupEntry(new GUIContent("Test Category"), 1)); tree.Add(new SearchTreeEntry(new GUIContent("Test Item1", icon)) { level = 2, userData = typeof(SampleGraphView) }); tree.Add(new SearchTreeEntry(new GUIContent("Test Item2", icon)) { level = 2, userData = typeof(SampleGraphView) }); tree.Add(new SearchTreeEntry(new GUIContent("Test Item3", icon)) { level = 2, userData = typeof(SampleGraphView) }); tree.Add(new SearchTreeEntry(new GUIContent("Test Item4", icon)) { level = 2, userData = typeof(SampleGraphView) }); tree.Add(new SearchTreeEntry(new GUIContent("Create Dialogue", icon)) { level = 2 }); return(tree); }
public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context) { var nodeEntry = (NodeEntry)entry.userData; var nodeEditor = nodeEntry.NodeEditor; var windowMousePosition = _editorWindow.GetRootVisualContainer().ChangeCoordinatesTo(_editorWindow.GetRootVisualContainer().parent, context.screenMousePosition - _editorWindow.position.position); var graphMousePosition = _graphView.contentViewContainer.WorldToLocal(windowMousePosition); nodeEditor.Position = new Vector3(graphMousePosition.x, graphMousePosition.y, 0); _logicGraphEditorView.AddNode(nodeEditor); // if (connectedPort != null) // { // var connectedSlot = connectedPort.slot; // var connectedSlotReference = connectedSlot.owner.GetSlotReference(connectedSlot.id); // var compatibleSlotReference = node.GetSlotReference(nodeEntry.compatibleSlotId); // // var fromReference = connectedSlot.isOutputSlot ? connectedSlotReference : compatibleSlotReference; // var toReference = connectedSlot.isOutputSlot ? compatibleSlotReference : connectedSlotReference; // m_Graph.Connect(fromReference, toReference); // // nodeNeedsRepositioning = true; // targetSlotReference = compatibleSlotReference; // targetPosition = graphMousePosition; // } return(true); }
public List <SearchTreeEntry> CreateSearchTree(SearchWindowContext context) { var tree = new List <SearchTreeEntry> { //First group entries are the header of it new SearchTreeGroupEntry(new GUIContent("Create Stuff"), 0), //level = Row //Logic Group new SearchTreeGroupEntry(new GUIContent("Logic"), 1), // AINode new SearchTreeEntry(new GUIContent("AINode", _iconFix)) { userData = new AINode(), level = 2, }, // new SearchTreeEntry(new GUIContent("Hello world", _iconFix)) { level = 2 } }; for (int i = 0; i < 30; i++) { tree.Add(new SearchTreeEntry(new GUIContent("AINode" + i, _iconFix)) { userData = new AINode(), level = 2, }); } return(tree); }
override public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context) { // should check for adding duplicate event nodes here, look at Legacy.UdonGraph.TryCreateNodeInstance // Assuming that if we've made it to this point we're allowed to add the node UdonNode node; // checking type so we can support selecting registries as well if (entry.userData is UdonNodeDefinition && !_graphView.IsDuplicateEventNode((entry.userData as UdonNodeDefinition).fullName)) { node = UdonNode.CreateNode(entry.userData as UdonNodeDefinition, _graphView); _graphView.AddElement(node); node.SetPosition(new Rect(GetGraphPositionFromContext(context), Vector2.zero)); node.Select(_graphView, false); // Do we need to do this to reserialize, etc? _graphView.ReSerializeData(); return(true); } else { return(false); } }
public bool OnSelectEntry(SearchTreeEntry SearchTreeEntry, SearchWindowContext context) { var mousePosition = _window.rootVisualElement.ChangeCoordinatesTo(_window.rootVisualElement.parent, context.screenMousePosition - _window.position.position); var graphMousePosition = _graphView.contentViewContainer.WorldToLocal(mousePosition); switch (SearchTreeEntry.userData) { case Group group: var rect = new Rect(graphMousePosition, EasyGraphView.CommentGroupSize); _graphView.CreateCommentGroup(rect); return(true); case TriggerNode triggerNode: _graphView.CreateAndAddNode <TriggerNode>(graphMousePosition); return(true); case ConditionNode conditionNode: _graphView.CreateAndAddNode <ConditionNode>(graphMousePosition); return(true); case ActionNode actionNode: _graphView.CreateAndAddNode <ActionNode>(graphMousePosition); return(true); } return(false); }
public List <SearchTreeEntry> CreateSearchTree(SearchWindowContext context) { return(new List <SearchTreeEntry> { new SearchTreeGroupEntry(new GUIContent("Create Node"), 0), new SearchTreeGroupEntry(new GUIContent("Instruction"), 1), new SearchTreeEntry(new GUIContent("Trigger Node", _icon)) { level = 2, userData = new TriggerNode() }, new SearchTreeEntry(new GUIContent("Condition Node", _icon)) { level = 2, userData = new ConditionNode() }, new SearchTreeEntry(new GUIContent("Action Node", _icon)) { level = 2, userData = new ActionNode() }, new SearchTreeEntry(new GUIContent("Comment Group", _icon)) { level = 1, userData = new Group() } }); }
public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context) { TargetParameter.BehaviorActionValue = (BehaviorAction)entry.userData; TargetParameter = null; return(true); }
public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context) { if (!(entry is SearchTreeGroupEntry)) { Type createType = entry.userData as Type; Node node = CreateNodeFromType(createType, null); if (node == null) { return(false); } node.userData = createType; m_GraphView.AddElement(node); Vector2 pointInWindow = context.screenMousePosition - position.position; Vector2 pointInGraph = node.parent.WorldToLocal(pointInWindow); node.SetPosition(new Rect(pointInGraph, Vector2.zero)); node.Select(m_GraphView, false); SaveGraphData(); return(true); } return(false); }
public bool OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context) { var worldMousePosition = _window.rootVisualElement.ChangeCoordinatesTo(_window.rootVisualElement.parent, context.screenMousePosition - _window.position.position); var localMousePosition = _graphView.contentViewContainer.WorldToLocal(worldMousePosition); switch (searchTreeEntry.userData) { case Group group: var rect = new Rect(localMousePosition, _graphView.DefaultCommentBlockSize); _graphView.CreateCommentBlock(rect); return(true); case OperatorInfo info: _graphView.AddElement(NodeFactory.CreateNode(new FrpNodeData { CodeText = "Write code here", OperatorInfo = info, Position = localMousePosition, Guid = Guid.NewGuid().ToString() })); return(true); } return(false); }
public bool OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context) { if (_graphView == null || _editorWindow == null) { return(false); } //Get Relative world position of search window in regards to the Editor Window visual element Vector2 worldMousePosition = _editorWindow.rootVisualElement.ChangeCoordinatesTo( _editorWindow.rootVisualElement.parent, context.screenMousePosition - _editorWindow.position.position); // Transform to local coordinates based on GraphView Vector2 localMousePosition = _graphView.contentViewContainer.WorldToLocal(worldMousePosition); switch (searchTreeEntry.userData) { case DialogueNode node: { Debug.Log("Created"); _graphView.CreateNode("Dialogue Node", localMousePosition); return(true); } default: { return(false); } } }
public bool OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context) { var windowRoot = graphView.GraphWindow.rootVisualElement; var windowMousePosition = windowRoot.ChangeCoordinatesTo(windowRoot.parent, context.screenMousePosition - graphView.GraphWindow.position.position); var graphMousePosition = graphView.contentViewContainer.WorldToLocal(windowMousePosition); BaseNode createNode = graphView.Model.NewNode(searchTreeEntry.userData as Type, graphMousePosition); //自动连接 if (ConnectionFilter != null) { graphView.CommandDispacter.Do(new AddNodeCommand(graphView.Model, createNode)); Port port = ConnectionFilter.input == null ? ConnectionFilter.output : ConnectionFilter.input; BasePortView portView1 = port as BasePortView; string portName = nodePortNameMap[searchTreeEntry.userData as Type]; if (checkInPort) { graphView.CommandDispacter.Do(new ConnectCommand(graphView.Model, createNode, portName, waitConnectNode, waitConnectPortName)); } else { graphView.CommandDispacter.Do(new ConnectCommand(graphView.Model, waitConnectNode, waitConnectPortName, createNode, portName)); } } else { graphView.CommandDispacter.Do(new AddNodeCommand(graphView.Model, createNode)); } graphView.GraphWindow.Focus(); return(true); }
public List <SearchTreeEntry> CreateSearchTree(SearchWindowContext context) { List <SearchTreeEntry> tree = new List <SearchTreeEntry>(); if (_data != null) { tree.Add(new SearchTreeGroupEntry(new GUIContent("Create Element"), 0)); List <SearchElement> dataSearchList = _data.GetSearchMenu(); dataSearchList.ForEach(searchElement => { if (searchElement.nodeType != null & searchElement.nodeType != "") { tree.Add(new SearchTreeEntry(new GUIContent(searchElement.name, _indentationIcon)) { userData = GetInstance(searchElement.nodeType), level = searchElement.level }); } else { tree.Add(new SearchTreeGroupEntry(new GUIContent(searchElement.name), searchElement.level)); } }); } else { tree.Add(new SearchTreeGroupEntry(new GUIContent("No Node Available"), 0)); } return(tree); }
bool ISearchWindowProvider.OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context) { var type = searchTreeEntry.userData as System.Type; this.node.SetBehavior(type); return(true); }
List <SearchTreeEntry> ISearchWindowProvider.CreateSearchTree(SearchWindowContext context) { var entries = new List <SearchTreeEntry>(); entries.Add(new SearchTreeGroupEntry(new GUIContent("Create Node"))); // Exampleというグループを追加 entries.Add(new SearchTreeGroupEntry(new GUIContent("Example")) { level = 1 }); // Exampleグループの下に各ノードを作るためのメニューを追加 entries.Add(new SearchTreeEntry(new GUIContent(nameof(ValueNode))) { level = 2, userData = typeof(ValueNode) }); entries.Add(new SearchTreeEntry(new GUIContent(nameof(AddNode))) { level = 2, userData = typeof(AddNode) }); entries.Add(new SearchTreeEntry(new GUIContent(nameof(OutputNode))) { level = 2, userData = typeof(OutputNode) }); return(entries); }
public List <SearchTreeEntry> CreateSearchTree(SearchWindowContext context) { _results.Clear(); _results.Add(new SearchTreeGroupEntry(new GUIContent("Create Node"))); foreach (var nodeType in _graphType.AvailableNodes) { // we need to create a node to know what ports it have SNode newNode = nodeType.CreateSNode(); // if we have _fromPort, check that we can connect it to any of the input ports in the newNode if (_fromPort == null || newNode.InputPorts().Any(p => _graphType.FindConnectionType(_fromPort.Type, p.Type) != null)) { var content = new GUIContent(ObjectNames.NicifyVariableName(nodeType.Name)); var searchEntry = new SearchTreeEntry(content) { level = 1, userData = newNode }; _results.Add(searchEntry); } } return(_results); }
public List <SearchTreeEntry> CreateSearchTree(SearchWindowContext context) { var tree = new List <SearchTreeEntry>(); tree.Add(new SearchTreeGroupEntry(new GUIContent("Create Node"))); var nodes = m_Asset.ActorConfigs .OrderBy(x => x.GroupName) .ThenBy(x => x.DisplayName) .ToList(); string lastNodeGroupName = null; foreach (var node in nodes) { if (node.IsRemoved) { continue; } if (node.GroupName != lastNodeGroupName) { lastNodeGroupName = node.GroupName; tree.Add(new SearchTreeGroupEntry(new GUIContent(node.GroupName), 1)); } tree.Add(new SearchTreeEntry(new GUIContent(node.DisplayName)) { level = 2, userData = node }); } return(tree); }
public List <SearchTreeEntry> CreateSearchTree(SearchWindowContext context) { var tree = new List <SearchTreeEntry>() { new SearchTreeGroupEntry(new GUIContent("Create Node"), 0) }; foreach (var entry in _taskNodes .GroupBy(x => x.GetCustomAttribute <TaskCategoryAttribute>()?.Category) .OrderBy(x => x.Key)) { tree.Add(new SearchTreeGroupEntry(new GUIContent(entry.Key ?? "Miscellaneous"), 1)); foreach (var child in entry) { if (child.IsAbstract) { continue; } tree.Add(new SearchTreeEntry(new GUIContent(ObjectNames.NicifyVariableName(child.Name), _indentationIcon)) { level = 2, userData = child }); } } return(tree); }
public List <SearchTreeEntry> CreateSearchTree(SearchWindowContext context) { var tree = new List <SearchTreeEntry> { new SearchTreeGroupEntry(new GUIContent("Custom Passes"), 0), }; foreach (var customPassType in TypeCache.GetTypesDerivedFrom <CustomPass>()) { if (customPassType.IsAbstract) { continue; } if (customPassType.GetCustomAttribute <HideInInspector>() != null) { continue; } tree.Add(new SearchTreeEntry(new GUIContent(customPassType.Name, icon)) { level = 1, userData = customPassType }); } return(tree); }
// Node creation when validate a choice public bool OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context) { // window to graph position var windowRoot = window.rootVisualElement; var windowMousePosition = windowRoot.ChangeCoordinatesTo(windowRoot.parent, context.screenMousePosition - window.position.position); var graphMousePosition = graphView.contentViewContainer.WorldToLocal(windowMousePosition); var nodeType = searchTreeEntry.userData is Type ? (Type)searchTreeEntry.userData : ((NodeProvider.PortDescription)searchTreeEntry.userData).nodeType; graphView.RegisterCompleteObjectUndo("Added " + nodeType); var view = graphView.AddNode(BaseNode.CreateFromType(nodeType, graphMousePosition)); if (searchTreeEntry.userData is NodeProvider.PortDescription desc) { var targetPort = view.GetPortViewFromFieldName(desc.portFieldName, desc.portIdentifier); if (inputPortView == null) { graphView.Connect(targetPort, outputPortView); } else { graphView.Connect(inputPortView, targetPort); } } return(true); }
List <SearchTreeEntry> ISearchWindowProvider.CreateSearchTree(SearchWindowContext context) { dataLoadFlag = false; var entries = new List <SearchTreeEntry>(); entries.Add(new SearchTreeGroupEntry(new GUIContent("新規作成"))); //entries.Add(new SearchTreeGroupEntry(new GUIContent("Read Node")) { level = 1 }); //entries.Add(new SearchTreeEntry(new GUIContent(nameof(TestNode))) { level = 2, userData = typeof(ReadNode) }); entries.Add(new SearchTreeGroupEntry(new GUIContent("Create New Node")) { level = 1 }); //追加するノードの設定 entries.Add(new SearchTreeEntry(new GUIContent(nameof(OutlineNode))) { level = 2, userData = typeof(OutlineNode) }); //entries.Add(new SearchTreeEntry(new GUIContent(nameof(BoolNode))) { level = 2, userData = typeof(BoolNode) }); //entries.Add(new SearchTreeEntry(new GUIContent(nameof(NumNode))) { level = 2, userData = typeof(NumNode) }); //entries.Add(new SearchTreeEntry(new GUIContent(nameof(StringNode))) { level = 2, userData = typeof(StringNode) }); //entries.Add(new SearchTreeEntry(new GUIContent(nameof(ValueNode))) { level = 2, userData = typeof(ValueNode) }); //entries.Add(new SearchTreeGroupEntry(new GUIContent("Upload Node")) { level = 1 }); //entries.Add(new SearchTreeEntry(new GUIContent(nameof(UploadNode))) { level = 2, userData = typeof(UploadNode) }); return(entries); }
public List <SearchTreeEntry> CreateSearchTree(SearchWindowContext context) { var tree = new List <SearchTreeEntry>(); tree.Add(new SearchTreeGroupEntry(new GUIContent("Create Node"), 0)); Texture2D icon = EditorGUIUtility.FindTexture("cs Script Icon"); tree.Add(new SearchTreeGroupEntry(new GUIContent("Conditionals"), 1)); tree.Add(CreateSearchTreeEntry(icon, 2, typeof(StoryEventConditionNode))); tree.Add(CreateSearchTreeEntry(icon, 2, typeof(ItemInInventoryConditionNode))); tree.Add(CreateSearchTreeEntry(icon, 2, typeof(SelectedInventoryItemConditionNode))); tree.Add(new SearchTreeGroupEntry(new GUIContent("Actions"), 1)); tree.Add(CreateSearchTreeEntry(icon, 2, typeof(WalkToNode))); tree.Add(CreateSearchTreeEntry(icon, 2, typeof(PickUpNode))); tree.Add(CreateSearchTreeEntry(icon, 2, typeof(DropNode))); tree.Add(CreateSearchTreeEntry(icon, 2, typeof(SetStoryEventNode))); tree.Add(CreateSearchTreeEntry(icon, 2, typeof(TriggerSceneNode))); tree.Add(CreateSearchTreeEntry(icon, 2, typeof(TriggerDialogNode))); tree.Add(CreateSearchTreeEntry(icon, 2, typeof(TriggerSingleLineNode))); tree.Add(CreateSearchTreeEntry(icon, 2, typeof(WaitSecondsNode))); tree.Add(CreateSearchTreeEntry(icon, 2, typeof(SetGameObjectActiveNode))); tree.Add(new SearchTreeGroupEntry(new GUIContent("Animation"), 1)); tree.Add(CreateSearchTreeEntry(icon, 2, typeof(AnimTriggerNode))); tree.Add(CreateSearchTreeEntry(icon, 2, typeof(SetAnimBooleanNode))); tree.Add(new SearchTreeGroupEntry(new GUIContent("Debug"), 1)); tree.Add(CreateSearchTreeEntry(icon, 2, typeof(PrintNode))); return(tree); }
public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context) { var nodeEntry = (NodeEntry)entry.userData; var node = nodeEntry.node; var drawState = node.drawState; var windowRoot = m_EditorWindow.rootVisualElement; var windowMousePosition = windowRoot.ChangeCoordinatesTo(windowRoot.parent, context.screenMousePosition - m_EditorWindow.position.position); var graphMousePosition = m_GraphView.contentViewContainer.WorldToLocal(windowMousePosition); drawState.position = new Rect(graphMousePosition, Vector2.zero); node.drawState = drawState; m_Graph.owner.RegisterCompleteObjectUndo("Add " + node.name); m_Graph.AddNode(node); if (connectedPort != null) { var connectedSlot = connectedPort.slot; var connectedSlotReference = connectedSlot.owner.GetSlotReference(connectedSlot.id); var compatibleSlotReference = node.GetSlotReference(nodeEntry.compatibleSlotId); var fromReference = connectedSlot.isOutputSlot ? connectedSlotReference : compatibleSlotReference; var toReference = connectedSlot.isOutputSlot ? compatibleSlotReference : connectedSlotReference; m_Graph.Connect(fromReference, toReference); nodeNeedsRepositioning = true; targetSlotReference = compatibleSlotReference; targetPosition = graphMousePosition; } return(true); }
public List <SearchTreeEntry> CreateSearchTree(SearchWindowContext context) { List <SearchTreeEntry> tree = new List <SearchTreeEntry>(); tree.Add(new SearchTreeGroupEntry(new GUIContent("Create Node"), 0)); tree.Add(new SearchTreeGroupEntry(new GUIContent(m_graphTypeMetadata.ActiveGraphType.Name + " Nodes"), 1)); List <Type> nodeTypes = m_graphTypeMetadata.GetNodeTypesFromGraphType(m_graphTypeMetadata.ActiveGraphType); for (int i = 0; i < nodeTypes.Count; i++) { tree.Add(new SearchTreeEntry(new GUIContent(nodeTypes[i].Name)) { userData = nodeTypes[i], level = 2 }); } tree.Add(new SearchTreeGroupEntry(new GUIContent("Universal Nodes"), 1)); for (int i = 0; i < m_graphTypeMetadata.UniversalNodeTypes.Count; i++) { tree.Add(new SearchTreeEntry(new GUIContent(m_graphTypeMetadata.UniversalNodeTypes[i].Name)) { userData = m_graphTypeMetadata.UniversalNodeTypes[i], level = 2 }); } return(tree); }