Ejemplo n.º 1
0
        public void SimpleTreeTest()
        {
            int treeResult0 = 0;
            int treeResult1 = 0;

            TestBlackboard testBlackboard = new TestBlackboard()
            {
                FirstNode = true
            };

            AmeisenBotBehaviorTree <TestBlackboard> tree = new AmeisenBotBehaviorTree <TestBlackboard>
                                                           (
                new Selector <TestBlackboard>
                (
                    (blackboard) => blackboard.FirstNode,
                    new Leaf <TestBlackboard>
                    (
                        (blackboard) =>
            {
                ++treeResult0;
                return(BehaviorTreeStatus.Success);
            }
                    ),
                    new Leaf <TestBlackboard>
                    (
                        (blackboard) =>
            {
                ++treeResult1;
                return(BehaviorTreeStatus.Success);
            }
                    )
                ),
                testBlackboard
                                                           );

            tree.Tick();

            Assert.AreEqual(1, treeResult0);
            Assert.AreEqual(0, treeResult1);

            testBlackboard.FirstNode = false;

            tree.Tick();
            tree.Tick();

            Assert.AreEqual(1, treeResult0);
            Assert.AreEqual(2, treeResult1);
        }
Ejemplo n.º 2
0
        public void InverterTreeTest()
        {
            int treeResult0 = 0;
            int treeResult1 = 0;

            TestBlackboard testBlackboard = new TestBlackboard()
            {
                FirstNode = true
            };

            AmeisenBotBehaviorTree <TestBlackboard> tree = new AmeisenBotBehaviorTree <TestBlackboard>
                                                           (
                new Sequence <TestBlackboard>
                (
                    new Inverter <TestBlackboard>
                    (
                        new Leaf <TestBlackboard>
                        (
                            (blackboard) =>
            {
                ++treeResult0;
                return(BehaviorTreeStatus.Success);
            }
                        )
                    ),
                    new Leaf <TestBlackboard>
                    (
                        (blackboard) =>
            {
                ++treeResult1;
                return(BehaviorTreeStatus.Success);
            }
                    )
                ),
                testBlackboard
                                                           );

            tree.Tick();

            Assert.AreEqual(1, treeResult0);
            Assert.AreEqual(0, treeResult1);

            tree.Tick();
            tree.Tick();

            Assert.AreEqual(3, treeResult0);
            Assert.AreEqual(0, treeResult1);
        }
Ejemplo n.º 3
0
        public void WaterfallTreeTest()
        {
            int treeResult0 = 0;
            int treeResult1 = 0;
            int treeResult2 = 0;

            TestBlackboard testBlackboard = new TestBlackboard()
            {
            };

            AmeisenBotBehaviorTree <TestBlackboard> tree = new AmeisenBotBehaviorTree <TestBlackboard>
                                                           (
                new Waterfall <TestBlackboard>
                (
                    new Leaf <TestBlackboard>((b) => { ++treeResult2; return(BehaviorTreeStatus.Success); }),
                    (
                        (blackboard) => treeResult0 == 0,
                        new Leaf <TestBlackboard>
                        (
                            (blackboard) =>
            {
                ++treeResult0;
                return(BehaviorTreeStatus.Success);
            }
                        )
                    ),
                    (
                        (blackboard) => treeResult0 == 1,
                        new Leaf <TestBlackboard>
                        (
                            (blackboard) =>
            {
                ++treeResult0;
                return(BehaviorTreeStatus.Success);
            }
                        )
                    ),
                    (
                        (blackboard) => treeResult0 == 2,
                        new Leaf <TestBlackboard>
                        (
                            (blackboard) =>
            {
                ++treeResult1;
                return(BehaviorTreeStatus.Success);
            }
                        )
                    )
                ),
                testBlackboard
                                                           );

            tree.Tick();

            Assert.AreEqual(1, treeResult0);
            Assert.AreEqual(0, treeResult1);
            Assert.AreEqual(0, treeResult2);

            tree.Tick();
            tree.Tick();

            Assert.AreEqual(2, treeResult0);
            Assert.AreEqual(1, treeResult1);
            Assert.AreEqual(0, treeResult2);

            ++treeResult0;

            tree.Tick();
            tree.Tick();

            Assert.AreEqual(3, treeResult0);
            Assert.AreEqual(1, treeResult1);
            Assert.AreEqual(2, treeResult2);
        }
Ejemplo n.º 4
0
        public void SequenceTreeTest()
        {
            int treeResult0 = 0;
            int treeResult1 = 0;
            int treeResult2 = 0;

            TestBlackboard testBlackboard = new TestBlackboard();

            AmeisenBotBehaviorTree <TestBlackboard> tree = new AmeisenBotBehaviorTree <TestBlackboard>
                                                           (
                new Sequence <TestBlackboard>
                (
                    new Leaf <TestBlackboard>
                    (
                        (blackboard) =>
            {
                ++treeResult1;
                return(BehaviorTreeStatus.Success);
            }
                    ),
                    new Leaf <TestBlackboard>
                    (
                        (blackboard) =>
            {
                ++treeResult0;
                return(BehaviorTreeStatus.Success);
            }
                    ),
                    new Leaf <TestBlackboard>
                    (
                        (blackboard) =>
            {
                ++treeResult2;
                return(BehaviorTreeStatus.Failed);
            }
                    ),
                    new Leaf <TestBlackboard>
                    (
                        (blackboard) =>
            {
                ++treeResult0;
                return(BehaviorTreeStatus.Success);
            }
                    )
                ),
                testBlackboard
                                                           );

            tree.Tick();

            Assert.AreEqual(0, treeResult0);
            Assert.AreEqual(1, treeResult1);
            Assert.AreEqual(0, treeResult2);

            tree.Tick();

            Assert.AreEqual(1, treeResult0);
            Assert.AreEqual(1, treeResult1);
            Assert.AreEqual(0, treeResult2);

            tree.Tick();

            Assert.AreEqual(1, treeResult0);
            Assert.AreEqual(1, treeResult1);
            Assert.AreEqual(1, treeResult2);

            tree.Tick();

            Assert.AreEqual(1, treeResult0);
            Assert.AreEqual(2, treeResult1);
            Assert.AreEqual(1, treeResult2);
        }
Ejemplo n.º 5
0
        public void OngoingTreeTestResume()
        {
            int treeResult0 = 0;
            int treeResult1 = 0;
            int treeResult2 = 0;

            TestBlackboard testBlackboard = new TestBlackboard();

            AmeisenBotBehaviorTree <TestBlackboard> tree = new AmeisenBotBehaviorTree <TestBlackboard>
                                                           (
                new Sequence <TestBlackboard>
                (
                    new Leaf <TestBlackboard>
                    (
                        (blackboard) =>
            {
                ++treeResult1;
                return(BehaviorTreeStatus.Success);
            }
                    ),
                    new Leaf <TestBlackboard>
                    (
                        (blackboard) =>
            {
                ++treeResult0;
                return(BehaviorTreeStatus.Success);
            }
                    ),
                    new Leaf <TestBlackboard>
                    (
                        (blackboard) =>
            {
                ++treeResult2;
                return(treeResult2 < 5 ? BehaviorTreeStatus.Ongoing : BehaviorTreeStatus.Success);
            }
                    ),
                    new Leaf <TestBlackboard>
                    (
                        (blackboard) =>
            {
                ++treeResult0;
                return(BehaviorTreeStatus.Success);
            }
                    )
                ),
                testBlackboard,
                true
                                                           );

            Assert.AreEqual(true, tree.ResumeOngoingNodes);
            Assert.AreEqual(null, tree.OngoingNode);

            tree.Tick();

            Assert.AreEqual(0, treeResult0);
            Assert.AreEqual(1, treeResult1);
            Assert.AreEqual(0, treeResult2);

            Assert.AreNotEqual(null, tree.OngoingNode);

            tree.Tick();

            Assert.AreEqual(1, treeResult0);
            Assert.AreEqual(1, treeResult1);
            Assert.AreEqual(0, treeResult2);

            Assert.AreNotEqual(null, tree.OngoingNode);

            tree.Tick();

            Assert.AreEqual(1, treeResult0);
            Assert.AreEqual(1, treeResult1);
            Assert.AreEqual(1, treeResult2);

            Assert.AreNotEqual(null, tree.OngoingNode);

            tree.Tick();

            Assert.AreEqual(1, treeResult0);
            Assert.AreEqual(1, treeResult1);
            Assert.AreEqual(2, treeResult2);

            Assert.AreNotEqual(null, tree.OngoingNode);

            tree.Tick();

            Assert.AreEqual(1, treeResult0);
            Assert.AreEqual(1, treeResult1);
            Assert.AreEqual(3, treeResult2);

            Assert.AreNotEqual(null, tree.OngoingNode);

            tree.Tick();

            Assert.AreEqual(1, treeResult0);
            Assert.AreEqual(1, treeResult1);
            Assert.AreEqual(4, treeResult2);

            Assert.AreNotEqual(null, tree.OngoingNode);

            tree.Tick();

            Assert.AreEqual(1, treeResult0);
            Assert.AreEqual(1, treeResult1);
            Assert.AreEqual(5, treeResult2);

            Assert.AreNotEqual(null, tree.OngoingNode);

            tree.Tick();

            Assert.AreEqual(2, treeResult0);
            Assert.AreEqual(1, treeResult1);
            Assert.AreEqual(5, treeResult2);

            Assert.AreEqual(null, tree.OngoingNode);
        }
Ejemplo n.º 6
0
        public void DualSelectorTreeTest()
        {
            int treeResult00 = 0;
            int treeResult10 = 0;
            int treeResult01 = 0;
            int treeResult11 = 0;

            TestBlackboard testBlackboard = new TestBlackboard();

            AmeisenBotBehaviorTree <TestBlackboard> tree = new AmeisenBotBehaviorTree <TestBlackboard>
                                                           (
                new DualSelector <TestBlackboard>
                (
                    (blackboard) => blackboard.FirstNode,
                    (blackboard) => blackboard.SecondFirstNode,
                    new Leaf <TestBlackboard>
                    (
                        (blackboard) =>
            {
                ++treeResult00;
                return(BehaviorTreeStatus.Success);
            }
                    ),
                    new Leaf <TestBlackboard>
                    (
                        (blackboard) =>
            {
                ++treeResult10;
                return(BehaviorTreeStatus.Success);
            }
                    ),
                    new Leaf <TestBlackboard>
                    (
                        (blackboard) =>
            {
                ++treeResult01;
                return(BehaviorTreeStatus.Success);
            }
                    ),
                    new Leaf <TestBlackboard>
                    (
                        (blackboard) =>
            {
                ++treeResult11;
                return(BehaviorTreeStatus.Success);
            }
                    )
                ),
                testBlackboard
                                                           );

            testBlackboard.FirstNode       = false;
            testBlackboard.SecondFirstNode = false;

            tree.Tick();

            Assert.AreEqual(1, treeResult00);
            Assert.AreEqual(0, treeResult10);
            Assert.AreEqual(0, treeResult01);
            Assert.AreEqual(0, treeResult11);

            testBlackboard.FirstNode = true;

            tree.Tick();

            Assert.AreEqual(1, treeResult00);
            Assert.AreEqual(1, treeResult10);
            Assert.AreEqual(0, treeResult01);
            Assert.AreEqual(0, treeResult11);

            testBlackboard.FirstNode       = false;
            testBlackboard.SecondFirstNode = true;

            tree.Tick();

            Assert.AreEqual(1, treeResult00);
            Assert.AreEqual(1, treeResult10);
            Assert.AreEqual(1, treeResult01);
            Assert.AreEqual(0, treeResult11);

            testBlackboard.FirstNode       = true;
            testBlackboard.SecondFirstNode = true;

            tree.Tick();

            Assert.AreEqual(1, treeResult00);
            Assert.AreEqual(1, treeResult10);
            Assert.AreEqual(1, treeResult01);
            Assert.AreEqual(1, treeResult11);
        }