68 lines
1.9 KiB
C#
68 lines
1.9 KiB
C#
|
|
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<Collider>().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<EnemyController>(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);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|