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(); if (_player != null) { isPlayerInside = true; OnPlayerEnter(_player.gameObject); } } void OnTriggerExit2D(Collider2D other) { if (!sensorEnabled) { return; } if(!isPlayerInside){ return; } var p = other.gameObject.GetComponent(); if (_player == p) { isPlayerInside = false; OnPlayerExit(_player.gameObject); _player = null; } } }