89 lines
1.6 KiB
C#
89 lines
1.6 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|