BITKit/Packages/Runtime/Sensor/TriggerSensor.cs

48 lines
1.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
namespace BITKit.Sensors
{
public class TriggerSensor : MonoBehaviour
{
[Header(Constant.Header.Events)]
public UnityEvent<Collider> onDetected = new();
public UnityEvent<Collider> onLost = new();
[Header(Constant.Header.InternalVariables)]
List<Collider> _detected = new();
void OnTriggerEnter(Collider collider)
{
if (IsValid(collider))
{
_detected.Add(collider);
onDetected.Invoke(collider);
}
}
void OnTriggerExit(Collider collider)
{
if (_detected.TryRemove(collider))
{
onLost.Invoke(collider);
};
}
void OnCollisionEnter(Collision collision)
{
var collider = collision.collider;
if (IsValid(collider))
{
_detected.Add(collider);
onDetected.Invoke(collider);
}
}
void OnCollisionStay(Collision collision)
{
var collider = collision.collider;
if (_detected.TryRemove(collider))
{
onLost.Invoke(collider);
};
}
bool IsValid(Component self)=>true;
}
}