initial commit
This commit is contained in:
67
Assets/Scripts/HazardZone.cs
Normal file
67
Assets/Scripts/HazardZone.cs
Normal file
@@ -0,0 +1,67 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user