示例#1
0
    private void ConstructBehahaviourTree()
    {
        IsCoverAvailableNode isCoverAvaliableNode = new IsCoverAvailableNode(avaliableCovers, playerTransform, this);
        GoToCoverNode        goToCoverNode        = new GoToCoverNode(agent, this);
        HealthNode           healthNode           = new HealthNode(this, lowHealthThreshold);
        IsCoveredNode        isCoveredNode        = new IsCoveredNode(playerTransform, transform);
        ChaseNode            chaseNode            = new ChaseNode(playerTransform, agent, this);
        RangeNode            chasingRangeNode     = new RangeNode(chasingRange, playerTransform, transform);
        RangeNode            shootingRangeNode    = new RangeNode(shootingRange, playerTransform, transform);
        ShootNode            shootNode            = new ShootNode(agent, this, playerTransform);

        Sequence chaseSequence = new Sequence(new List <Node> {
            chasingRangeNode, chaseNode
        });
        Sequence shootSequence = new Sequence(new List <Node> {
            shootingRangeNode, shootNode
        });

        Sequence goToCoverSequence = new Sequence(new List <Node> {
            isCoverAvaliableNode, goToCoverNode
        });
        Selector findCoverSelector = new Selector(new List <Node> {
            goToCoverSequence, chaseSequence
        });
        Selector tryToTakeCoverSelector = new Selector(new List <Node> {
            isCoveredNode, findCoverSelector
        });
        Sequence mainCoverSequence = new Sequence(new List <Node> {
            healthNode, tryToTakeCoverSelector
        });

        topNode = new Selector(new List <Node> {
            mainCoverSequence, shootSequence, chaseSequence
        });
    }
示例#2
0
    //builds the characters behaviour tree
    private void constructBehaviourTree()
    {
        //health node checks if health is below threshold
        HealthNode healthNode = new HealthNode(this, m_lowHealthThreshold);

        //inverted health checks if health is above threshhold
        Inverter invertHealth = new Inverter(healthNode);

        //Cover

        GetCoverNode getCoverNode = new GetCoverNode(target.transform, this);

        GoToCoverNode goToCoverNode = new GoToCoverNode(this, m_speed);

        HealNode Heal = new HealNode(20, this, m_healthRegenRate);

        Sequence CoverSequence = new Sequence(new List <BNode> {
            healthNode, getCoverNode, goToCoverNode, Heal
        });

        //chase
        Range = new RangeNode(m_detectionRange, target.transform, gameObject.transform, this);

        Chase = new ChaseNode(target.transform, this, m_speed);

        Sequence ChaseSequence = new Sequence(new List <BNode> {
            invertHealth, Range, Chase
        });

        //wander
        RangeNode wanderRange = new RangeNode(m_detectionRange, target.transform, gameObject.transform, this);

        Inverter invertWanderRange = new Inverter(wanderRange);

        WanderNode wander = new WanderNode(this, m_speed);

        Sequence WanderSequence = new Sequence(new List <BNode> {
            invertWanderRange, wander
        });

        //attack
        attackRange = new RangeNode(m_attackRange, target.transform, gameObject.transform, this);

        attack = new AttackNode(target.transform, this);

        Sequence AttackSequence = new Sequence(new List <BNode> {
            attackRange, attack
        });


        //root node
        topNode = new Selector(new List <BNode> {
            CoverSequence, AttackSequence, ChaseSequence, WanderSequence
        });
    }
    //builds the characters behaviour tree
    private void constructBehaviourTree()
    {
        ////Cover

        GetCoverNode getCoverNode = new GetCoverNode(m_target.transform, this);

        GoToCoverNode goToCoverNode = new GoToCoverNode(this, m_speed);

        HealNode Heal = new HealNode(20, this, m_healthRegenRate);

        Sequence CoverSequence = new Sequence(new List <BNode> {
            getCoverNode, goToCoverNode, Heal
        });

        coverTopNode = new Selector(new List <BNode> {
            CoverSequence
        });

        ////chase
        m_chase = new ChaseNode(m_target.transform, this, m_speed);

        Sequence ChaseSequence = new Sequence(new List <BNode> {
            m_chase
        });

        chaseTopNode = new Selector(new List <BNode> {
            ChaseSequence
        });

        ////wander
        WanderNode wander = new WanderNode(this, m_speed);

        Sequence WanderSequence = new Sequence(new List <BNode> {
            wander
        });

        WanderTopNode = new Selector(new List <BNode> {
            WanderSequence
        });

        ////attack
        m_attack = new AttackNode(m_target.transform, this);

        Sequence AttackSequence = new Sequence(new List <BNode> {
            m_attack
        });

        attackTopNode = new Selector(new List <BNode> {
            AttackSequence
        });
    }
        private void ConstructBehaviourTree()
        {
            // Nodes
            var wonderNode         = new WonderNode(_navMeshAgent, gameObject);
            var coverAvailableNode = new IsCoverAvailableNode(availableCovers, player.transform, this);
            var goToCoverNode      = new GoToCoverNode(this, _navMeshAgent);
            var healthNode         = new HealthNode(GetComponent <EnemyController>(),
                                                    GetComponent <EnemyController>().lowHealthThreshold);
            var isCoveredNode   = new IsCoveredNode(player.transform, transform);
            var chaseNode       = new ChaseNode(player.transform, _navMeshAgent);
            var wonderRangeNode =
                new NotInRangeNode(GetComponent <EnemyController>().chaseRange, player.transform, transform);
            var chasingRangeNode  = new RangeNode(GetComponent <EnemyController>().chaseRange, player.transform, transform);
            var shootingRangeNode = new RangeNode(GetComponent <EnemyController>().shootRange, player.transform, transform);
            var shootNode         = new ShootNode(_navMeshAgent, this);

            // Sequences
            var wonderSequence = new BTSequencer(new List <BTNode> {
                wonderRangeNode, wonderNode
            });
            var chaseSequence = new BTSequencer(new List <BTNode> {
                chasingRangeNode, chaseNode
            });
            var shootSequence = new BTSequencer(new List <BTNode> {
                shootingRangeNode, shootNode
            });
            var goToCoverSequence = new BTSequencer(new List <BTNode> {
                coverAvailableNode, goToCoverNode
            });
            var findCoverSelector = new BTSelector(new List <BTNode> {
                goToCoverSequence, chaseSequence
            });
            var tryToTakeCoverSelector = new BTSelector(new List <BTNode> {
                isCoveredNode, findCoverSelector
            });
            var mainCoverSequence = new BTSequencer(new List <BTNode> {
                healthNode, tryToTakeCoverSelector
            });

            _rootNode = new BTSelector(new List <BTNode> {
                wonderSequence,
                mainCoverSequence,
                shootSequence,
                chaseSequence
            });
        }