IEnumerator shoot(Transform t, Entity.Target target, int layer) { for (int i = 0; i < raffaleSize; i++) { Vector2 pos; switch (target) { case Entity.Target.Mouse: pos = Camera.main.ScreenToWorldPoint((Vector2)Input.mousePosition); break; case Entity.Target.Player: pos = player.transform.position; break; } if (!t || !bullet || !controller) { break; } GameObject b = GameObject.Instantiate(bullet, controller.transform.position, Quaternion.Euler(t.eulerAngles.x, t.eulerAngles.y, t.eulerAngles.z - 90)) as GameObject; b.layer = layer; b.GetComponent <Rigidbody2D>().AddForce((pos - (Vector2)t.position).normalized * bulletSpeed); if (layer != LayerMask.NameToLayer("enemyBullet")) { ammoNumber--; } if (ammoNumber == 0) { break; } yield return(new WaitForSeconds(raffaleRate)); } }
public void fireWeapon(Transform t, Entity.Target target) { if (GetComponent <Enemy>()) { weapon.fire(t, target, LayerMask.NameToLayer("enemyBullet")); } else { weapon.fire(t, target, LayerMask.NameToLayer("playerBullet")); } }
public void fire(Transform t, Entity.Target target, int layer) { if (ammoNumber <= 0) { gameManager.playDryFire(); return; } if (!canShoot) { return; } canShoot = false; StartCoroutine(shoot(t, target, layer)); StartCoroutine(weaponCanShoot()); }