Exemplo n.º 1
0
        public void AddElements(IList <T> elements, BehaviorTreeNode parent)
        {
            if (elements == null)
            {
                throw new ArgumentNullException("elements", "elements is null");
            }
            if (elements.Count == 0)
            {
                throw new ArgumentNullException("elements", "elements Count is 0: nothing to add");
            }
            if (parent == null)
            {
                throw new ArgumentNullException("parent", "parent is null");
            }

            RecordUndo("Add nodes");

            if (parent.Children == null)
            {
                parent.Children = new List <BehaviorTreeNode>();
            }

            parent.Children.AddRange(elements.Cast <BehaviorTreeNode>());
            foreach (var element in elements)
            {
                element.Parent = parent;
                element.Depth  = parent.Depth + 1;
                BehaviorTreeNodeUtility.UpdateDepthValues(element);
            }

            BehaviorTreeNodeUtility.TreeToList(Root, _data);

            Changed();
        }
Exemplo n.º 2
0
        public void AddElement(T element, BehaviorTreeNode parent)
        {
            if (element == null)
            {
                throw new ArgumentNullException("element", "element is null");
            }
            if (parent == null)
            {
                throw new ArgumentNullException("parent", "parent is null");
            }

            RecordUndo("Add node");

            if (parent.Children == null)
            {
                parent.Children = new List <BehaviorTreeNode>();
            }

            parent.Children.Add(element);
            element.Parent = parent;

            BehaviorTreeNodeUtility.UpdateDepthValues(parent);
            BehaviorTreeNodeUtility.TreeToList(Root, _data);

            Changed();
        }
Exemplo n.º 3
0
        public void MoveElements(BehaviorTreeNode parentElement, int insertionIndex, List <BehaviorTreeNode> elements)
        {
            if (insertionIndex < 0)
            {
                throw new ArgumentException("Invalid input: insertionIndex is -1, client needs to decide what index elements should be reparented at");
            }

            // Invalid reparenting input
            if (parentElement == null)
            {
                return;
            }

            RecordUndo("Move nodes");

            // We are moving items so we adjust the insertion index to accomodate that any items above the insertion index is removed before inserting
            if (insertionIndex > 0)
            {
                insertionIndex -= parentElement.Children.GetRange(0, insertionIndex).Count(elements.Contains);
            }

            // Remove draggedItems from their parents
            foreach (var draggedItem in elements)
            {
                draggedItem.Parent.Children.Remove(draggedItem);    // remove from old parent
                draggedItem.Parent = parentElement;                 // set new parent
            }

            if (parentElement.Children == null)
            {
                parentElement.Children = new List <BehaviorTreeNode>();
            }

            // Insert dragged items under new parent
            parentElement.Children.InsertRange(insertionIndex, elements);

            BehaviorTreeNodeUtility.UpdateDepthValues(Root);
            BehaviorTreeNodeUtility.TreeToList(Root, _data);

            Changed();
        }
        IList <BehaviorTreeNode> GetData()
        {
            if (BehaviorTreeAsset != null)
            {
                //if (_behaviorTreeAsset.Root.Children.Count == 0)
                //{
                //    Debug.Log("Creating Children.");
                //    var treeModel = TreeView.TreeModel;
                //    treeModel.AddElement(new MoveToDestination("Move to Point", 0, treeModel.GenerateUniqueID()));
                //    treeModel.AddElement(new MoveToDestination("Move to Point2", 0, treeModel.GenerateUniqueID()));
                //}

                List <BehaviorTreeNode> nodes = new List <BehaviorTreeNode>();
                BehaviorTreeNodeUtility.TreeToList(BehaviorTreeAsset.Root, nodes);
                return(nodes);
            }

            var empty = new List <BehaviorTreeNode>();

            empty.Add(new BehaviorTreeRoot("Root", -1, 0));
            return(empty);
        }
Exemplo n.º 5
0
        public void RemoveElements(IList <T> elements)
        {
            foreach (var element in elements)
            {
                if (element == Root)
                {
                    throw new ArgumentException("It is not allowed to remove the root element");
                }
            }

            RecordUndo("Remove nodes");

            var commonAncestors = BehaviorTreeNodeUtility.FindCommonAncestorsWithinList(elements);

            foreach (var element in commonAncestors)
            {
                element.Parent.Children.Remove(element);
                element.Parent = null;
            }

            BehaviorTreeNodeUtility.TreeToList(Root, _data);

            Changed();
        }