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(); }
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(); }
void Init(IList <T> data) { if (data == null) { throw new ArgumentNullException("data", "Input data is null. Ensure input is a non-null list."); } _data = data; if (_data.Count > 0) { Root = BehaviorTreeNodeUtility.ListToTree(data); } _maxID = _data.Max(e => e.ID); }
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); }
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(); }