using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Tilemaps; using UnityEngine.SceneManagement; using TMPro; using Unity.VisualScripting; public static class WorldProgress { public static bool[] levelsCompleted = new bool[8]; } public class GameController : MonoBehaviour { int progressAmount; public Slider progressBar; public GameObject player; public List levels; public GameObject LoadCanvas; public GameObject gameOverScreen; public TMP_Text survivedText; public static event Action OnReset; void Start() { Time.timeScale = 1; progressAmount = 0; progressBar.value = 0; Gem.OnGemCollected -= UpdateProgress; Gem.OnGemCollected += UpdateProgress; PlayerHealth.OnPlayerDied -= GameOverScreen; PlayerHealth.OnPlayerDied += GameOverScreen; LoadCanvas.SetActive(false); gameOverScreen.SetActive(false); } void Update() { if (Input.GetKeyDown(KeyCode.Escape)) { for (int i = 0; i < WorldProgress.levelsCompleted.Length; i++) { WorldProgress.levelsCompleted[i] = false; } SceneManager.LoadScene("StartScene"); } } void GameOverScreen() { gameOverScreen.SetActive(true); MusicManager.PauseBackgroundMusic(); Time.timeScale = 0; // Pause the game } public void ResetGame() { for (int i = 0; i < WorldProgress.levelsCompleted.Length; i++) { WorldProgress.levelsCompleted[i] = false; } // Destroy all health items in the scene foreach (var item in GameObject.FindGameObjectsWithTag("HealthItem")) { Destroy(item); } Debug.Log("ResetGame called"); gameOverScreen.SetActive(false); MusicManager.PlayBackgroundMusic(true); // Reset player health and UI var newHealthUI = FindFirstObjectByType(); player.GetComponent().ReassignHealthUI(newHealthUI); if (newHealthUI != null) player.GetComponent().ResetHealth(); // Reset player velocity to prevent stored momentum var rb = player.GetComponent(); if (rb != null) rb.linearVelocity = Vector2.zero; // Reset player color to white var sr = player.GetComponent(); if (sr != null) sr.color = Color.white; Time.timeScale = 1; // Resume the game HubReturnData.lastDoorIndex = -1; // Teleport to hub scene SceneManager.LoadScene("HubScene"); player.transform.position = new Vector3(-1.5f, -2.5f, 0); } void UpdateProgress(int value) { progressAmount += value; if (progressBar != null) progressBar.value = progressAmount; if (progressAmount >= 100) { // Level complete, load next if (LoadCanvas != null) LoadCanvas.SetActive(true); Debug.Log("Level complete"); } else { Debug.Log($"Current progress: {progressAmount}"); } } void OnDestroy() { Gem.OnGemCollected -= UpdateProgress; PlayerHealth.OnPlayerDied -= GameOverScreen; } }