using System; // require keep for Windows Universal App using UnityEngine; namespace UniRx.Triggers { [DisallowMultipleComponent] public class ObservableTriggerTrigger : ObservableTriggerBase { Subject onTriggerEnter; /// OnTriggerEnter is called when the Collider other enters the trigger. void OnTriggerEnter(Collider other) { if (onTriggerEnter != null) onTriggerEnter.OnNext(other); } /// OnTriggerEnter is called when the Collider other enters the trigger. public IObservable OnTriggerEnterAsObservable() { return onTriggerEnter ?? (onTriggerEnter = new Subject()); } Subject onTriggerExit; /// OnTriggerExit is called when the Collider other has stopped touching the trigger. void OnTriggerExit(Collider other) { if (onTriggerExit != null) onTriggerExit.OnNext(other); } /// OnTriggerExit is called when the Collider other has stopped touching the trigger. public IObservable OnTriggerExitAsObservable() { return onTriggerExit ?? (onTriggerExit = new Subject()); } Subject onTriggerStay; /// OnTriggerStay is called once per frame for every Collider other that is touching the trigger. void OnTriggerStay(Collider other) { if (onTriggerStay != null) onTriggerStay.OnNext(other); } /// OnTriggerStay is called once per frame for every Collider other that is touching the trigger. public IObservable OnTriggerStayAsObservable() { return onTriggerStay ?? (onTriggerStay = new Subject()); } protected override void RaiseOnCompletedOnDestroy() { if (onTriggerEnter != null) { onTriggerEnter.OnCompleted(); } if (onTriggerExit != null) { onTriggerExit.OnCompleted(); } if (onTriggerStay != null) { onTriggerStay.OnCompleted(); } } } }