Files

89 lines
1.6 KiB
C#
Raw Permalink Normal View History

2025-05-13 05:19:58 +03:00
using UnityEngine;
using System.Collections;
public delegate void PlayerSensorDelegate(PlayerSensor senso, GameObject player);
public class PlayerSensor : Predicate {
#region implemented abstract members of Predicate
protected override bool CheckInternal ()
{
return isPlayerInside;
}
protected override bool CheckInternal (object param)
{
return Check();
}
#endregion
public bool sensorEnabled = true;
private bool isPlayerInside;
public event PlayerSensorDelegate PlayerEnter;
private PlayerController _player;
public PlayerController Player {
get { return _player; }
}
protected virtual void OnPlayerEnter (GameObject player)
{
var handler = PlayerEnter;
if (handler != null)
handler (this, player);
}
public event PlayerSensorDelegate PlayerExit;
protected virtual void OnPlayerExit (GameObject player)
{
var handler = PlayerExit;
if (handler != null)
handler (this, player);
}
void OnTriggerEnter2D(Collider2D other) {
if (!sensorEnabled) {
return;
}
if(isPlayerInside){
return;
}
_player = other.gameObject.GetComponent<PlayerController>();
if (_player != null) {
isPlayerInside = true;
OnPlayerEnter(_player.gameObject);
}
}
void OnTriggerExit2D(Collider2D other) {
if (!sensorEnabled) {
return;
}
if(!isPlayerInside){
return;
}
var p = other.gameObject.GetComponent<PlayerController>();
if (_player == p) {
isPlayerInside = false;
OnPlayerExit(_player.gameObject);
_player = null;
}
}
}