private void CreateBehaviourTree() { //LeafNode lookRecipe = behaviourTree.CreateLeafNode("Look recipe", CreateRecipe, IsRecipeCreated); LeafNode bake = behaviourTree.CreateLeafNode("Bake pizza", BakePizza, IsPizzaBaked); SequenceNode makePizza = behaviourTree.CreateSequenceNode("Make a pizza", false); makePizza.AddChild(lookRecipe); makePizza.AddChild(subFSM); makePizza.AddChild(bake); LoopDecoratorNode loopNode = behaviourTree.CreateLoopNode("Loop root", makePizza); behaviourTree.SetRootNode(loopNode); }
/// <summary> /// Creates a new infinite <see cref="LoopDecoratorNode"/> in the behaviour tree /// </summary> /// <param name="name">The name of the node</param> /// <param name="child">The child of the node</param> /// <returns></returns> public LoopDecoratorNode CreateLoopNode(string name, TreeNode child) { if (!states.ContainsKey(name)) { LoopDecoratorNode loopNode = new LoopDecoratorNode(name, child, this); BTnodes.Add(loopNode); states.Add(name, loopNode.StateNode); return(loopNode); } else { throw new DuplicateWaitObjectException(name, "The node already exists in the behaviour tree"); } }
private void CreateBehaviourTree() { behaviourTree = new BehaviourTreeEngine(false); LeafNode throwRod = behaviourTree.CreateLeafNode("Throw rod", ThrowRod, RodThrown); LeafNode catchSomething = behaviourTree.CreateLeafNode("Catch something", Catch, SomethingCatched); LeafNode returnToWater = behaviourTree.CreateLeafNode("Return to water", () => Invoke("ReturnToWater", 2), ReturnedToWater); LeafNode storeInBasket = behaviourTree.CreateLeafNode("Store in the basket", () => Invoke("StoreBasket", 2), StoredInBasket); TimerDecoratorNode timerNode = behaviourTree.CreateTimerNode("Timer node", catchSomething, 3); SelectorNode selectorNode = behaviourTree.CreateSelectorNode("Selector node"); selectorNode.AddChild(returnToWater); selectorNode.AddChild(storeInBasket); SequenceNode sequenceNode = behaviourTree.CreateSequenceNode("Sequence node", false); sequenceNode.AddChild(throwRod); sequenceNode.AddChild(timerNode); sequenceNode.AddChild(selectorNode); LoopDecoratorNode rootNode = behaviourTree.CreateLoopNode("Root node", sequenceNode); behaviourTree.SetRootNode(rootNode); }
private void CreateBehaviourTree() { behaviourTree = new BehaviourTreeEngine(false); LeafNode toPoint1 = behaviourTree.CreateLeafNode("To point 1", () => ToPoint(routePoints[0]), () => ArrivedToPoint(routePoints[0])); LeafNode toPoint2 = behaviourTree.CreateLeafNode("To point 2", () => ToPoint(routePoints[1]), () => ArrivedToPoint(routePoints[1])); LeafNode toPoint3 = behaviourTree.CreateLeafNode("To point 3", () => ToPoint(routePoints[2]), () => ArrivedToPoint(routePoints[2])); LeafNode toPoint4 = behaviourTree.CreateLeafNode("To point 4", () => ToPoint(routePoints[3]), () => ArrivedToPoint(routePoints[3])); LeafNode toPoint5 = behaviourTree.CreateLeafNode("To point 5", () => ToPoint(routePoints[4]), () => ArrivedToPoint(routePoints[4])); LeafNode toPoint6 = behaviourTree.CreateLeafNode("To point 6", () => ToPoint(routePoints[5]), () => ArrivedToPoint(routePoints[5])); SequenceNode sequenceRoute = behaviourTree.CreateSequenceNode("Route", false); sequenceRoute.AddChild(toPoint1); sequenceRoute.AddChild(toPoint2); sequenceRoute.AddChild(toPoint3); sequenceRoute.AddChild(toPoint4); sequenceRoute.AddChild(toPoint5); sequenceRoute.AddChild(toPoint6); LoopDecoratorNode loopNode = behaviourTree.CreateLoopNode("Loop root", sequenceRoute); behaviourTree.SetRootNode(loopNode); }