public void InvertRunningTest() { var tickProvider = new TestTickSupplier(); var root = new BehaviourTreeBuilder <TestBlackboard>() .Inverter("Invert status") .Wait("Increment counter 1", 3, tickProvider) .End() .Build(); var metadata = new BehaviourTreeMetadata <TestBlackboard>(root); var data = metadata.CreateExecutionData(); var executor = new BehaviourTreeExecutor <TestBlackboard>(root); var blackboard = new TestBlackboard(); executor.Start(data); executor.Tick(data, blackboard); Assert.AreEqual(BehaviourTreeStatus.Running, data.Statuses[root.Id]); tickProvider.Tick(); executor.Tick(data, blackboard); Assert.AreEqual(BehaviourTreeStatus.Running, data.Statuses[root.Id]); tickProvider.Tick(); executor.Tick(data, blackboard); Assert.AreEqual(BehaviourTreeStatus.Running, data.Statuses[root.Id]); tickProvider.Tick(); executor.Tick(data, blackboard); Assert.AreEqual(BehaviourTreeStatus.Failure, data.Statuses[root.Id]); Assert.AreEqual(0, data.Stack.Count); }
public void RepeatUntilStatusReachedNodeTest() { var root = new BehaviourTreeBuilder <TestBlackboard>() .UntilSucceess("Repeat until success") .Do("Reach limit", TestActions.ReachLimitAction) .End() .Build(); var metadata = new BehaviourTreeMetadata <TestBlackboard>(root); var data = metadata.CreateExecutionData(); var executor = new BehaviourTreeExecutor <TestBlackboard>(root); var blackboard = new TestBlackboard(); executor.Start(data); executor.Tick(data, blackboard); Assert.AreEqual(BehaviourTreeStatus.Running, data.Statuses[root.Id]); Assert.AreEqual(1, blackboard.Counter1); executor.Tick(data, blackboard); Assert.AreEqual(BehaviourTreeStatus.Running, data.Statuses[root.Id]); Assert.AreEqual(2, blackboard.Counter1); executor.Tick(data, blackboard); Assert.AreEqual(BehaviourTreeStatus.Success, data.Statuses[root.Id]); Assert.AreEqual(3, blackboard.Counter1); Assert.AreEqual(0, data.Stack.Count); }
public void InterruptionTest() { var tickProvider = new TestTickSupplier(); var root = new BehaviourTreeBuilder <TestBlackboard>() .Sequence("Sequence") .Inverter("Inverter") .Do("Reach limit", TestActions.ReachLimitAction) .End() .Wait("Wait 5 ticks", 5, tickProvider) .End() .Build(); var metadata = new BehaviourTreeMetadata <TestBlackboard>(root); var data = metadata.CreateExecutionData(); var executor = new BehaviourTreeExecutor <TestBlackboard>(root); var blackboard = new TestBlackboard(); executor.Start(data); for (var i = 0; i < 5; i++) { executor.Tick(data, blackboard); Assert.AreEqual(BehaviourTreeStatus.Running, data.Statuses[root.Id]); Assert.AreEqual(1, blackboard.Counter1); tickProvider.Tick(); } executor.Tick(data, blackboard); Assert.AreEqual(BehaviourTreeStatus.Success, data.Statuses[root.Id]); Assert.AreEqual(1, blackboard.Counter1); Assert.AreEqual(0, data.Stack.Count); }
public void SelectorRunningTest() { var tickProvider = new TestTickSupplier(); var root = new BehaviourTreeBuilder <TestBlackboard>() .Selector("Sequence") .AlwaysFail("Fail increment") .Do("Increment counter 1", TestActions.IncrementCounter1) .End() .Wait("Wait 1 tick", 1, tickProvider) .Do("Increment counter 2", TestActions.IncrementCounter2) .End() .Build(); var metadata = new BehaviourTreeMetadata <TestBlackboard>(root); var data = metadata.CreateExecutionData(); var executor = new BehaviourTreeExecutor <TestBlackboard>(root); var blackboard = new TestBlackboard(); executor.Start(data); executor.Tick(data, blackboard); Assert.AreEqual(BehaviourTreeStatus.Running, data.Statuses[root.Id]); Assert.AreEqual(1, blackboard.Counter1); Assert.AreEqual(0, blackboard.Counter2); tickProvider.Tick(); executor.Tick(data, blackboard); Assert.AreEqual(BehaviourTreeStatus.Success, data.Statuses[root.Id]); Assert.AreEqual(1, blackboard.Counter1); Assert.AreEqual(0, blackboard.Counter2); Assert.AreEqual(0, data.Stack.Count); }
public void ActionTest() { var root = new BehaviourTreeBuilder <TestBlackboard>() .Do("Increment counter 1", TestActions.IncrementCounter1) .Build(); var metadata = new BehaviourTreeMetadata <TestBlackboard>(root); var data = metadata.CreateExecutionData(); var executor = new BehaviourTreeExecutor <TestBlackboard>(root); var blackboard = new TestBlackboard(); executor.Start(data); executor.Tick(data, blackboard); var status = data.Statuses[root.Id]; Assert.AreEqual(BehaviourTreeStatus.Success, status); Assert.AreEqual(1, blackboard.Counter1); Assert.AreEqual(0, data.Stack.Count); }
public void SelectorSuccessTest() { var root = new SimpleBehaviourTreeBuilder <TestBlackboard>() .Selector("Sequence") .Do("Increment counter 1", TestActions.IncrementCounter1) .Do("Increment counter 2", TestActions.IncrementCounter2) .End() .Build(); var metadata = new BehaviourTreeMetadata <TestBlackboard>(root); var data = metadata.CreateExecutionData(); var executor = new BehaviourTreeExecutor <TestBlackboard>(root); var blackboard = new TestBlackboard(); executor.Start(data); executor.Tick(data, blackboard); Assert.AreEqual(BehaviourTreeStatus.Success, data.Statuses[root.Id]); Assert.AreEqual(1, blackboard.Counter1); Assert.AreEqual(0, blackboard.Counter2); Assert.AreEqual(0, data.Stack.Count); }
public void IfNodeFalseTest() { var root = new SimpleBehaviourTreeBuilder <TestBlackboard>() .If("If false", TestActions.False) .Do("Increment counter 1", TestActions.IncrementCounter1) .End() .Build(); var metadata = new BehaviourTreeMetadata <TestBlackboard>(root); var data = metadata.CreateExecutionData(); var executor = new BehaviourTreeExecutor <TestBlackboard>(root); var blackboard = new TestBlackboard(); executor.Start(data); executor.Tick(data, blackboard); var status = data.Statuses[root.Id]; Assert.AreEqual(BehaviourTreeStatus.Failure, status); Assert.AreEqual(0, blackboard.Counter1); Assert.AreEqual(0, data.Stack.Count); }
public void WaitNodeTest() { var tickProvider = new TestTickSupplier(); var root = new BehaviourTreeBuilder <TestBlackboard>() .Wait("Increment counter 1", 3, tickProvider) .Build(); var metadata = new BehaviourTreeMetadata <TestBlackboard>(root); var data = metadata.CreateExecutionData(); var executor = new BehaviourTreeExecutor <TestBlackboard>(root); var blackboard = new TestBlackboard(); executor.Start(data); for (var i = 0; i < 3; i++) { executor.Tick(data, blackboard); Assert.AreEqual(BehaviourTreeStatus.Running, data.Statuses[root.Id]); tickProvider.Tick(); } executor.Tick(data, blackboard); Assert.AreEqual(BehaviourTreeStatus.Success, data.Statuses[root.Id]); Assert.AreEqual(0, data.Stack.Count); }
public BehaviourTree(BehaviourTreeNode <Entity <TScope> > root) { _root = root; _metadata = new BehaviourTreeMetadata <Entity <TScope> >(root); _executor = new BehaviourTreeExecutor <Entity <TScope> >(root); }
public override void DeclareNode(BehaviourTreeMetadata <TBlackboard> metadata) { base.DeclareNode(metadata); _startTickId = metadata.DeclareVariable(this, "startTick"); }
public override void DeclareNode(BehaviourTreeMetadata <TBlackboard> metadata) { base.DeclareNode(metadata); Node.DeclareNode(metadata); }
public override void DeclareNode(BehaviourTreeMetadata <TBlackboard> metadata) { _currentChildId = metadata.DeclareVariable(this, "currentChild"); base.DeclareNode(metadata); }
public override void DeclareNode(BehaviourTreeMetadata <TBlackboard> metadata) { _succeededCountId = metadata.DeclareVariable(this, "succeededCountId"); _failedCountId = metadata.DeclareVariable(this, "failedCountId"); base.DeclareNode(metadata); }