From 320e58c3c36b2123f441da6f4bd3c34aa5460759 Mon Sep 17 00:00:00 2001
From: maikeljh <mjh191003@gmail.com>
Date: Fri, 10 May 2024 13:03:06 +0700
Subject: [PATCH] [Fix] Game Over After Finish Game

---
 Assets/Scripts/Managers/GameOverManager.cs |  1 +
 Assets/Scripts/Managers/LevelManager.cs    | 39 +++++++++++++++++++---
 2 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/Assets/Scripts/Managers/GameOverManager.cs b/Assets/Scripts/Managers/GameOverManager.cs
index 97acf05..37bc7de 100644
--- a/Assets/Scripts/Managers/GameOverManager.cs
+++ b/Assets/Scripts/Managers/GameOverManager.cs
@@ -58,6 +58,7 @@ namespace Nightmare
             LevelManager.Instance.Exit();
             isGameOver = false;
             statsManager.SaveStats();
+            SceneManager.LoadScene("MainMenu", LoadSceneMode.Single);
         }
 
         public void ShowGameOverButtons()
diff --git a/Assets/Scripts/Managers/LevelManager.cs b/Assets/Scripts/Managers/LevelManager.cs
index cadf0f6..fcb5fc7 100644
--- a/Assets/Scripts/Managers/LevelManager.cs
+++ b/Assets/Scripts/Managers/LevelManager.cs
@@ -608,10 +608,41 @@ namespace Nightmare
 
         public void Exit()
         {
-            currentIndex = 0;
-            currentQuest = 0;
-            ResetAtt();
-            SceneManager.LoadScene(levels[currentIndex], LoadSceneMode.Single);
+            // Kill Player
+            GameObject player = GameObject.FindGameObjectWithTag("Player");
+            PlayerHealth health = player.GetComponent<PlayerHealth>();
+            health.currentHealth = 0;
+            health.Death();
+
+            Scene currentLevel = SceneManager.GetSceneAt(0);
+            for (int i = 0; i < SceneManager.sceneCount; i++)
+            {
+                Scene scene = SceneManager.GetSceneAt(i);
+                if (!scene.name.StartsWith("Cutscene"))
+                {
+                    currentLevel = scene;
+                }
+                else if (SceneManager.sceneCount > 1)
+                {
+                    SceneManager.UnloadSceneAsync(scene);
+                }
+            }
+
+            var audioSources = new List<AudioSource>();
+
+            foreach (var root in currentLevel.GetRootGameObjects())
+            {
+                audioSources.AddRange(root.GetComponentsInChildren<AudioSource>(true));
+            }
+
+            foreach (var source in audioSources)
+            {
+                source.mute = false;
+            }
+
+            isCinematic = false;
+
+            EventManager.TriggerEvent("GameOver");
         }
 
         public void ResetLevel()
-- 
GitLab