48 lines
1.3 KiB
C#
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;
|
|
}
|
|
} |