private void Shoot()
    {
        RaycastHit2D hit = Physics2D.Raycast(
            transform.position,
            transform.up,
            _vision, LayerMask.GetMask("Enemy"));

        Debug.DrawRay(transform.position, transform.up * _vision);

        if (hit.collider == null)
        {
            return;
        }

        if (!hit.transform.CompareTag("Enemy"))
        {
            return;
        }

        ProjectileBehaviourScript projectile = null;

        for (int i = 0; i < _projectilePool.Length; i++)
        {
            if (_projectilePool [i].gameObject.activeSelf == false)
            {
                projectile = _projectilePool [i];

                projectile.transform.position = transform.position;
                projectile.transform.rotation = transform.rotation;
                projectile.Shoot();

                break;
            }
        }
    }
    private IEnumerator SquareSplitAfterTime(float _time, float _distance)
    {
        yield return(new WaitForSeconds(_time));

        GameObject go1 = Instantiate(gameObject, transform.position, transform.rotation);
        GameObject go2 = Instantiate(gameObject, transform.position, transform.rotation);

        ProjectileBehaviourScript bullet1 = go1.GetComponent <ProjectileBehaviourScript>();
        ProjectileBehaviourScript bullet2 = go2.GetComponent <ProjectileBehaviourScript>();

        bullet1.additionalBulletBehaviour = AdditionalBulletBehaviour._null_;
        bullet2.additionalBulletBehaviour = AdditionalBulletBehaviour._null_;

        //go1.transform.position += transform.right * _distance;
        //go2.transform.position -= transform.right * _distance;

        bullet1.direction.x = bullet1.direction.y / 5;
        bullet2.direction.x = -bullet2.direction.y / 5;

        //StartCoroutine(Test(go1, go2, _distance));



        bullet1.PerformSetDirectionAfterTime(direction, 0.5f);
        bullet2.PerformSetDirectionAfterTime(direction, 0.5f);

        //Destroy(this.gameObject);
    }
Exemplo n.º 3
0
        /// <summary>
        /// Shoot a projectil
        /// </summary>
        public virtual void Shoot()
        {
            RaycastHit2D hit = Physics2D.Raycast(
                _body.position,
                _body.up,
                _sensorFieldSize + 0.2f, LayerMask.GetMask(_enemyLayer));

#if UNITY_EDITOR
            Debug.DrawRay(_body.position, _body.up * _sensorFieldSize);
#endif
            if (hit.collider == null)
            {
                return;
            }

            if (!hit.transform.CompareTag(_enemyTag))
            {
                return;
            }

            ProjectileBehaviourScript projectile = null;

            for (int i = 0; i < _projectilePool.Length; i++)
            {
                if (_projectilePool[i].gameObject.activeSelf == false)
                {
                    projectile = _projectilePool[i];
                    projectile.gameObject.tag     = gameObject.tag;
                    projectile.transform.position = _body.position;
                    projectile.transform.rotation = _body.rotation;
                    projectile.Shoot();
                    break;
                }
            }
        }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (this.GetType() != typeof(ExplosionBehaviourScript))
        {
            if (collision.gameObject.layer == 8 /*Static*/)
            {
                if (collision.CompareTag("BulletLimiter"))
                {
                    Destroy(this.gameObject);
                }
                else
                {
                    InitiliseSelfDestruction();
                }
            }

            if (isEnemyBullet == false)   //if bullet from player
            {
                if (collision.gameObject.layer == 10 /*Enemy*/)
                {
                    if (bulletType == BulletTypes.SniperBullet_lvl_X == true)
                    {
                        if (collision.gameObject != lastHitEnemy)
                        {
                            if (collision.gameObject.GetComponent <EnemyBehaviourScript>().Health >= 0)
                            {
                                collision.gameObject.GetComponent <EnemyBehaviourScript>().Health -= damage * damageMultiplyer;
                            }
                        }
                        lastHitEnemy = collision.gameObject;
                    } //is not sniper bullet
                    else if (collision.gameObject.GetComponent <EnemyBehaviourScript>().Health >= 0)
                    {
                        collision.gameObject.GetComponent <EnemyBehaviourScript>().Health -= damage * damageMultiplyer;

                        InitiliseSelfDestruction();
                    }
                }
            }
            else   //if bullet is from enemy
            {
                if (collision.gameObject.CompareTag("Player"))
                {
                    collision.gameObject.GetComponent <PlayerBehaviourScript>().ChangeHealthBy(-damage);

                    InitiliseSelfDestruction();
                }
            }

            if (collision.gameObject.CompareTag("Projectile"))
            {
                ProjectileBehaviourScript otherProjectile = collision.gameObject.GetComponent <ProjectileBehaviourScript>();

                if (this.isShootable == true)
                {
                    if (otherProjectile.isEnemyBullet == false)
                    {
                        InitiliseSelfDestruction();
                    }
                }
                if (bulletType == BulletTypes.WaveBullet_lvl_X)
                {
                    if (otherProjectile.isEnemyBullet == true)
                    {
                        if (otherProjectile.isShootable == true)
                        {
                            otherProjectile.InitiliseSelfDestruction();
                        }
                        else
                        {
                            Destroy(collision.gameObject);

                            //otherProjectile.isEnemyBullet = false;
                            //otherProjectile.gameObject.transform.rotation = Quaternion.Euler(0, 0, otherProjectile.gameObject.transform.rotation.z - 180);
                            //otherProjectile.gameObject.transform.rotation = Quaternion.Euler(0, 0, (otherProjectile.gameObject.transform.rotation.z * transform.rotation.z));
                            //otherProjectile.gameObject.transform.Rotate(0, 0, 2 * (transform.rotation.z - otherProjectile.gameObject.transform.rotation.z));
                        }
                    }
                }
            }
        }
        else                            //this is an exposion
        {
            if (isEnemyBullet == false) // is player explosion
            {
                if (collision.gameObject.layer == 10 /*Enemy*/)
                {
                    collision.gameObject.GetComponent <EnemyBehaviourScript>().Health -= damage;
                }
            }
            else   //is enemy explosion
            {
                if (collision.gameObject.CompareTag("Player"))
                {
                    collision.gameObject.GetComponent <PlayerBehaviourScript>().ChangeHealthBy(-damage);

                    InitiliseSelfDestruction();
                }
            }
        }
    }