Example #1
0
 private void FillPool()
 {
     for (int i = 0; i < poolReserve; i++)
     {
         LaserBlast newObj = Instantiate(blastPrefab, blastPoolHolder);
         newObj.gameObject.SetActive(false);
         pool.Add(newObj);
     }
 }
Example #2
0
    private void Fire()
    {
        if (timer <= 0f)
        {
            timer = cooldown;
            if (AudioMngr != null)
            {
                AudioMngr.PlaySFX(shootSound, transform.position, transform, 0.7f);
            }
        }
        else
        {
            return;
        }

        float angle = Mathf.Deg2Rad * -parent.transform.eulerAngles.z;

        if (parent.rb != null)
        {
            parent.rb.velocity *= stoppingForce;
            Vector2 dir = new Vector2(Mathf.Sin(angle), Mathf.Cos(angle));
            dir.Normalize();
            parent.rb.AddForce(-dir * recoil);
        }

        bool flipMuzzleFlash = true;

        for (int i = 0; i < weapons.Length; i++)
        {
            Transform  weapon = weapons[i];
            LaserBlast blast  = pool[pool.Count - 1];
            pool.RemoveAt(pool.Count - 1);
            blast.Shoot(weapon.position, transform.rotation, weapon.GetChild(0).position - weapon.position,
                        laserTarget.position - weapon.position, pool, weapon, parent, (double)Pause.timeSinceOpen, this);
            //muzzle flash
            GameObject muzFlash = Instantiate(muzzleFlash);
            muzFlash.transform.position    = weapon.position;
            muzFlash.transform.eulerAngles = Vector3.forward * -angle * Mathf.Rad2Deg;
            muzFlash.GetComponent <SpriteRenderer>().flipX = flipMuzzleFlash;
            flipMuzzleFlash = !flipMuzzleFlash;
        }
    }