private void AddChild(BehaviourTree.BaseNode parent, BehaviourTree.BaseNode n) { // throw new System.Exception("Error! Can't add child to node " + parent.Id + " (" + parent.GetType().ToString() + ")"); // UGLY!!!! if (parent is BehaviourTree.RepeatUntilFail) { AddChild((BehaviourTree.RepeatUntilFail)parent, n); } else if (parent is BehaviourTree.BaseNodeList) { AddChild((BehaviourTree.BaseNodeList)parent, n); } else if (parent is BehaviourTree.Inverter) { AddChild((BehaviourTree.Inverter)parent, n); } else { throw new System.Exception("Error! Can't add child to node " + parent.Id + " (" + parent.GetType().ToString() + ")"); } }
private void AddChild(BehaviourTree.Succeder parent, BehaviourTree.BaseNode n) { parent.Node = n; }
private void AddChild(BehaviourTree.Inverter parent, BehaviourTree.BaseNode n) { parent.Node = n; }
private void AddChild(BehaviourTree.BaseNodeList parent, BehaviourTree.BaseNode n) { // Debug.Log("Trying to add child [" + n.Id + ":" + n.GetType().ToString() + "] to node " + parent.Id + ":" + parent.GetType().ToString()); parent.AddNode(n); }
private void AddChild(BehaviourTree.RepeatUntilFail parent, BehaviourTree.BaseNode n) { parent.Node = n; }
private void ParseBehaviour() { JsonSerializer js = new JsonSerializer(); loadedTree = js.Deserialize <BTModel.BehaviourTree>(new JsonTextReader(new System.IO.StringReader(behaviourTree.text))); loadedTree.debugNodes = loadedTree.nodes.Values.ToArray(); // create real tree // create nodes List <BehaviourTree.BaseNode> nodes = new List <BehaviourTree.BaseNode>(); foreach (var n in loadedTree.nodes) { nodes.Add(CreateNode(n.Value)); } // assamble nodes root = nodes.Find(n => n.Id == loadedTree.root); // set relationships foreach (var n in loadedTree.nodes) { var modelNode = n.Value; BehaviourTree.BaseNode currentNode = nodes.Find(n2 => n2.Id == modelNode.id); if (modelNode.child != null) { var child = nodes.Find(n3 => n3.Id == modelNode.child); AddChild(currentNode, child); } else if (modelNode.children.Count > 0) { foreach (string childId in modelNode.children) { var child = nodes.Find(n3 => n3.Id == childId); if (!(child is BehaviourTree.NoopNode)) { AddChild(currentNode, child); } else { AddChild(currentNode, child); // Debug.Log("New type: " + currentNode.GetType().ToString()); } } } } List <BehaviourTree.BaseNode> traverseNodes = new List <BehaviourTree.BaseNode>(); root = nodes.Find(n => n.Id == loadedTree.root); traverseNodes.Add(root); if (root is BehaviourTree.RepeatUntilFail) { Debug.Log("Debugger went nuts!"); } while (traverseNodes.Count > 0) { var topNode = traverseNodes[0]; traverseNodes.RemoveAt(0); Debug.Log(topNode.GetType().ToString()); if (topNode is BehaviourTree.RepeatUntilFail) { traverseNodes.Add(((BehaviourTree.RepeatUntilFail)topNode).Node); } else if (topNode is BehaviourTree.BaseNodeList) { foreach (var n in ((BehaviourTree.BaseNodeList)topNode).Nodes) { traverseNodes.Add(n); } } else if (topNode is BehaviourTree.Inverter) { traverseNodes.Add(((BehaviourTree.Inverter)topNode).Node); } else if (topNode is BehaviourTree.Succeder) { traverseNodes.Add(((BehaviourTree.Succeder)topNode).Node); } } }