using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class PlayerLives : MonoBehaviour { public int maxLives = 3; private int currentLives; public Transform respawnPoint; // Assign checkpoint transform in Inspector public Image[] heartImages; // Assign heart UI Images in Inspector public Color fullHeartColor = Color.white; public Color emptyHeartColor = new Color(1, 1, 1, 0.3f); // faded/dimmed heart color public GameObject retryPanel; // Assign your RetryPanel GameObject in Inspector void Start() { currentLives = maxLives; UpdateUI(); retryPanel.SetActive(false); // Make sure Retry panel is hidden at start Time.timeScale = 1f; // Ensure game is running normally at start } public void TakeDamage() { currentLives--; if (currentLives > 0) { // Respawn player at checkpoint position transform.position = respawnPoint.position; // Reset all enemies to their starting positions EnemyMove[] enemies = FindObjectsByType(FindObjectsSortMode.None); foreach (EnemyMove enemy in enemies) { enemy.ResetPosition(); } } else { // Out of lives — show Retry UI instead of reloading immediately retryPanel.SetActive(true); // Pause the game Time.timeScale = 0f; } UpdateUI(); } void UpdateUI() { // Update heart images color based on current lives for (int i = 0; i < heartImages.Length; i++) { if (i < currentLives) heartImages[i].color = fullHeartColor; // Full heart else heartImages[i].color = emptyHeartColor; // Dimmed heart } } // Called by Retry button in UI public void Retry() { Time.timeScale = 1f; // Resume game time SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); } }