Exemplo n.º 1
0
        public void can_create_selector()
        {
            Init();

            var invokeCount = 0;

            var parallel = testObject
                           .Selector("some-selector")
                           .Do("some-action-1", t =>
            {
                ++invokeCount;
                return(Status.Failure);
            })
                           .Do("some-action-2", t =>
            {
                ++invokeCount;
                return(Status.Success);
            })
                           .End()
                           .Build();

            Assert.IsType <SelectorNode <TimeData> >(parallel);
            Assert.Equal(Status.Success, parallel.Tick(new TimeData(0)));
            Assert.Equal(2, invokeCount);
        }
Exemplo n.º 2
0
    void Start()
    {
        Debug.Log("ZombieBT start");

        var builder = new BehaviourTreeBuilder();

//        var targetPosition = GameObject.Find("Player").transform.position;
        targetPosition = GameObject.Find("Player").transform.position;

        this.tree = builder
                    .Selector("ChooseAction")
                    .Sequence("tryToGoToPlayer")
                    // If player is alive and close then go to it
                    .Condition("isPlayerClose", t => (BlackboardZombie.Instance.getIsPlayerAlive() == true && Vector3.Distance(transform.position, targetPosition) < 8 &&
                                                      Vector3.Distance(transform.position, targetPosition) > 2))
                    .Do("GoToPlayer", t =>
        {
            GetComponent <Animator>().SetBool("bool_walk", true);
            GetComponent <Animator>().SetBool("bool_attack", false);
            Debug.Log("~~~ GoToPlayer");
            BehaviourTreeStatus bts;
            bts = GoToTarget("target1", targetPosition);
            BlackboardZombie.Instance.setTarget1(bts == BehaviourTreeStatus.Success);
            return(bts);
        })
                    .End()
                    .Sequence("tryToAttackPlayer")
                    // If player is alive and in range then attack him
                    .Condition("isPlayerInRange", t => (BlackboardZombie.Instance.getIsPlayerAlive() == true && Vector3.Distance(transform.position, targetPosition) <= 2))
                    .Do("AttackPlayer", t =>
        {
            GetComponent <Animator>().SetBool("bool_walk", false);
            GetComponent <Animator>().SetBool("bool_attack", true);
            Debug.Log("~~~ AttackPlayer");
            return(AttackPlayer());
        })
                    .End()
                    .Do("Wander", t =>
        {
            GetComponent <Animator>().SetBool("bool_walk", true);
            GetComponent <Animator>().SetBool("bool_attack", false);
            GetComponent <SteerForWander>().enabled = true;
            Debug.Log("~~~ Wander");
            return(Wander());
        })
                    .End()
                    .Build();
    }
Exemplo n.º 3
0
        public CrocoBehaviour(CrocoLoco _crocoLoco)
        {
            crocoLoco = _crocoLoco;
            var builder = new BehaviourTreeBuilder();

            tree = builder
                   .Selector("Watch players")
                   .Condition("Is any player visible", IsAnyPlayerVisible)

                   .End()
                   .Build();
            timeData = new TimeData();

            properties             = new CrocoProperties();
            properties.watchLength = 300;
        }
Exemplo n.º 4
0
    protected override void Start()
    {
        BehaviourTreeBuilder treeBuilder = new BehaviourTreeBuilder();

        this.rootNode = treeBuilder.Selector("SomeSelector", true)
                        .Do("some-action-1", t => {
            return(BehaviourTreeStatus.Success);
        })
                        .Do("some-action-2", t => {
            return(BehaviourTreeStatus.Success);
        })
                        .End()
                        .Build();

        this.rootNode = this.BuildSimpleAI();
        base.Start();
    }
Exemplo n.º 5
0
        public void disabled_parent_nodes_is_ignored()
        {
            TimeData data        = new TimeData(0);
            var      invokeCount = 0;

            var builder = new BehaviourTreeBuilder <TimeData>(new List <int>
            {
                0,
                2,
                4
            });

            builder
            .Sequence("seq1")
            .Do("do1", t =>
            {
                ++invokeCount;
                throw new Exception("do1 invoked.");
            })
            .End()
            .Build()
            .Tick(data);

            builder
            .Selector("sel1")
            .Do("do2", t =>
            {
                ++invokeCount;
                throw new Exception("do2 invoked.");
            })
            .End()
            .Build()
            .Tick(data);

            builder
            .Parallel("para1", 0, 0)
            .Do("do3", t =>
            {
                ++invokeCount;
                throw new Exception("do3 invoked.");
            })
            .End()
            .Build()
            .Tick(data);
        }
Exemplo n.º 6
0
    void Awake()
    {
        BehaviourTreeBuilder treeBuilder = new BehaviourTreeBuilder();

        this.rootNode = treeBuilder.Selector("SomeSelector", true)
                        .Do("some-action-1", t => {
            if (this.IsTrue)
            {
                ++invokeCount;
            }
            return(this.IsTrue ? BehaviourTreeStatus.Success : BehaviourTreeStatus.Failure);
        })
                        .Do("some-action-2", t => {
            if (!this.IsTrue)
            {
                --invokeCount;
            }
            return(this.IsTrue ? BehaviourTreeStatus.Failure : BehaviourTreeStatus.Success);
        })
                        .End()
                        .Build();
    }
Exemplo n.º 7
0
    private void Awake()
    {
        base.Awake();
        PathWalker = gameObject.GetComponent <PathWalker>();

        var _builder = new BehaviourTreeBuilder();

        _builder = _builder.Selector(); // MainNode

        _builder = _builder.StateFulSequence("Patrol")
                   .Inverter("!").Condition("HayEnemigo", () => enemyTransform != null).End()
                   .Condition("EndPath", () => PathWalker.Ended)
                   .Do("FindPath", () => { _ = PathWalker.WalkTo(PathFinderManager.Instance.RandomWalkablePosition); PathWalker.WALK_SPEED = 5; return(BehaviorReturnCode.Success); })
                   .End();

        _builder = _builder.StateFulSequence("FindEnemy")
                   .Inverter("!").Condition("HayEnemigo", () => enemyTransform != null).End()
                   .Inverter("!").Do("BuscarEnemigo", FindEnemy).End()
                   .End();

        _builder = _builder.StateFulSequence("Follow")
                   .Condition("HayEnemigo", () => enemyTransform != null)
                   .Inverter("!").Condition("EstaCerca", () => (enemyTransform.position - transform.position).magnitude < attack_range).End()
                   .Condition("EndPath", () => PathWalker.Ended)
                   .Do("FindPath", () => { _ = PathWalker.WalkTo(enemyTransform.position + ((transform.position - enemyTransform.position).normalized * 1.5f)); return(BehaviorReturnCode.Success); })
                   .End();

        _builder = _builder.StateFulSequence("Attack")
                   .Condition("HayEnemigo", () => enemyTransform != null)
                   .Condition("EstaCerca", () => (enemyTransform.position - transform.position).magnitude < attack_range)
                   .Do("AttackEnemy", AttackEnemy)
                   .End();

        _builder = _builder.End(); // End MainNode

        _root = _builder.Build();
    }