Esempio n. 1
0
    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() + ")");
        }
    }
Esempio n. 2
0
 private void AddChild(BehaviourTree.Succeder parent, BehaviourTree.BaseNode n)
 {
     parent.Node = n;
 }
Esempio n. 3
0
 private void AddChild(BehaviourTree.Inverter parent, BehaviourTree.BaseNode n)
 {
     parent.Node = n;
 }
Esempio n. 4
0
 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);
 }
Esempio n. 5
0
 private void AddChild(BehaviourTree.RepeatUntilFail parent, BehaviourTree.BaseNode n)
 {
     parent.Node = n;
 }
Esempio n. 6
0
    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);
            }
        }
    }