using System; // require keep for Windows Universal App using UnityEngine; namespace UniRx.Triggers { [DisallowMultipleComponent] public class ObservableTrigger2DTrigger : ObservableTriggerBase { Subject onTriggerEnter2D; /// Sent when another object enters a trigger collider attached to this object (2D physics only). void OnTriggerEnter2D(Collider2D other) { if (onTriggerEnter2D != null) onTriggerEnter2D.OnNext(other); } /// Sent when another object enters a trigger collider attached to this object (2D physics only). public IObservable OnTriggerEnter2DAsObservable() { return onTriggerEnter2D ?? (onTriggerEnter2D = new Subject()); } Subject onTriggerExit2D; /// Sent when another object leaves a trigger collider attached to this object (2D physics only). void OnTriggerExit2D(Collider2D other) { if (onTriggerExit2D != null) onTriggerExit2D.OnNext(other); } /// Sent when another object leaves a trigger collider attached to this object (2D physics only). public IObservable OnTriggerExit2DAsObservable() { return onTriggerExit2D ?? (onTriggerExit2D = new Subject()); } Subject onTriggerStay2D; /// Sent each frame where another object is within a trigger collider attached to this object (2D physics only). void OnTriggerStay2D(Collider2D other) { if (onTriggerStay2D != null) onTriggerStay2D.OnNext(other); } /// Sent each frame where another object is within a trigger collider attached to this object (2D physics only). public IObservable OnTriggerStay2DAsObservable() { return onTriggerStay2D ?? (onTriggerStay2D = new Subject()); } protected override void RaiseOnCompletedOnDestroy() { if (onTriggerEnter2D != null) { onTriggerEnter2D.OnCompleted(); } if (onTriggerExit2D != null) { onTriggerExit2D.OnCompleted(); } if (onTriggerStay2D != null) { onTriggerStay2D.OnCompleted(); } } } }