using UnityEngine; using UnityEngine.UI; using TMPro; /// /// Manages the death screen UI display and respawn button /// public class DeathScreenUI : MonoBehaviour { public static DeathScreenUI Instance { get; private set; } [Header("UI References")] public GameObject deathPanel; public TextMeshProUGUI deathMessageText; public Button respawnButton; public CanvasGroup canvasGroup; [Header("Messages")] public string[] deathMessages = new string[] { "Your party has been defeated...", "Darkness consumes your party...", "The dungeon claims another group of heroes...", "Your quest has come to a tragic end..." }; [Header("Animation Settings")] public float fadeInDuration = 1f; public bool randomizeMessage = true; private void Awake() { if (Instance != null && Instance != this) { Destroy(gameObject); return; } Instance = this; // Ensure we start hidden if (deathPanel != null) deathPanel.SetActive(false); if (canvasGroup != null) canvasGroup.alpha = 0f; } private void Start() { // Ensure we have required references if (deathPanel == null) { Debug.LogWarning("[DeathScreenUI] Death Panel not assigned! Please assign UI elements in Inspector."); } // Bind respawn button if (respawnButton != null) { respawnButton.onClick.AddListener(OnRespawnButtonClicked); } else { Debug.LogWarning("[DeathScreenUI] Respawn Button not assigned!"); } } /// /// Show the death screen /// public void Show() { if (deathPanel != null) deathPanel.SetActive(true); // Set random death message if (deathMessageText != null && randomizeMessage) { string message = deathMessages[Random.Range(0, deathMessages.Length)]; deathMessageText.text = message; } // Fade in if (canvasGroup != null) { StartCoroutine(FadeIn()); } Debug.Log("[DeathScreenUI] Death screen shown"); } /// /// Hide the death screen /// public void Hide() { if (canvasGroup != null) { canvasGroup.alpha = 0f; } if (deathPanel != null) deathPanel.SetActive(false); Debug.Log("[DeathScreenUI] Death screen hidden"); } private System.Collections.IEnumerator FadeIn() { float elapsed = 0f; while (elapsed < fadeInDuration) { elapsed += Time.deltaTime; canvasGroup.alpha = Mathf.Lerp(0f, 1f, elapsed / fadeInDuration); yield return null; } canvasGroup.alpha = 1f; } private void OnRespawnButtonClicked() { Debug.Log("[DeathScreenUI] Respawn button clicked"); if (GameManager.Instance != null) { GameManager.Instance.RespawnParty(); } else { Debug.LogError("[DeathScreenUI] GameManager not found!"); } } }