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.3 KiB
67 lines
2.3 KiB
11 months ago
|
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();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|