canto/Assets/Scripts/Event/EventTrigger.cs
2025-10-02 15:28:03 -04:00

55 lines
1.2 KiB
C#

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();
}
}
}
}