private void CreatePools() { this.kinematicPool = new ObjectPoolMono <Projectile>(this.kinematicPrefab, this.kinematicPoolSize, this.transform) { isExpandable = this.isKinematicPoolExpandable }; this.blasterPool = new ObjectPoolMono <Projectile>(this.blasterPrefab, this.blasterPoolSize, this.transform) { isExpandable = this.isBlasterPoolExpandable }; }
private IEnumerator FireGun(IWeaponInteractor interactor, ObjectPoolMono <Projectile> pool) { interactor.InitializeWeapon(); while (true) { var projectile = pool.GetFreeElement(); projectile.gameObject.transform.position = this.firePoint.transform.position; projectile.gameObject.GetComponent <Rigidbody>().velocity = Vector3.up * interactor.Velocity; projectile.damageOnHit = interactor.DamageOnHit; projectile.gameObject.layer = LayerMask.NameToLayer("PlayerProjectile"); yield return(new WaitForSeconds(1 / interactor.FireRate)); } }
public void OpenFire(IWeaponInteractor interactor, ObjectPoolMono <Projectile> kinematicPool, ObjectPoolMono <Projectile> blasterPool) { Debug.Log($"Opening fire with {interactor.WeaponType}"); switch (interactor.WeaponType) { case WeaponType.Kinematic: this.StartCoroutine(FireGun(interactor, kinematicPool)); break; case WeaponType.Blaster: this.StartCoroutine(FireGun(interactor, blasterPool)); break; case WeaponType.Laser: this.laser.SetActive(true); break; default: Debug.LogError("No weapon selected"); break; } }