protected void SaveTreeRec(Node node, string path) { uint nodeID = node.GetID(); if (CheckForSavedNode(nodeID, path)) { return; } string nodeName = node.ToString(); string output = nodeID + "," + nodeName; // leaf node if (nodeName == "ActionNode") { ActionNode a = (ActionNode)node; output += "," + a.GetFunction().Method.Name + "," + a.GetFunction().Method.DeclaringType; } // decorator node else if (nodeName == "Inverter" || nodeName == "Repeater" || nodeName == "RepeatTillFail" || nodeName == "Limiter") { if (nodeName == "Repeater") { Repeater r = (Repeater)node; SaveTreeRec(r.ChildNode, path); output += "," + r.ChildNode.GetID() + "," + r.GetNumberOfRepeats(); } else { DecoratorNode d = (DecoratorNode)node; SaveTreeRec(d.ChildNode, path); output += "," + d.ChildNode.GetID(); } } // composite node else if (nodeName == "Selector" || nodeName == "Sequence") { CompositeNode c = (CompositeNode)node; foreach (Node childNode in c.ChildNodeList) { SaveTreeRec(childNode, path); output += "," + childNode.GetID(); } } File.AppendAllText(path, output + Environment.NewLine); }
STreeNode GetTreeNode(Node node) { STreeNode mine = new STreeNode(); var nodeName = node.ToString(); // leaf node if (nodeName == "ActionNode") { ActionNode a = (ActionNode)node; mine.id = a.GetID(); mine.name = a.GetFunction().GetMethodInfo().Name; mine.state = a.NodeState; mine.Type = "ActionNode"; } // decorator node else if (nodeName == "Inverter" || nodeName == "Repeater" || nodeName == "RepeatTillFail" || nodeName == "Limiter" || nodeName == "Succeeder") { DecoratorNode d = (DecoratorNode)node; mine.id = d.GetID(); mine.name = d.ToString(); mine.state = d.NodeState; mine.Type = "DecoratorNode"; mine.children = new List <STreeNode>() { GetTreeNode(d.ChildNode) }; } // composite node else if (nodeName == "Selector" || nodeName == "Sequence") { CompositeNode c = (CompositeNode)node; mine.id = c.GetID(); mine.name = c.ToString(); mine.state = c.NodeState; mine.Type = "CompositeNode"; mine.children = new List <STreeNode>(); foreach (Node childNode in c.ChildNodeList) { mine.children.Add(GetTreeNode(childNode)); } } return(mine); }