Exemple #1
0
        public void testStatefulSel()
        {
            log.enterScope("testStatefulSel");

            bool first = true;

            var foo = new StatefulSelector(new BehaviorAction(delegate(){
                return(BehaviorReturnCode.Failure);
            }), new BehaviorAction(delegate() {
                if (first)
                {
                    first = false;
                    return(BehaviorReturnCode.Running);
                }
                else
                {
                    return(BehaviorReturnCode.Failure);
                }
            }), new BehaviorAction(delegate(){
                return(BehaviorReturnCode.Success);
            }));

            new VerificationPoint().VerifyEquals("1st running", true, foo.Behave(), BehaviorReturnCode.Running);
            new VerificationPoint().VerifyEquals("2nd success", true, foo.Behave(), BehaviorReturnCode.Success);
            new VerificationPoint().VerifyEquals("3rd success", true, foo.Behave(), BehaviorReturnCode.Success);

            log.logMessage("restting first");
            first = true;

            new VerificationPoint().VerifyEquals("after reset running", true, foo.Behave(), BehaviorReturnCode.Running);
            new VerificationPoint().VerifyEquals("final success", true, foo.Behave(), BehaviorReturnCode.Success);

            log.exitScope();
        }
Exemple #2
0
        public void When_Failed_then_execute_until_success()
        {
            var returnCode = new StatefulSelector(
                new BehaviourAction(CalledAndFailed),
                new BehaviourAction(CalledAndFailed),
                new BehaviourAction(() => BehaviourReturnCode.Success)
                ).Behave();

            Assert.AreEqual(2, _calledAndFailedTimes);
            Assert.AreEqual(BehaviourReturnCode.Success, returnCode);
        }
Exemple #3
0
    private StatefulSequence CalculatePath(System.Func <BehaviorReturnCode> calcPathStratigie)
    {
        BehaviorAction updateMemory           = new BehaviorAction(aiToTarget.UpdateMemory);
        BehaviorAction calculatePath          = new BehaviorAction(calcPathStratigie);
        BehaviorAction updateMemoryAdditional = new BehaviorAction(aiToTarget.UpdateMemoryWithAdditionalRange);

        StatefulSequence calcNewPath         = new StatefulSequence(updateMemoryAdditional, calculatePath);
        StatefulSelector calculatePathSecure = new StatefulSelector(calculatePath, calcNewPath);

        return(new StatefulSequence(updateMemory, calculatePathSecure));
    }
Exemple #4
0
        public void When_behave_Running_then_completes_until_running_behaviour()
        {
            _calledAndFailedTimes = 0;
            var returnCode = new StatefulSelector(
                new BehaviourAction(CalledAndFailed),
                new BehaviourAction(CalledAndRunning),
                new BehaviourAction(() => BehaviourReturnCode.Success)
                ).Behave();

            Assert.AreEqual(1, _calledAndFailedTimes);
            Assert.AreEqual(BehaviourReturnCode.Running, returnCode);
        }
Exemple #5
0
        public void testStatefulSel()
        {
            _log.enterScope("testStatefulSel");

            bool first  = true;
            bool second = true;
            var  foo    = new StatefulSelector(new BehaviorAction(delegate(){
                return(BehaviorReturnCode.Failure);
            }), new BehaviorAction(delegate() {
                if (first)
                {
                    first = false;
                    return(BehaviorReturnCode.Running);
                }
                else
                {
                    return(BehaviorReturnCode.Failure);
                }
            }), new BehaviorAction(delegate(){
                if (first)
                {
                    return(BehaviorReturnCode.Success);
                }
                else
                {
                    if (second)
                    {
                        second = false;
                        return(BehaviorReturnCode.Success);
                    }
                    else
                    {
                        return(BehaviorReturnCode.Failure);
                    }
                }
            }));

            Verify.VerifyEquals("1st running", true, foo.Behave(), BehaviorReturnCode.Running);
            Verify.VerifyEquals("2nd success", true, foo.Behave(), BehaviorReturnCode.Success);
            Verify.VerifyEquals("3rd failure", true, foo.Behave(), BehaviorReturnCode.Failure);

            _log.logMessage("restting flags");
            first  = true;
            second = true;

            Verify.VerifyEquals("after reset running", true, foo.Behave(), BehaviorReturnCode.Running);
            Verify.VerifyEquals("final success", true, foo.Behave(), BehaviorReturnCode.Success);
            Verify.VerifyEquals("final failure", true, foo.Behave(), BehaviorReturnCode.Failure);

            _log.exitScope();
        }
Exemple #6
0
        public void When_running_Then_complete_with_many_behave_calls()
        {
            var sequence = new StatefulSelector(
                new BehaviourAction(CalledAndFailed),
                new BehaviourAction(new TestHelper().RunningTwiceThenSuccess),
                new BehaviourAction(() => BehaviourReturnCode.Success)
                );

            Assert.AreEqual(BehaviourReturnCode.Running, sequence.Behave());
            Assert.AreEqual(BehaviourReturnCode.Running, sequence.Behave());
            Assert.AreEqual(BehaviourReturnCode.Running, sequence.Behave());
            Assert.AreEqual(BehaviourReturnCode.Success, sequence.Behave());
            Assert.AreEqual(1, _calledAndFailedTimes);
        }
Exemple #7
0
    private Sequence DefensiveAI()
    {
        Conditional targetAlive             = new Conditional(aiWeapon.TargetAlive);
        Conditional aiIsOnTransitionOrDodge = new Conditional(aiToTarget.OnTransitionOrDodge);
        Conditional isBreakValid            = new Conditional(aiToTarget.IsBreakValid);
        Conditional canIShoot = new Conditional(aiWeapon.IsTargetHittable);

        Selector shootSelect = new Selector(new Inverter(targetAlive), canIShoot, aiIsOnTransitionOrDodge);

        StatefulSelector stayOrMove     = new StatefulSelector(isBreakValid, DoTransitionBehavior());
        Sequence         shootAndOrMove = new Sequence(stayOrMove, shootSelect);

        RepeatUntilFail followPathLoop = new RepeatUntilFail(shootAndOrMove);

        return(new Sequence(new Sequence(Dodge(), Shoot()), new StatefulSequence(CalculatePath(aiToTarget.CalculatePathToUpperNode), followPathLoop)));
    }
        public void TestStatefulSel()
        {
            bool first  = true;
            bool second = true;
            var  foo    = new StatefulSelector(new BehaviorAction(delegate(){
                return(BehaviorReturnCode.Failure);
            }), new BehaviorAction(delegate() {
                if (first)
                {
                    first = false;
                    return(BehaviorReturnCode.Running);
                }
                else
                {
                    return(BehaviorReturnCode.Failure);
                }
            }), new BehaviorAction(delegate(){
                if (first)
                {
                    return(BehaviorReturnCode.Success);
                }
                else
                {
                    if (second)
                    {
                        second = false;
                        return(BehaviorReturnCode.Success);
                    }
                    else
                    {
                        return(BehaviorReturnCode.Failure);
                    }
                }
            }));

            Assert.That(foo.Behave() == BehaviorReturnCode.Running);
            Assert.That(foo.Behave() == BehaviorReturnCode.Success);
            Assert.That(foo.Behave() == BehaviorReturnCode.Failure);

            first  = true;
            second = true;

            Assert.That(foo.Behave() == BehaviorReturnCode.Running);
            Assert.That(foo.Behave() == BehaviorReturnCode.Success);
            Assert.That(foo.Behave() == BehaviorReturnCode.Failure);
        }
Exemple #9
0
    private StatefulSequence DoTransitionBehavior()
    {
        BehaviorAction move = new BehaviorAction(aiToTarget.Move);

        Conditional stopped = new Conditional(aiToTarget.StoppedCheck);


        BehaviorAction fail            = new BehaviorAction(ReturnFail);
        BehaviorAction respawn         = new BehaviorAction(aiToTarget.Respawn);
        BehaviorAction die             = new BehaviorAction(Die);
        BehaviorAction nextTransition  = new BehaviorAction(aiToTarget.NextTransition);
        BehaviorAction waitForGrounded = new BehaviorAction(ReturnRunning);

        Sequence         stopOrMove      = new Sequence(new Inverter(stopped), move);
        StatefulSelector fallingBehavior = new StatefulSelector(respawn, die);


        IndexSelector fallingOrStanding = new IndexSelector(FallOrStandSelect, fail, fallingBehavior, waitForGrounded);

        StatefulSelector moveSelect = new StatefulSelector(stopOrMove, fallingOrStanding);

        return(new StatefulSequence(nextTransition, moveSelect));
    }
Exemple #10
0
        public void StatefulSelector()
        {
            var first  = true;
            var second = true;

            var statefulSelector =
                new StatefulSelector(
                    new BehaviorAction(() => BehaviorState.Failure),
                    new BehaviorAction(() =>
            {
                if (first)
                {
                    first = false;
                    return(BehaviorState.Running);
                }

                return(BehaviorState.Failure);
            }),
                    new BehaviorAction(() =>
            {
                if (first)
                {
                    return(BehaviorState.Success);
                }

                if (second)
                {
                    second = false;
                    return(BehaviorState.Success);
                }

                return(BehaviorState.Failure);
            })
                    );

            var statefulSelectorError =
                new StatefulSelector(
                    new BehaviorAction(() => { throw new Exception("Failure"); })
                    );

            // test init
            Assert.IsTrue(first, "init first");
            Assert.IsTrue(second, "init second");
            Assert.AreEqual(statefulSelector.Tick(), BehaviorState.Running, "1st running");
            Assert.IsFalse(first, "1st Tick failed");
            Assert.AreEqual(statefulSelector.Tick(), BehaviorState.Success, "2nd success");
            Assert.IsFalse(second, "2nd Tick failed");
            Assert.AreEqual(statefulSelector.Tick(), BehaviorState.Failure, "3rd failure");

            first  = true;
            second = true;

            // test reset
            Assert.IsTrue(first, "reset first");
            Assert.IsTrue(second, "reset second");
            Assert.AreEqual(statefulSelector.Tick(), BehaviorState.Running, "1st running");
            Assert.IsFalse(first, "1st Tick failed");
            Assert.AreEqual(statefulSelector.Tick(), BehaviorState.Success, "2nd success");
            Assert.IsFalse(second, "2nd Tick failed");
            Assert.AreEqual(statefulSelector.Tick(), BehaviorState.Failure, "3rd failure");

            // test exception
            Assert.AreEqual(statefulSelectorError.Tick(), BehaviorState.Failure, "error failure");
            Assert.AreEqual(statefulSelectorError.LastBehavior, 0);
        }