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