private void FillPool() { for (int i = 0; i < poolReserve; i++) { StraightBlast newObj = Instantiate(blastPrefab, blastPoolHolder); newObj.gameObject.SetActive(false); pool.Add(newObj); } }
public void Fire() { if (timer <= 0f) { timer = cooldown; } else { return; } float angle = parent.transform.eulerAngles.z; Vector2 aimPos = aim; float aimAngle = -Vector2.SignedAngle(Vector2.up, aimPos - (Vector2)transform.position); if (Mathf.Abs(Mathf.DeltaAngle(angle, aimAngle)) < aimThreshold) { angle = aimAngle; } angle *= Mathf.Deg2Rad; if (parent.rb != null) { Vector2 dir = new Vector2(Mathf.Sin(angle), Mathf.Cos(angle)); dir.Normalize(); parent.rb.AddForce(-dir * recoil); } for (int i = alternatingFire ? nextWeaponCounter : 0; i < weapons.Length; i++) { StraightBlast blast = pool[pool.Count - 1]; pool.RemoveAt(pool.Count - 1); blast.Shoot(weapons[i].position, Quaternion.Euler(Vector3.forward * angle * Mathf.Rad2Deg), pool, parent); //muzzle flash GameObject muzFlash = Instantiate(muzzleFlash); muzFlash.transform.position = weapons[i].position; muzFlash.transform.eulerAngles = Vector3.forward * transform.eulerAngles.z; muzFlash.transform.parent = transform; muzFlash.GetComponent <SpriteRenderer>().flipX = flipMuzzleFlash; flipMuzzleFlash = !flipMuzzleFlash; if (alternatingFire) { nextWeaponCounter = (nextWeaponCounter + 1) % weapons.Length; break; } } }