public void fillBHNode(List <BHNodeSerializable> serializableNodes) { BHNodeSerializable serializableNode = new BHNodeSerializable(); serializableNode.nodeType = (int)_nodeType; serializableNode.childCount = _childNodes.Count; serializableNode.indexOfFirstChild = serializableNodes.Count + 1; serializableNode.editorPos = _rect.position; if (_nodeType == NodeType.Action || _nodeType == NodeType.Conditional) { serializableNode.functionName = functionName; } serializableNodes.Add(serializableNode); for (int i = 0; i < _childNodes.Count; i++) { _childNodes[i].fillBHNode(serializableNodes); } }
int readBHTreeComponent(int index, out BHEditorNode bhEditorNode) { BHNodeSerializable serializableNode = behaviourTreeComponent.bhNodesSerializable[index]; bhEditorNode = new BHEditorNode((NodeType)serializableNode.nodeType, serializableNode.editorPos, nodeBoxStyle, childButtonStyle, parentButtonStyle); bhEditorNode.setFunctionName(serializableNode.functionName); bhEditorNode.removeNode = removeNode; bhEditorNode.setScriptType(script.GetClass()); _nodes.Add(bhEditorNode); for (int i = 0; i < serializableNode.childCount; i++) { BHEditorNode childEditorNode; index = readBHTreeComponent(++index, out childEditorNode); childEditorNode.setParent(bhEditorNode); bhEditorNode.addChild(childEditorNode); } return(index); }
public int loadTree <T>(int index, out BHNode node, T instanceType) { BHNodeSerializable serializableNode = bhNodesSerializable[index]; MethodInfo function; NodeFunction functionToExecute; switch ((NodeType)serializableNode.nodeType) { case NodeType.Sequencer: node = new BHSequencer(); break; case NodeType.Selector: node = new BHSelector(); break; case NodeType.LogicAnd: node = new BHLogicAnd(); break; case NodeType.LogicOr: node = new BHLogicOr(); break; case NodeType.DecoratorInverter: node = new BHDecoratorInverter(); break; case NodeType.Conditional: node = new BHConditional(); function = instanceType.GetType().GetMethod(serializableNode.functionName, BindingFlags.NonPublic | BindingFlags.Instance); if (function != null) { Debug.Log("setting function"); functionToExecute = (NodeFunction)Delegate.CreateDelegate(typeof(NodeFunction), instanceType, function); node.setFunctionToExecute(functionToExecute); } break; case NodeType.Action: node = new BHAction(); function = instanceType.GetType().GetMethod(serializableNode.functionName, BindingFlags.NonPublic | BindingFlags.Instance); if (function != null) { Debug.Log("setting function"); functionToExecute = (NodeFunction)Delegate.CreateDelegate(typeof(NodeFunction), instanceType, function); node.setFunctionToExecute(functionToExecute); } break; default: node = new BHNode(); break; } for (int i = 0; i < serializableNode.childCount; i++) { BHNode childNode; index = loadTree <T>(++index, out childNode, instanceType); node.addChild(childNode); } return(index); }