Esempio n. 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
        });
    }
Esempio n. 2
0
        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
            });
        }
Esempio n. 3
0
    /// <summary>
    /// Author: Ziqi Li
    /// RPC function for shooting bullet
    /// </summary>
    //[PunRPC]
    //public void RPC_Shoot()
    //{
    //    GameObject bullet = Instantiate(Projectile, transform.position + transform.forward * 2.4f, Quaternion.identity);
    //    bullet.GetComponent<Bullet>().owner = this.gameObject; // Modification made by Feiyang: Register the owner of the bullet to enable friendly fire
    //    bullet.GetComponent<Rigidbody>().AddForce(transform.forward * (ProjectileSpeed * 100));
    //}


    /// <summary>
    /// Author: Daniel Holker
    /// Constructs nodes and puts them together into a behaviour tree that determines its actions
    /// </summary>
    private void ConstructBehaviourTree()
    {
        WalkToPlayerNode  WalkToPlayerNode  = new WalkToPlayerNode(GetTarget, NearnessToPlayer, NavMeshAgent);
        WanderNode        WanderNode        = new WanderNode(WanderTarget, NavMeshAgent, WanderRange);
        TargetInRangeNode TargetInRangeNode = new TargetInRangeNode(ChasingRange, PlayerList, this.transform, SetTarget);
        ShootNode         ShootNode         = new ShootNode(Projectile, GetTarget, ProjectileSpeed, ShootCooldown, this.gameObject, this.AnimManager, this.AttackDelay);

        Inverter TargetNotInRange = new Inverter(TargetInRangeNode);


        Sequence AttackSequence = new Sequence(new List <Node> {
            WalkToPlayerNode, ShootNode
        });
        Sequence ChaseSequence = new Sequence(new List <Node> {
            TargetInRangeNode, AttackSequence
        });
        Sequence ReturnToWander = new Sequence(new List <Node> {
            TargetNotInRange, WanderNode
        });

        RootNode = new Selector(new List <Node> {
            ChaseSequence, ReturnToWander
        });
    }
Esempio n. 4
0
    /// <summary>
    /// Author: Ziqi Li
    /// RPC function for shooting bullet
    /// </summary>
    //[PunRPC]
    //public void RPC_Shoot()
    //{
    //    GameObject bullet = Instantiate(Projectile, transform.position + transform.forward * 2.5f, Quaternion.identity);
    //    Debug.Log(bullet.transform);
    //    bullet.GetComponent<Bullet>().owner = this.gameObject; // Modification made by Feiyang: Register the owner of the bullet to enable friendly fire
    //    bullet.GetComponent<Rigidbody>().AddForce(transform.forward * (ProjectileSpeed * 100));
    //}


    private void ConstructBehaviourTree()
    {
        ShootNode ShootNode = new ShootNode(Projectile, GetTarget, ProjectileSpeed, ShootCooldown, this.gameObject, AnimManager, this.AttackDelay);

        RootNode = ShootNode;
    }