using UnityEngine; [RequireComponent(typeof(Collider))] public class HazardZone : MonoBehaviour { [Header("Hazard Properties")] [SerializeField] private bool instantKill = false; [SerializeField] private int damagePerSecond = 20; [SerializeField] private float damageTickRate = 0.5f; [SerializeField] private bool damageEnemies = true; [Header("Effects")] [SerializeField] private AudioClip burnOrPainSound; private float nextDamageTime; private void Awake() { GetComponent().isTrigger = true; } private void OnTriggerStay(Collider other) { if (Time.time < nextDamageTime) return; if (other.CompareTag("Player")) { if (PlayerHealthController.Instance != null) { if (instantKill) { PlayerHealthController.Instance.TakeDamage(PlayerHealthController.Instance.MaxHealth); } else { int damageToDeal = Mathf.RoundToInt(damagePerSecond * damageTickRate); PlayerHealthController.Instance.TakeDamage(Mathf.Max(1, damageToDeal)); } PlayPainSound(); } nextDamageTime = Time.time + damageTickRate; } else if (damageEnemies && other.TryGetComponent(out var enemy)) { if (instantKill) { enemy.TakeDamage(9999); } else { int damageToDeal = Mathf.RoundToInt(damagePerSecond * damageTickRate); enemy.TakeDamage(Mathf.Max(1, damageToDeal)); } nextDamageTime = Time.time + damageTickRate; } } private void PlayPainSound() { if (burnOrPainSound != null) { AudioSource.PlayClipAtPoint(burnOrPainSound, transform.position); } } }