From 5a77753b170ddbfb44f9984c4af4d6db2d1c5c70 Mon Sep 17 00:00:00 2001
From: Nat10k <110515021+Nat10k@users.noreply.github.com>
Date: Fri, 10 May 2024 09:51:30 +0700
Subject: [PATCH] fix : add grenade cooldown, invulnerability

---
 Assets/Prefabs/Player.prefab            |  2 +-
 Assets/Scripts/Enemy/EnemyAttack.cs     |  2 +-
 Assets/Scripts/Player/PlayerShooting.cs | 31 +++++++++++++------------
 3 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/Assets/Prefabs/Player.prefab b/Assets/Prefabs/Player.prefab
index eeb8645..f736129 100644
--- a/Assets/Prefabs/Player.prefab
+++ b/Assets/Prefabs/Player.prefab
@@ -164,7 +164,7 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   grenade: {fileID: 1105787354104060, guid: 41a4c48eef428174cb5039adb608d30c, type: 3}
   grenadeSpeed: 400
-  grenadeFireDelay: 0.75
+  grenadeFireDelay: 5
   damagePercent: 1
   weaponsList:
   - {fileID: 6517554577502634727, guid: 654eb4aab37345147a96aba1eaf65063, type: 3}
diff --git a/Assets/Scripts/Enemy/EnemyAttack.cs b/Assets/Scripts/Enemy/EnemyAttack.cs
index efd4005..f3d12a7 100644
--- a/Assets/Scripts/Enemy/EnemyAttack.cs
+++ b/Assets/Scripts/Enemy/EnemyAttack.cs
@@ -79,7 +79,7 @@ namespace Nightmare
 
         void Update ()
         {
-            if (isPaused)
+            if (isPaused || EnemyMovement.isFreeze)
                 return;
             
             // Add the time since Update was last called to the timer.
diff --git a/Assets/Scripts/Player/PlayerShooting.cs b/Assets/Scripts/Player/PlayerShooting.cs
index 0a271f6..ec10c0c 100644
--- a/Assets/Scripts/Player/PlayerShooting.cs
+++ b/Assets/Scripts/Player/PlayerShooting.cs
@@ -15,7 +15,7 @@ namespace Nightmare
     {
         public GameObject grenade;
         public float grenadeSpeed = 200f;
-        public float grenadeFireDelay = 0.5f;
+        public float grenadeFireDelay = 5f;
         public float damagePercent = 1;
         int grenadeStock = int.MaxValue;
         
@@ -25,6 +25,7 @@ namespace Nightmare
         private int currWeaponIdx;
         [SerializeField] Transform weaponPos;
         float realWeaponDamage;
+        private bool isShootingGrenade;
 
         // For skill cutscene
         PlayableDirector director;
@@ -46,7 +47,7 @@ namespace Nightmare
             timer = 0;
             grenadeTimer = 0;
             ChangeWeapon(0);
-            AdjustGrenadeStock(0);
+            isShootingGrenade = false;
 
             GameObject directorObject = GameObject.Find("Timeline");
 
@@ -191,7 +192,7 @@ namespace Nightmare
 
         void Shoot ()
         {
-            if (timer >= currWeapon.timeBetweenBullets && Time.timeScale != 0)
+            if (timer >= currWeapon.timeBetweenBullets && Time.timeScale != 0 && !isShootingGrenade)
             {
                 // Reset the timer.
                 timer = 0f;
@@ -212,18 +213,15 @@ namespace Nightmare
 
         public void CollectGrenade()
         {
-            AdjustGrenadeStock(1);
         }
 
-        private void AdjustGrenadeStock(int change)
+        public void ShootGrenade()
         {
-            grenadeStock += change;
-            GrenadeManager.grenades = grenadeStock;
-        }
-
-        void ShootGrenade()
-        {
-            StartCoroutine(ShootCutscene());
+            if (!isShootingGrenade && grenadeTimer >= grenadeFireDelay)
+            {
+                isShootingGrenade = true;
+                StartCoroutine(ShootCutscene());
+            }
             
             //GameObject clone = Instantiate(grenade, transform.position, Quaternion.identity);
             //Grenade grenadeClone = clone.GetComponent<Grenade>();
@@ -244,10 +242,13 @@ namespace Nightmare
             // Unfreeze the enemies
             UnfreezeEnemies();
 
-            AdjustGrenadeStock(-1);
+            for (int i=0; i<30; i++)
+            {
+                GameObject clone = PoolManager.Pull("Grenade", transform.position, Quaternion.identity);
+                EventManager.TriggerEvent("ShootGrenade", grenadeSpeed * transform.forward);
+            }
             grenadeTimer = 0;
-            GameObject clone = PoolManager.Pull("Grenade", transform.position, Quaternion.identity);
-            EventManager.TriggerEvent("ShootGrenade", grenadeSpeed * transform.forward);
+            isShootingGrenade = false;
         }
 
         public void FreezeEnemies()
-- 
GitLab