using System; // require keep for Windows Universal App using UnityEngine; namespace UniRx.Triggers { [DisallowMultipleComponent] public class ObservableCollision2DTrigger : ObservableTriggerBase { Subject onCollisionEnter2D; /// Sent when an incoming collider makes contact with this object's collider (2D physics only). void OnCollisionEnter2D(Collision2D coll) { if (onCollisionEnter2D != null) onCollisionEnter2D.OnNext(coll); } /// Sent when an incoming collider makes contact with this object's collider (2D physics only). public IObservable OnCollisionEnter2DAsObservable() { return onCollisionEnter2D ?? (onCollisionEnter2D = new Subject()); } Subject onCollisionExit2D; /// Sent when a collider on another object stops touching this object's collider (2D physics only). void OnCollisionExit2D(Collision2D coll) { if (onCollisionExit2D != null) onCollisionExit2D.OnNext(coll); } /// Sent when a collider on another object stops touching this object's collider (2D physics only). public IObservable OnCollisionExit2DAsObservable() { return onCollisionExit2D ?? (onCollisionExit2D = new Subject()); } Subject onCollisionStay2D; /// Sent each frame where a collider on another object is touching this object's collider (2D physics only). void OnCollisionStay2D(Collision2D coll) { if (onCollisionStay2D != null) onCollisionStay2D.OnNext(coll); } /// Sent each frame where a collider on another object is touching this object's collider (2D physics only). public IObservable OnCollisionStay2DAsObservable() { return onCollisionStay2D ?? (onCollisionStay2D = new Subject()); } protected override void RaiseOnCompletedOnDestroy() { if (onCollisionEnter2D != null) { onCollisionEnter2D.OnCompleted(); } if (onCollisionExit2D != null) { onCollisionExit2D.OnCompleted(); } if (onCollisionStay2D != null) { onCollisionStay2D.OnCompleted(); } } } }