Ejemplo n.º 1
0
        public void TestRunning()
        {
            var root = new BehaviorNode(this);
            var t1   = new BehaviorNode();
            var c1   = new TestConditionBehaviorNode(false);
            var c11  = new TestTimedBehaviorNode();
            var c12  = new BehaviorNode();

            root.AddChild(t1);
            t1.AddChild(c1);
            Assert.AreEqual(c1.owner, t1.owner);

            c1.evaluate = true;

            c1.AddChild(c11);
            c1.AddChild(c12);

            Assert.AreEqual(root, t1.RootNode);
            Assert.AreEqual(root, c1.RootNode);
            Assert.AreEqual(root, c11.RootNode);
            Assert.AreEqual(root, c12.RootNode);

            t1.Run();
            Assert.IsTrue(t1.IsRunning);
            Assert.IsTrue(c1.IsRunning);
            Assert.IsTrue(c11.IsRunning);
            Assert.IsFalse(c12.IsRunning);

            t1.OnUpdate(new TimeSlice(1.0f));

            Assert.IsFalse(t1.IsRunning);
            Assert.IsFalse(c1.IsRunning);
            Assert.IsFalse(c11.IsRunning);
        }
        public void TestSequenceBehavior_NotRepeatingFalseTrueFinish()
        {
            var t1 = new SequenceBehaviorNode(false);
            var c1 = new TestConditionBehaviorNode(false);
            var c2 = new TestConditionBehaviorNode(true);

            t1.AddChild(c1);
            t1.AddChild(c2);

            // Condition nodes must have a child for success
            c1.AddChild(new TestSuccessNode());
            c2.AddChild(new TestSuccessNode());

            // False evaluation node is skipped, true evaluation node is run
            t1.Run();
            Assert.AreEqual(1, c1.runCount);
            Assert.AreEqual(1, c2.runCount);

            Assert.IsFalse(t1.IsRunning);
            Assert.IsFalse(c1.IsRunning);
            Assert.IsFalse(c2.IsRunning);
            Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State);
            Assert.AreEqual(BehaviorNode.StateType.Success, t1.State);
            Assert.AreEqual(BehaviorNode.StateType.Success, c2.State);
        }
        public void TestSequenceBehavior_RepeatingFalseTrueTrue()
        {
            var t1 = new SequenceBehaviorNode(true);
            var c1 = new TestConditionBehaviorNode(false);
            var c2 = new TestConditionBehaviorNode(true);
            var c3 = new TestConditionBehaviorNode(true);

            t1.AddChild(c1);
            t1.AddChild(c2);
            t1.AddChild(c3);

            c1.AddChild(new TestSuccessNode());
            c2.AddChild(new TestSuccessNode());
            c3.AddChild(new TestSuccessNode());

            t1.Run();
            Assert.AreEqual(1, c1.runCount);
            Assert.AreEqual(1, c2.runCount);
            Assert.AreEqual(0, c3.runCount);

            Assert.IsFalse(t1.IsRunning);
            Assert.IsFalse(c1.IsRunning);
            Assert.IsFalse(c2.IsRunning);
            Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State);
            Assert.AreEqual(BehaviorNode.StateType.Success, t1.State);
            Assert.AreEqual(BehaviorNode.StateType.Success, c2.State);

            t1.Run();
            Assert.AreEqual(1, c1.runCount);
            Assert.AreEqual(1, c2.runCount);
            Assert.AreEqual(1, c3.runCount);

            Assert.IsFalse(t1.IsRunning);
            Assert.IsFalse(c1.IsRunning);
            Assert.IsFalse(c2.IsRunning);
            Assert.IsFalse(c3.IsRunning);
            Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State);
            Assert.AreEqual(BehaviorNode.StateType.Success, t1.State);
            Assert.AreEqual(BehaviorNode.StateType.Success, c3.State);

            // Test repeat (should succeed, repeat is turned on)
            t1.Run();
            Assert.AreEqual(2, c1.runCount);
            Assert.AreEqual(2, c2.runCount);
            Assert.AreEqual(1, c3.runCount);

            Assert.IsFalse(t1.IsRunning);
            Assert.IsFalse(c1.IsRunning);
            Assert.IsFalse(c2.IsRunning);
            Assert.IsFalse(c3.IsRunning);
            Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State);
            Assert.AreEqual(BehaviorNode.StateType.Success, t1.State);
            Assert.AreEqual(BehaviorNode.StateType.Success, c2.State);
        }
Ejemplo n.º 4
0
        public void TestConditionBehaviorNode_FailChild()
        {
            var t1 = new BehaviorNode();
            var c1 = new TestConditionBehaviorNode(true);

            t1.AddChild(c1);

            // Condition evaluates to true, with fail child -> Fail
            c1.AddChild(new TestFailNode());
            t1.Run();
            Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State);
        }
Ejemplo n.º 5
0
        public void TestSelectorBehavior()
        {
            var t1 = new SelectorBehaviorNode();
            var c1 = new TestConditionBehaviorNode(false);
            var c2 = new TestConditionBehaviorNode(true);
            var c3 = new TestConditionBehaviorNode(true);

            t1.AddChild(c1);
            t1.AddChild(c2);
            t1.AddChild(c3);

            // Condition nodes must have a child for success
            c1.AddChild(new TestSuccessNode());
            c2.AddChild(new TestSuccessNode());
            c3.AddChild(new TestSuccessNode());

            t1.Run();
            Assert.AreEqual(1, c1.runCount);
            Assert.AreEqual(1, c2.runCount);
            Assert.AreEqual(0, c3.runCount);
            Assert.IsFalse(c1.IsRunning);
            Assert.IsFalse(c2.IsRunning);
            Assert.AreEqual(BehaviorNode.StateType.Success, t1.State);
            Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State);
            Assert.AreEqual(BehaviorNode.StateType.Success, c2.State);

            t1.Run();
            Assert.AreEqual(2, c1.runCount);
            Assert.AreEqual(2, c2.runCount);
            Assert.AreEqual(0, c3.runCount);
            Assert.IsFalse(c1.IsRunning);
            Assert.IsFalse(c2.IsRunning);
            Assert.AreEqual(BehaviorNode.StateType.Success, t1.State);
            Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State);
            Assert.AreEqual(BehaviorNode.StateType.Success, c2.State);

            c2.evaluate = false;

            t1.Run();
            Assert.AreEqual(3, c1.runCount);
            Assert.AreEqual(3, c2.runCount);
            Assert.AreEqual(1, c3.runCount);
            Assert.IsFalse(c1.IsRunning);
            Assert.IsFalse(c2.IsRunning);
            Assert.AreEqual(BehaviorNode.StateType.Success, t1.State);
            Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State);
            Assert.AreEqual(BehaviorNode.StateType.Fail, c2.State);
            Assert.AreEqual(BehaviorNode.StateType.Success, c3.State);
        }
Ejemplo n.º 6
0
        public void TestConditionBehaviorNode_SuccessChild()
        {
            var t1 = new BehaviorNode();
            var c1 = new TestConditionBehaviorNode(false);

            t1.AddChild(c1);
            Assert.AreEqual(c1.owner, t1.owner);

            // Condition evaluates to false -> Fail
            t1.Run();
            Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State);

            // Condition evaluates to true, but no children -> Fail
            c1.evaluate = true;
            t1.Run();
            Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State);

            // Condition evaluates to true, with success child -> Success
            c1.AddChild(new TestSuccessNode());
            t1.Run();
            Assert.AreEqual(BehaviorNode.StateType.Success, c1.State);
        }