using System; // require keep for Windows Universal App using UnityEngine; namespace UniRx.Triggers { [DisallowMultipleComponent] public class ObservableParticleTrigger : ObservableTriggerBase { Subject onParticleCollision; #if UNITY_5_4_OR_NEWER Subject onParticleTrigger; #endif /// OnParticleCollision is called when a particle hits a collider. void OnParticleCollision(GameObject other) { if (onParticleCollision != null) onParticleCollision.OnNext(other); } /// OnParticleCollision is called when a particle hits a collider. public IObservable OnParticleCollisionAsObservable() { return onParticleCollision ?? (onParticleCollision = new Subject()); } #if UNITY_5_4_OR_NEWER /// OnParticleTrigger is called when any particles in a particle system meet the conditions in the trigger module. void OnParticleTrigger() { if (onParticleTrigger != null) onParticleTrigger.OnNext(Unit.Default); } /// OnParticleTrigger is called when any particles in a particle system meet the conditions in the trigger module. public IObservable OnParticleTriggerAsObservable() { return onParticleTrigger ?? (onParticleTrigger = new Subject()); } #endif protected override void RaiseOnCompletedOnDestroy() { if (onParticleCollision != null) { onParticleCollision.OnCompleted(); } #if UNITY_5_4_OR_NEWER if (onParticleTrigger != null) { onParticleTrigger.OnCompleted(); } #endif } } }