using System; using System.Collections; using UnityEngine; public class PlayerHealth : MonoBehaviour { public int maxHealth = 5; private int currentHealth; public HealthUI healthUI; private SpriteRenderer spriteRenderer; public static event Action OnPlayerDied; private bool isInvulnerable = false; void Start() { ResetHealth(); spriteRenderer = GetComponent(); GameController.OnReset += ResetHealth; HealthItem.OnHealthItemCollected += Heal; } void OnTriggerEnter2D(Collider2D collision) { Enemy enemy = collision.GetComponent(); if (enemy) { TakeDamage(enemy.damage); SoundEffectManager.Play("PlayerHit"); } Trap trap = collision.GetComponent(); if (trap) { int trapDamage = Mathf.RoundToInt(trap.damage); if (trapDamage > 0) { TakeDamage(trapDamage); SoundEffectManager.Play("PlayerHit"); } } } private IEnumerator InvulnerabilityCoroutine() { isInvulnerable = true; yield return new WaitForSeconds(0.3f); isInvulnerable = false; } public void Heal(int amount) { currentHealth = Mathf.Min(currentHealth + amount, maxHealth); if (healthUI != null) healthUI.UpdateHearts(currentHealth); } private void TakeDamage(int damage) { if (isInvulnerable) return; currentHealth -= damage; healthUI.UpdateHearts(currentHealth); StartCoroutine(FlashRed()); StartCoroutine(InvulnerabilityCoroutine()); if (currentHealth <= 0) { OnPlayerDied?.Invoke(); } } private IEnumerator FlashRed() { spriteRenderer.color = Color.red; yield return new WaitForSeconds(0.2f); spriteRenderer.color = Color.white; } public void ResetHealth() { currentHealth = maxHealth; if (healthUI != null) healthUI.SetMaxHearts(maxHealth); } public void ReassignHealthUI(HealthUI newHealthUI) { healthUI = newHealthUI; } }