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!");
}
}
}