using MontanaJohns.Actors; using System.Collections; using UnityEngine; public class TrapDamage : MonoBehaviour { [SerializeField] protected int damage; [Header("TrapDamage")] [SerializeField] protected float stayDamageDelay; protected bool stay; protected Hashtable justEntered = new Hashtable(); protected void OnTriggerEnter2D(Collider2D collision) { if (justEntered.Contains(collision.gameObject)) justEntered[collision.gameObject] = true; else justEntered.Add(collision.gameObject, true); DealDamage(collision); } protected void OnTriggerStay2D(Collider2D collision) { if (!stay) { StartCoroutine(StayDamage(collision)); } } protected void OnTriggerExit2D(Collider2D collision) { justEntered[collision.gameObject] = false; } protected IEnumerator StayDamage(Collider2D collision) { stay = true; if (justEntered.Contains(collision.gameObject) && justEntered[collision.gameObject].Equals(true)) justEntered[collision.gameObject] = false; else if (justEntered.Contains(collision.gameObject)) DealDamage(collision); yield return new WaitForSeconds(stayDamageDelay); stay = false; } protected void DealDamage(Collider2D collision) { if (collision.tag == "Player" || collision.tag == "Enemy") { collision.GetComponent().TakeDamage(damage); } } }