Exemple #1
0
        public void InvertRunningTest()
        {
            var tickProvider = new TestTickSupplier();
            var root         = new SimpleBehaviourTreeBuilder <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);
        }
Exemple #2
0
        public void InterruptionTest()
        {
            var tickProvider = new TestTickSupplier();
            var root         = new SimpleBehaviourTreeBuilder <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);
        }
Exemple #3
0
        public void RepeatUntilStatusReachedNodeTest()
        {
            var root = new SimpleBehaviourTreeBuilder <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);
        }
Exemple #4
0
        public void SelectorRunningTest()
        {
            var tickProvider = new TestTickSupplier();
            var root         = new SimpleBehaviourTreeBuilder <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);
        }
Exemple #5
0
        public void ActionTest()
        {
            var root = new SimpleBehaviourTreeBuilder <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);
        }
Exemple #6
0
        public void SequenceFailureTest()
        {
            var root = new SimpleBehaviourTreeBuilder <TestBlackboard>()
                       .Sequence("Sequence")
                       .AlwaysFail("Fail")
                       .Do("Increment counter 1", TestActions.IncrementCounter1)
                       .End()
                       .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.Failure, data.Statuses[root.Id]);
            Assert.AreEqual(1, blackboard.Counter1);
            Assert.AreEqual(0, blackboard.Counter2);
            Assert.AreEqual(0, data.Stack.Count);
        }
Exemple #7
0
        public void WaitNodeTest()
        {
            var tickProvider = new TestTickSupplier();
            var root         = new SimpleBehaviourTreeBuilder <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 static SimpleBehaviourTreeBuilder <TBlackboard> Wait <TBlackboard>(this SimpleBehaviourTreeBuilder <TBlackboard> self, string name, IValueSupplier <TBlackboard, int> framesToWaitSupplier)
 {
     return(self.Wait(name, framesToWaitSupplier, new TickSupplier(World.Instance.Contexts)));
 }