Beispiel #1
0
        public static void Test_Run_PrioritySequence_With_FailureNodes_Returns_Failure(int numerOfNodes)
        {
            //arrange
            List <TestFailedNode> nodes = new List <TestFailedNode>(numerOfNodes);

            for (int i = 0; i < numerOfNodes; i++)
            {
                nodes.Add(new TestFailedNode());
            }

            PrioritySequenceTreeNode <int> PrioritySequence = new PrioritySequenceTreeNode <int>(nodes);

            //act
            GladBehaviorTreeNodeState state = PrioritySequence.Evaluate(5);

            //assert
            Assert.False(PrioritySequence.isRunningNode);
            Assert.Null(PrioritySequence.RunningNode);
            Assert.AreEqual(GladBehaviorTreeNodeState.Failure, state);

            Assert.AreEqual(1, nodes.First().CalledTime);
            foreach (TestFailedNode node in nodes.Skip(1))
            {
                Assert.AreEqual(0, node.CalledTime, $"Expected the success node to be called {1} time but was called: {node.CalledTime}s.");
            }
        }
Beispiel #2
0
        public static void Test_Run_Selector_With_FailureNodes_Returns_Failure(int numerOfNodes)
        {
            //arrange
            List <TestFailedNode> nodes = new List <TestFailedNode>(numerOfNodes);

            for (int i = 0; i < numerOfNodes; i++)
            {
                nodes.Add(new TestFailedNode());
            }

            SelectorTreeNode <int> Selector = new SelectorTreeNode <int>(nodes);

            //act
            GladBehaviorTreeNodeState state = Selector.Evaluate(5);

            //assert
            Assert.False(Selector.isRunningNode);
            Assert.Null(Selector.RunningNode);
            Assert.AreEqual(GladBehaviorTreeNodeState.Failure, state);

            foreach (TestFailedNode node in nodes)
            {
                Assert.AreEqual(1, node.CalledTime, $"Expected the failure node to be called {1} time each but was called: {node.CalledTime}s.");
            }
        }
Beispiel #3
0
        public static void Test_Run_PrioritySequence_With_FailureNode_Doesnt_Continue_Evaluation_When_Reached()
        {
            //arrange
            List <TreeNode <int> > nodes = new List <TreeNode <int> >(5);

            for (int i = 0; i < 5; i++)
            {
                nodes.Add(new TestSuccessNode());
            }

            nodes.Insert(nodes.Count / 2 + 1, new TestFailedNode());

            PrioritySequenceTreeNode <int> PrioritySequence = new PrioritySequenceTreeNode <int>(nodes);

            //act
            GladBehaviorTreeNodeState state = PrioritySequence.Evaluate(5);

            //assert
            Assert.False(PrioritySequence.isRunningNode);
            Assert.Null(PrioritySequence.RunningNode);
            Assert.AreEqual(GladBehaviorTreeNodeState.Failure, state);

            Assert.AreEqual(1, ((dynamic)nodes.First()).CalledTime);
            Assert.AreEqual(0, ((dynamic)nodes.Last()).CalledTime, $"Expected the success node to be called {1} time but was called: {((dynamic)nodes.Last()).CalledTime}s.");
        }
        public static void Test_Run_Sequence_With_SuccessNodes_Returns_Success(int numerOfSuccessNodes)
        {
            //arrange
            List <TestSuccessNode> nodes = new List <TestSuccessNode>(numerOfSuccessNodes);

            for (int i = 0; i < numerOfSuccessNodes; i++)
            {
                nodes.Add(new TestSuccessNode());
            }

            SequenceTreeNode <int> sequence = new SequenceTreeNode <int>(nodes);

            //act
            GladBehaviorTreeNodeState state = sequence.Evaluate(5);

            //assert
            Assert.False(sequence.isRunningNode);
            Assert.Null(sequence.RunningNode);
            Assert.AreEqual(GladBehaviorTreeNodeState.Success, state);

            foreach (TestSuccessNode node in nodes)
            {
                Assert.AreEqual(1, node.CalledTime, $"Expected the success node to be called {1} time but was called: {node.CalledTime}s.");
            }
        }
        public SingleContinueStateCompositeContinuationStrategy(GladBehaviorTreeNodeState continueState)
        {
            if (!Enum.IsDefined(typeof(GladBehaviorTreeNodeState), continueState))
            {
                throw new ArgumentOutOfRangeException(nameof(continueState), "Value should be defined in the GladBehaviorTreeNodeState enum.");
            }

            ContinueState = continueState;
        }
Beispiel #6
0
        public void Test_True_LambdaCondition_Returns_Failure()
        {
            //arrange
            LambdaConditionTreeNode <int> node = new LambdaConditionTreeNode <int>(c => false);

            //act
            GladBehaviorTreeNodeState state = node.Evaluate(5);

            //assert
            Assert.AreEqual(GladBehaviorTreeNodeState.Failure, state);
        }
Beispiel #7
0
        public void Test_True_Condition_Returns_Failure()
        {
            //arrange
            TestFalseConditionNode node = new TestFalseConditionNode();

            //act
            GladBehaviorTreeNodeState state = node.Evaluate(5);

            //assert
            Assert.AreEqual(GladBehaviorTreeNodeState.Failure, state);
        }
Beispiel #8
0
        public void Test_True_Condition_Returns_Success()
        {
            //arrange
            TestTrueConditionNode node = new TestTrueConditionNode();

            //act
            GladBehaviorTreeNodeState state = node.Evaluate(5);

            //assert
            Assert.AreEqual(GladBehaviorTreeNodeState.Success, state);
        }
        private void OnFinishedState(GladBehaviorTreeNodeState state)
        {
            //If we weren't running then we should reset the iterator
            switch (state)
            {
            case GladBehaviorTreeNodeState.Success:
            case GladBehaviorTreeNodeState.Failure:
                OnReset?.Invoke();
                break;

            case GladBehaviorTreeNodeState.Running:
                break;
            }

            isRunningNode = state == GladBehaviorTreeNodeState.Running;
        }
        /// <inheritdoc />
        protected override GladBehaviorTreeNodeState OnEvaluate(TContextType context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            GladBehaviorTreeNodeState state = DecoratedNode.Evaluate(context);

            if (state == GladBehaviorTreeNodeState.Failure)
            {
                return(GladBehaviorTreeNodeState.Success);
            }
            else if (state == GladBehaviorTreeNodeState.Success)
            {
                return(GladBehaviorTreeNodeState.Failure);
            }

            return(state);
        }
Beispiel #11
0
        public static void Test_Run_PrioritySelector_With_SuccessNodes_Returns_Success(int numerOfSuccessNodes)
        {
            //arrange
            List <TestSuccessNode> nodes = new List <TestSuccessNode>(numerOfSuccessNodes);

            for (int i = 0; i < numerOfSuccessNodes; i++)
            {
                nodes.Add(new TestSuccessNode());
            }

            PrioritySelectorTreeNode <int> PrioritySelector = new PrioritySelectorTreeNode <int>(nodes);

            //act
            GladBehaviorTreeNodeState state = PrioritySelector.Evaluate(5);

            //assert
            Assert.False(PrioritySelector.isRunningNode);
            Assert.Null(PrioritySelector.RunningNode);
            Assert.AreEqual(GladBehaviorTreeNodeState.Success, state);

            Assert.AreEqual(1, nodes.First().CalledTime, $"Expected the success node to be called {1} time but was called: {nodes.First().CalledTime}s.");
        }
 /// <inheritdoc />
 public bool ShouldContinue(GladBehaviorTreeNodeState state)
 {
     return(ContinueState == state);
 }