You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.5 KiB
67 lines
2.5 KiB
using System; // require keep for Windows Universal App |
|
using UnityEngine; |
|
|
|
namespace UniRx.Triggers |
|
{ |
|
[DisallowMultipleComponent] |
|
public class ObservableCollisionTrigger : ObservableTriggerBase |
|
{ |
|
Subject<Collision> onCollisionEnter; |
|
|
|
/// <summary>OnCollisionEnter is called when this collider/rigidbody has begun touching another rigidbody/collider.</summary> |
|
void OnCollisionEnter(Collision collision) |
|
{ |
|
if (onCollisionEnter != null) onCollisionEnter.OnNext(collision); |
|
} |
|
|
|
/// <summary>OnCollisionEnter is called when this collider/rigidbody has begun touching another rigidbody/collider.</summary> |
|
public IObservable<Collision> OnCollisionEnterAsObservable() |
|
{ |
|
return onCollisionEnter ?? (onCollisionEnter = new Subject<Collision>()); |
|
} |
|
|
|
Subject<Collision> onCollisionExit; |
|
|
|
/// <summary>OnCollisionExit is called when this collider/rigidbody has stopped touching another rigidbody/collider.</summary> |
|
void OnCollisionExit(Collision collisionInfo) |
|
{ |
|
if (onCollisionExit != null) onCollisionExit.OnNext(collisionInfo); |
|
} |
|
|
|
/// <summary>OnCollisionExit is called when this collider/rigidbody has stopped touching another rigidbody/collider.</summary> |
|
public IObservable<Collision> OnCollisionExitAsObservable() |
|
{ |
|
return onCollisionExit ?? (onCollisionExit = new Subject<Collision>()); |
|
} |
|
|
|
Subject<Collision> onCollisionStay; |
|
|
|
/// <summary>OnCollisionStay is called once per frame for every collider/rigidbody that is touching rigidbody/collider.</summary> |
|
void OnCollisionStay(Collision collisionInfo) |
|
{ |
|
if (onCollisionStay != null) onCollisionStay.OnNext(collisionInfo); |
|
} |
|
|
|
/// <summary>OnCollisionStay is called once per frame for every collider/rigidbody that is touching rigidbody/collider.</summary> |
|
public IObservable<Collision> OnCollisionStayAsObservable() |
|
{ |
|
return onCollisionStay ?? (onCollisionStay = new Subject<Collision>()); |
|
} |
|
|
|
protected override void RaiseOnCompletedOnDestroy() |
|
{ |
|
if (onCollisionEnter != null) |
|
{ |
|
onCollisionEnter.OnCompleted(); |
|
} |
|
if (onCollisionExit != null) |
|
{ |
|
onCollisionExit.OnCompleted(); |
|
} |
|
if (onCollisionStay != null) |
|
{ |
|
onCollisionStay.OnCompleted(); |
|
} |
|
} |
|
} |
|
} |