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