예제 #1
0
    private IEnumerator FireContinuosly()
    {
        while (true)
        {
            // create player laser
            PlayerLaser laser          = Instantiate(laserPrefab, firePoint.position, transform.rotation);
            var         borderPosition = new Vector3(mousePosition.x, mousePosition.y, 0);

            // calculate the distance from player to mouse position
            var borderDistance = Geometry.HypotenuseLength(
                borderPosition.y - laser.transform.position.y,
                borderPosition.x - laser.transform.position.x
                );

            // calculate animation duration of laser, from player to mouse position
            var animationDuration = borderDistance * projectileSpeed / (maxX - minX);

            AudioManager.Instance.PlaySound(SoundType.PlayerLaser);
            CameraShake.Instance.ShakeCamera(0.5f, 0.1f);

            // animate
            laser.transform
            .DOMove(borderPosition, animationDuration)
            .OnComplete(() => laser.StopFlying());

            yield return(new WaitForSeconds(projectileFiringPeriod));
        }
    }
예제 #2
0
 public override void Clear()
 {
     _laser           = null;
     _highLightBgTf   = null;
     _highLightStarTf = null;
     _subWeaponTf     = null;
     base.Clear();
 }
예제 #3
0
    private BulletBase NewBullet(BulletType bulletID)
    {
        BulletBase         bullet = null;
        Stack <BulletBase> _stack;

        // 判断对象池中是否有该类型的对象,如果有,则取出
        if (_bulletsPool.TryGetValue(bulletID, out _stack))
        {
            if (_stack.Count > 0)
            {
                bullet = _stack.Pop();
            }
        }
        else
        {
            _stack = new Stack <BulletBase>();
            _bulletsPool.Add(bulletID, _stack);
        }
        // 如果对象池内没有该对象,则创建
        if (bullet == null)
        {
            switch (bulletID)
            {
            case BulletType.ReimuA_Sub1:
                bullet = new BulletReimuASub1();
                break;

            case BulletType.Player_Laser:
                bullet = new PlayerLaser();
                break;

            case BulletType.Player_Simple:
                bullet = new PlayerBulletSimple();
                break;

            case BulletType.Enemy_Laser:
                bullet = new EnemyLaser();
                break;

            case BulletType.Enemy_CurveLaser:
                bullet = new EnemyCurveLaser();
                break;

            case BulletType.Enemy_Simple:
                bullet = new EnemySimpleBullet();
                break;

            case BulletType.Enemy_LinearLaser:
                bullet = new EnemyLinearLaser();
                break;

            default:
                Logger.Log("Create Bullet Fail! Invalid BulledId!");
                break;
            }
        }
        return(bullet);
    }
예제 #4
0
    void OnTriggerEnter(Collider collider)
    {
        PlayerLaser laser = collider.gameObject.GetComponent <PlayerLaser>();

        if (laser)
        {
            dying = true; // enemy ship has been shot
        }
    }
예제 #5
0
 private void OnCollisionEnter2D(Collision2D collision)
 {
     if (collision.gameObject.GetComponent <PlayerLaser>())
     {
         incoming = collision.gameObject.GetComponent <PlayerLaser>();
         Debug.Log("HIT!!");
         TakeDamage();
     }
 }
예제 #6
0
    void OnTriggerEnter(Collider collider)
    {
        PlayerLaser laser = collider.gameObject.GetComponent <PlayerLaser>();

        if (laser)
        {
            Destroy(collider.gameObject);
        }
    }
예제 #7
0
 // Decrease Health of Enemy
 private void ProcessHit(PlayerLaser laserDamage)
 {
     enemyHealthPoints -= laserDamage.GetDamage();
     laserDamage.Hit();
     // Destroy object when health <= 0
     if (enemyHealthPoints <= 0)
     {
         DestroyEnemy();
     }
 }
예제 #8
0
    public GameObject CreateLaser()
    {
        PlayerLaser laser = GameObject.Instantiate(data.laser).GetComponent <PlayerLaser>();

        laser.Init(this, manager);

        availableLaser.Add(laser.gameObject);

        return(laser.gameObject);
    }
예제 #9
0
    // When player laser hits enemy deal damage
    private void OnTriggerEnter2D(Collider2D collider)
    {
        PlayerLaser laserDamage = collider.gameObject.GetComponent <PlayerLaser>();

        // Avoid Null reference Exception
        if (!laserDamage)
        {
            return;
        }
        ProcessHit(laserDamage);
    }
예제 #10
0
    public GameObject SpawnLaser()
    {
        int         index = Random.Range(0, availableLaser.Count);
        PlayerLaser laser = availableLaser[index].GetComponent <PlayerLaser>();

        laser.Activate(data.firePoint, data.firePoint.position - transform.position);

        availableLaser.RemoveAt(index);

        return(laser.gameObject);
    }
예제 #11
0
    void OnTriggerEnter2D(Collider2D col)
    {
        PlayerLaser laser = col.gameObject.GetComponent <PlayerLaser> ();        // REFER TO PLAYER ATTACK COLLISION

        if (laser && peace == false)
        {
            StartCoroutine(hitAnimation());
            Destroy(col.gameObject);
            currentHits++;                         //increments hit count
            if (currentHits >= maxHits)            //if hit count is equal to maximum hits then ...
            {
                Score.currentScore += enemyPoints; //Increase game score by the enemy's point allocation
                Destroy(gameObject);               //Destroy enemy
                SpawnEnemy.totalEnemies--;         //Decrease total number of enemies in formation
            }
        }
    }
예제 #12
0
    void OnTriggerEnter2D(Collider2D collider)
    {
        PlayerLaser projectile = collider.gameObject.GetComponent <PlayerLaser>();

        if (projectile)
        {
            if ((Health -= projectile.Damage) <= 0)
            {
                if (DeathSound != null)
                {
                    AudioSource.PlayClipAtPoint(DeathSound, Camera.main.transform.position, 1f);
                }
                _scoreKeeper.AddScore(ScoreValue);
                Destroy(gameObject);
            }
            projectile.Destroy();
        }
    }
예제 #13
0
    void OnTriggerEnter(Collider collider)
    {
        PlayerLaser laser = collider.gameObject.GetComponent <PlayerLaser>();

        if (laser && inPosition == true)
        {
            health = health - (player.numOfBullets());
            Debug.Log(health);
            //  life.Damage(player.numOfBullets());
            if (health <= 0)
            {
                Destroy(gameObject);
                GameObject deathExplosion = Instantiate(explosion, new Vector3(26.0f, 40.0f, -1690.0f), Quaternion.identity) as GameObject;
                Destroy(deathExplosion, 8.0f);
                AudioSource.PlayClipAtPoint(explosionSound, new Vector3(26.0f, 40.0f, -1690.0f));
                winCanvas.SetActive(true);
            }
        }
    }
예제 #14
0
 protected void Shoot()
 {
     if (_character.CanShoot() && _character.IsInShootingStatus())
     {
         int subAvailable = PlayerInterface.GetInstance().GetPower() / 100;
         if (!_isShooting)
         {
             // 射出激光的特效
             ActiveShootingEffect(true);
             // 创建激光
             if (_laser == null)
             {
                 _laser = ObjectsPool.GetInstance().CreateBullet(BulletType.Player_Laser) as PlayerLaser;
                 _laser.ChangeStyleById("521000");
                 //_laser.SetTextureProps(Consts.MarisaAtlasName, "MarisaALaser", 256, 2);
             }
             // 星星特效
             _curStarScale = 1;
             _scaleDelta   = -ScaleDelta;
             _highLightStarTf.localScale = Vector3.one;
             // 设置碰撞
             _laser.SetActive(true);
         }
         // 更新激光的位置
         Vector3 playerPos = _character.GetPosition();
         Vector3 laserPos  = playerPos + _curPos;
         _laser.SetPosition(laserPos);
         // 更新激光角度
         ePlayerMoveMode mode       = _character.curModeMode;
         float           laserAngle = mode == ePlayerMoveMode.LowSpeed ? 90f : _shootAngles[subAvailable - 1][_subIndex];
         _laser.SetRotation(laserAngle);
         _isShooting = true;
     }
     else
     {
         if (_isShooting)
         {
             ActiveShootingEffect(false);
             _laser.SetActive(false);
         }
         _isShooting = false;
     }
 }
예제 #15
0
 private void Awake()
 {
     playerShoot       = GetComponent <PlayerShoot>();
     playerChargePower = GetComponent <PlayerLaser>();
 }