public override void Shoot(Transform barrel, Weapon2DPreset weaponPreset, BulletPoolInstance bulletPool) { Quaternion bulletRot = Quaternion.Euler(0, 0, barrel.rotation.eulerAngles.z + Random.Range(-weaponPreset.spread / 2, weaponPreset.spread / 2)); if (barrel.gameObject.activeSelf) { GameObject bullet = bulletPool.SpawnObjectAt(barrel, bulletRot); if (bullet.GetComponent <Projectile2D>() != null) { float variation1 = 1; float variation2 = 1; if (weaponPreset.speedVariation) { variation1 = 1 - weaponPreset.variationAmount; variation2 = 1 + weaponPreset.variationAmount; } float randSpeed = (weaponPreset.speedVariation) ? Random.Range(weaponPreset.projectileSpeed * variation1, weaponPreset.projectileSpeed * variation2) : weaponPreset.projectileSpeed; bullet.GetComponent <Projectile2D>().bulletSpeed = randSpeed; } else { Debug.LogError("Instantiated bullet doesn't have BasicProjectile2D.cs component or something that derives from it!"); } } }
public void InitWeaponPreset(Weapon2DPreset preset, bool isNewWeapon = false) { if (heldWeapons.ContainsKey(preset.name)) { if (!isNewWeapon) { weaponPreset = heldWeapons[preset.name]; } else { heldWeapons[preset.name] = preset.Copy(); weaponPreset = heldWeapons[preset.name]; } } else { heldWeapons.Add(preset.name, preset.Copy()); weaponPreset = heldWeapons[preset.name]; } switch (weaponPreset.shootMode) { case Mode.normal: shootMode = (ShootMode)ScriptableObject.CreateInstance("NormalShoot"); break; case Mode.arcShot: shootMode = (ShootMode)ScriptableObject.CreateInstance("ArcShootMode"); break; default: shootMode = (ShootMode)ScriptableObject.CreateInstance("ArcShootMode"); break; } if (weaponPreset.weaponAmmo == null) { weaponPreset.weaponAmmo = new WeaponAmmo(weaponPreset.clipSize, weaponPreset.startingAmmo); } cooldownCheckValue = weaponPreset.cooldown; cooldownTimer = new Cooldown(d: weaponPreset.cooldown); gameObject.name = weaponPreset.weaponName; if (bulletPool != null) { bulletPool.DestructionSequence(); } bulletPool = new BulletPoolInstance(weaponPreset.bulletPrefab, 0, this, weaponPreset.weaponName); }
public abstract void Shoot(Transform barrel, Weapon2DPreset weaponPreset, BulletPoolInstance bulletPool);