public static BehaviourTreeNodeSequenceBuilder <TTickData, TState> RandomSelect <TTickData, TState> (this BehaviourTreeNodeSequenceBuilder <TTickData, TState> builder, string name, Action <BehaviourTreeNodeRandomBuilder <TTickData, TState> > config, bool stateful = false ) { var newNode = new RandomSelectNode <TTickData, TState>(name, stateful); return(builder.Add(newNode, config)); }
public static void RandomSelect <TTickData, TState> (this BehaviourTreeNodeDecoratorBuilder <TTickData, TState> builder, string name, Action <BehaviourTreeNodeRandomBuilder <TTickData, TState> > config, bool stateful = false ) { var newNode = new RandomSelectNode <TTickData, TState>(name, stateful); builder.Decorate(newNode, config); }
public void VerifyExecution(IEnumerable <IBehaviourTreeNode <int, int> > nodes, BehaviourTreeState expectedState) { var selectNode = new RandomSelectNode <int, int>("test"); foreach (var node in nodes) { selectNode.AddNode(node, 1); } var func = selectNode.Compile(); var state = func(0, 0); Assert.Equal(expectedState, state); }
public void VerifyStatefulExecution() { var node1CallCount = 0; var node2CallCount = 0; var node3CallCount = 0; var node1 = new Mock <IBehaviourTreeNode <int, int> >(); node1.Setup(f => f.Compile()).Returns((tick, state) => { node1CallCount++; return(BehaviourTreeState.Failure); }); var node2 = new Mock <IBehaviourTreeNode <int, int> >(); node2.Setup(f => f.Compile()).Returns((tick, state) => { node2CallCount++; return(BehaviourTreeState.Failure); }); var node3 = new Mock <IBehaviourTreeNode <int, int> >(); node3.Setup(f => f.Compile()).Returns((tick, state) => { node3CallCount++; return(node3CallCount > 2 ? BehaviourTreeState.Failure : BehaviourTreeState.Running); }); var selectNode = new RandomSelectNode <int, int>("test", stateful: true); selectNode.AddNode(node1.Object, 33); selectNode.AddNode(node2.Object, 33); selectNode.AddNode(node3.Object, 33); var func = selectNode.Compile(); while (true) { if (func(1, 1) != BehaviourTreeState.Running) { break; } } Assert.Equal(1, node1CallCount); Assert.Equal(1, node2CallCount); Assert.Equal(3, node3CallCount); }
public void test_success_after_failed() { var testNode = new RandomSelectNode( "testNode", new List <IBehaviorNode>() { successNode1.Object, failureNode.Object, successNode2.Object }, randomPermutation.Object); testNode.Execute(bContext.Object); failureNode.Verify(x => x.Execute(bContext.Object)); successNode1.Verify(x => x.Execute(bContext.Object)); successNode2.Verify(x => x.Execute(bContext.Object), Times.Never); }
public void CountRandomCall() { var action1 = new Mock <IBehaviourTreeNode <int, int> >(); var action2 = new Mock <IBehaviourTreeNode <int, int> >(); var action3 = new Mock <IBehaviourTreeNode <int, int> >(); int callCount1 = 0, callCount2 = 0, callCount3 = 0; action1.Setup(f => f.Compile()).Returns((t, s) => { callCount1++; return(BehaviourTreeState.Success); }); action2.Setup(f => f.Compile()).Returns((t, s) => { callCount2++; return(BehaviourTreeState.Success); }); action3.Setup(f => f.Compile()).Returns((t, s) => { callCount3++; return(BehaviourTreeState.Success); }); var randomSequence = new RandomSelectNode <int, int>("test"); randomSequence.AddNode(action1.Object, 100); randomSequence.AddNode(action2.Object, 50); randomSequence.AddNode(action3.Object, 40); var func = randomSequence.Compile(); for (int i = 0; i < 100; i++) { func(0, 0); } var condition = (callCount1 > callCount2) && (callCount2 > callCount3); Assert.True(condition); }
public void RandomSelect(string name, Action <BehaviourTreeNodeRandomBuilder <TTickData, TState> > config, bool stateful = false) { var root = new RandomSelectNode <TTickData, TState>(RootName, stateful); Root(root, config); }