*
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user