Esempio n. 1
0
    //the stucture of the Behaviour Tree
    private void BehaviourTree()
    {
        //create behvaiour tree
        stdTank = new BehaviourTree.Tree();

        //creates and add the root node to the Tree
        Root root = stdTank.AddRoot();

        //make root section
        stdTank.MakeSectionFor(root);
        seqEngageInCombat = stdTank.MakeSequence();
        seqGetAmmo        = stdTank.MakeSequence();
        stdTank.AddToSection(seqEngageInCombat, seqGetAmmo);
        stdTank.EndSection();

        //engege in combat Sequence
        stdTank.MakeSectionFor(seqEngageInCombat);
        seqToRange = stdTank.MakeSequence();
        seqFire    = stdTank.MakeSequence();
        stdTank.AddToSection(seqToRange, seqFire);
        stdTank.EndSection();

        //move into range for comabat Sequence
        stdTank.MakeSectionFor(seqToRange);
        actFindEnemy = stdTank.MakeAction();
        actToRange   = stdTank.MakeAction();
        stdTank.AddToSection(actFindEnemy, actToRange);
        stdTank.EndSection();

        //fire the turret Sequence
        stdTank.MakeSectionFor(seqFire);
        actAim       = stdTank.MakeAction();
        actIsVisible = stdTank.MakeAction();
        actFire      = stdTank.MakeAction();
        stdTank.AddToSection(actAim, actIsVisible, actFire);
        stdTank.EndSection();

        //get ammo Sequence
        stdTank.MakeSectionFor(seqGetAmmo);
        sucGetAmmo    = stdTank.MakeSucceeder();
        actMoveToAmmo = stdTank.MakeAction();
        stdTank.AddToSection(actMoveToAmmo, sucGetAmmo);
        stdTank.EndSection();

        //get Ammo Succeeder
        stdTank.MakeSectionFor(sucGetAmmo);
        repGetAmmo = stdTank.MakeRepeater();
        stdTank.AddToSection(repGetAmmo);
        stdTank.EndSection();

        //get ammmo Repeater
        stdTank.MakeSectionFor(repGetAmmo);
        actGetAmmo = stdTank.MakeAction();
        stdTank.AddToSection(actGetAmmo);
        stdTank.EndSection();

        SetConditions();
        SetActions();
        BT_Debug();
    }
Esempio n. 2
0
        public void Node_Throws_Exception()
        {
            Mock <INode> node = TestHelper.Mock <INode>(new Exception());
            Succeeder    cud  = new Succeeder(node.Object);

            TestHelper.AssertResult(cud, NodeStatus.Success);
        }
Esempio n. 3
0
        public void WhenChildReturnRunning_ReturnRunning()
        {
            var sut = new Succeeder <MockContext>(new MockBehaviour {
                ReturnStatus = BehaviourStatus.Running
            });

            var behaviourStatus = sut.Tick(new MockContext());

            Assert.That(behaviourStatus, Is.EqualTo(BehaviourStatus.Running));
        }
Esempio n. 4
0
        public void WhenChildReturnFailure_ReturnSuccess()
        {
            var sut = new Succeeder <MockContext>(new MockBehaviour {
                ReturnStatus = BehaviourStatus.Failed
            });

            var behaviourStatus = sut.Tick(new MockContext());

            Assert.That(behaviourStatus, Is.EqualTo(BehaviourStatus.Succeeded));
        }
Esempio n. 5
0
        public void Succeeder_SucessWhenChildFailure()
        {
            INode node = Substitute.For <INode>();

            node.Tick().Returns(NodeStatus.Failure);

            Succeeder succeeder = new Succeeder(node);

            Assert.AreEqual(NodeStatus.Sucess, succeeder.Tick());
        }
Esempio n. 6
0
        public void Succeeder()
        {
            var state = new State();
            var test  = 0;

            var routine = new Succeeder(new Conditional((_) => test < 50));

            for (; test < 50; ++test)
            {
                Assert.Equal(RoutineStatus.Success, routine.Act(state));
                state.Reset();
            }

            test++;
            Assert.Equal(RoutineStatus.Success, routine.Act(state));
            state.Reset();

            Assert.Equal(RoutineStatus.Success, routine.Act(state));
            state.Reset();

            test = 1;
            Assert.Equal(RoutineStatus.Success, routine.Act(state));
            state.Reset();
        }
Esempio n. 7
0
        private Node MakeDecoratorNode(DecoratorNodeType decorator, uint childNodeID, uint extra = 0)
        {
            Node newNode, result;

            if (!m_nodeDic.TryGetValue(childNodeID, out result))
            {
                return(null);   // failed to get childNodeID
            }
            switch (decorator)
            {
            case DecoratorNodeType.Inverter:
                newNode = new Inverter(result);
                break;

            case DecoratorNodeType.Repeater:
                newNode = new Repeater(result, extra);
                break;

            case DecoratorNodeType.RepeatTillFail:
                newNode = new RepeatTillFail(result);
                break;

            case DecoratorNodeType.Limiter:
                newNode = new Limiter(result);
                break;

            case DecoratorNodeType.Succeeder:
                newNode = new Succeeder(result);
                break;

            default:
                return(null);    // tried to create unknown decorator node
            }

            return(newNode);
        }
Esempio n. 8
0
 public void DrawInspector(Succeeder node)
 {
     EditorGUILayout.LabelField(new GUIContent("Succeeder"), TitleStyle);
     EditorGUILayout.Space ();
     string message = "Succeeder always returns a SUCCESS, no matter what its child returns.";
     EditorGUILayout.HelpBox(message, MessageType.Info);
     EditorGUILayout.HelpBox("Not yet implemented!", MessageType.Error);
 }
Esempio n. 9
0
        public void Node_Fails()
        {
            Succeeder cud = CreateNode(NodeStatus.Failure);

            TestHelper.AssertResult(cud, NodeStatus.Success);
        }
Esempio n. 10
0
        public void Node_Keeps_Running()
        {
            Succeeder cud = CreateNode(NodeStatus.Running);

            TestHelper.AssertResult(cud, NodeStatus.Success);
        }
 public void Visit(Succeeder <TContext> obj)
 {
     PrintNode(obj);
     VisitChild(obj);
 }