From a5b234974e5516069077f7c8d5b4d582115ad5d9 Mon Sep 17 00:00:00 2001 From: KOSMOGOR Date: Wed, 30 Apr 2025 21:23:38 +0300 Subject: [PATCH] add: rocket launcher scripts --- Assets/Scripts/Player/RocketLauncher.cs | 21 ++++++++++++ Assets/Scripts/Player/RocketLauncher.cs.meta | 2 ++ Assets/Scripts/Player/RocketProjectile.cs | 34 +++++++++++++++++++ .../Scripts/Player/RocketProjectile.cs.meta | 2 ++ 4 files changed, 59 insertions(+) create mode 100644 Assets/Scripts/Player/RocketLauncher.cs create mode 100644 Assets/Scripts/Player/RocketLauncher.cs.meta create mode 100644 Assets/Scripts/Player/RocketProjectile.cs create mode 100644 Assets/Scripts/Player/RocketProjectile.cs.meta diff --git a/Assets/Scripts/Player/RocketLauncher.cs b/Assets/Scripts/Player/RocketLauncher.cs new file mode 100644 index 0000000..9abbbe0 --- /dev/null +++ b/Assets/Scripts/Player/RocketLauncher.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +public class RocketLauncher : Weapon +{ + public GameObject projectilePrefab; + public Transform spawnPosition; + public float fireRate = 0.3f; + + [SerializeField] float currentDelay = 0; + + public override void Shoot(bool keyDown, bool keyHold) { + if (keyHold && (fireRate == 0 || currentDelay >= 1 / fireRate) && GameController.i.ConsumeBullet(bulletType)) { + Instantiate(projectilePrefab, spawnPosition.position, spawnPosition.rotation); + currentDelay = 0; + } + } + + void Update() { + if (fireRate != 0) currentDelay = Mathf.Clamp(currentDelay += Time.deltaTime, 0, 1 / fireRate); + } +} diff --git a/Assets/Scripts/Player/RocketLauncher.cs.meta b/Assets/Scripts/Player/RocketLauncher.cs.meta new file mode 100644 index 0000000..147489c --- /dev/null +++ b/Assets/Scripts/Player/RocketLauncher.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: adc348041e3fec6468a64ec626053bc3 \ No newline at end of file diff --git a/Assets/Scripts/Player/RocketProjectile.cs b/Assets/Scripts/Player/RocketProjectile.cs new file mode 100644 index 0000000..e05965f --- /dev/null +++ b/Assets/Scripts/Player/RocketProjectile.cs @@ -0,0 +1,34 @@ +using UnityEngine; + +public class RocketProjectile : MonoBehaviour +{ + public float speed = 1f; + public float damage = 50f; + public float explosionRadius = 5f; + public float timeToLive = 3f; + + float currentTime = 0; + + Rigidbody rb; + + void Start() { + rb = GetComponent(); + rb.linearVelocity = transform.forward * speed; + } + + void Update() { + currentTime += Time.deltaTime; + if (currentTime >= timeToLive) Destroy(gameObject); + } + + void OnTriggerEnter(Collider other) { + Collider[] colliders = Physics.OverlapSphere(transform.position, explosionRadius); + foreach (Collider collider in colliders) { + if (collider.gameObject.CompareTag("Enemy")) { + Enemy enemy = other.GetComponent(); + enemy.DealDamage(damage); + } + } + Destroy(gameObject); + } +} diff --git a/Assets/Scripts/Player/RocketProjectile.cs.meta b/Assets/Scripts/Player/RocketProjectile.cs.meta new file mode 100644 index 0000000..929cbba --- /dev/null +++ b/Assets/Scripts/Player/RocketProjectile.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4b620769c55dfa849b7fd23858b7cc1f \ No newline at end of file