Пример #1
0
 public SearchTreeNode(string title, NodeType nodeType, SearchTreeNode parent)
 {
     Title     = title;
     NodeType  = nodeType;
     Parent    = parent;
     Activated = false;
 }
Пример #2
0
        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);
            }
Пример #5
0
        private void OnEnable()
        {
            _skin = Resources.Load <GUISkin>("BTSkin");

#if UNITY_EDITOR_WIN
            wantsMouseEnterLeaveWindow = true;
#endif

            GetTypes();
            _tree = CreateSearchTree();
        }
Пример #6
0
 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.");
     }
 }
Пример #7
0
        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]);
                }
            }
        }
Пример #8
0
        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);
                }
            }
        }