public SearchTreeNode(string title, NodeType nodeType, SearchTreeNode parent) { Title = title; NodeType = nodeType; Parent = parent; Activated = false; }
public SearchTreeNode CreateSearchTree() { var root = new SearchTreeNode("Root", new NodeType(), null); foreach (var key in _avaliableTasksDictionary.Keys) { var currentRoot = root; for (var i = 0; i < key.Length; i++) { var children = currentRoot.GetChildrenByTitle(key[i]); if (children == null) { var newNode = new SearchTreeNode(key[i], _avaliableTasksDictionary[key], root); currentRoot.AddChildren(newNode); currentRoot = newNode; } else { currentRoot = children; } } } return(root); }
public static void Execute <T, ET>(GraphNode <T, ET> start, GraphNode <T, ET> end, Action <List <GraphNode <T, ET> > > onPathFound) { var startSearchTreeNode = new SearchTreeNode <T, ET>(start); var queue = new Queue <SearchTreeNode <T, ET> >(); queue.Enqueue(startSearchTreeNode); while (queue.Any()) { var stn = queue.Dequeue(); stn.Node.Visited = true; if (stn.Node == end) { onPathFound(stn.GetPath()); } else if (stn.Node.Edges.Any()) { foreach (var edge in stn.Node.Edges) { if (!edge.Node.Visited) { queue.Enqueue(stn.AddChild(edge.Node)); } } } } }
public SearchTreeNode <T, ET> AddChild(GraphNode <T, ET> edge) { var newNode = new SearchTreeNode <T, ET>(edge) { Parent = this }; Children.Add(newNode); return(newNode); }
private void OnEnable() { _skin = Resources.Load <GUISkin>("BTSkin"); #if UNITY_EDITOR_WIN wantsMouseEnterLeaveWindow = true; #endif GetTypes(); _tree = CreateSearchTree(); }
public void AddChildren(SearchTreeNode children) { if (!Children.Contains(children)) { Children.Add(children); children.Parent = this; } else { Debug.LogError("Cant the same node twice as a children."); } }
public void TraverseDrawing(SearchTreeNode node) { if (node.Parent != null) { if (node.Parent.Activated) { if (!node.HasChildren()) { EditorGUI.indentLevel++; if (GUILayout.Button(node.Title, EditorStyles.miniButton)) { parentWindow.OnSearchedTaskClicked(node.NodeType); parentWindow.Focus(); Close(); parentWindow.searchableTaskWindow = null; } EditorGUI.indentLevel--; } else { EditorGUI.indentLevel++; node.Activated = EditorGUILayout.Foldout(node.Activated, node.Title, true); if (node.Activated) { for (var i = 0; i < node.Children.Count; i++) { TraverseDrawing(node.Children[i]); } } EditorGUI.indentLevel--; } } } else { node.Activated = EditorGUILayout.Foldout(node.Activated, node.Title, true); for (var i = 0; i < node.Children.Count; i++) { TraverseDrawing(node.Children[i]); } } }
public void TraverseSearching(SearchTreeNode root, string searchedWord) { if (!root.HasChildren() && root.Title.ToLower().Contains(searchedWord.ToLower())) // it is a leaf { if (GUILayout.Button(root.Title, EditorStyles.miniButton)) { Debug.Log("Creating a " + root.Title + " task node."); parentWindow.OnSearchedTaskClicked(root.NodeType); parentWindow.Focus(); Close(); parentWindow.searchableTaskWindow = null; } } else { foreach (var child in root.Children) { TraverseSearching(child, searchedWord); } } }