using UnityAtoms.BaseAtoms; using UnityAtoms.Tags; using UnityEngine; using UnityEngine.Events; namespace KitsuneCafe.Event { public class EventTrigger : MonoBehaviour { [SerializeField] private UnityEvent onEnter; [SerializeField] private UnityEvent onExit; [SerializeField] private StringConstant[] tags; private bool useTags => tags.Length > 0; private bool IsValidCollision(Collider collider) { return !useTags || collider.TryGetComponent(out AtomTags tags) && HasTags(tags); } private bool HasTags(AtomTags tags) { foreach (var tag in this.tags) { if (!tags.HasTag(tag.Value)) { return false; } } return true; } private void OnTriggerEnter(Collider collider) { if (IsValidCollision(collider)) { onEnter.Invoke(); } } private void OnTriggerExit(Collider collider) { if (IsValidCollision(collider)) { onExit.Invoke(); } } } }