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.1 KiB
67 lines
2.1 KiB
using System; // require keep for Windows Universal App |
|
using UnityEngine; |
|
|
|
namespace UniRx.Triggers |
|
{ |
|
[DisallowMultipleComponent] |
|
public class ObservableDestroyTrigger : MonoBehaviour |
|
{ |
|
bool calledDestroy = false; |
|
Subject<Unit> onDestroy; |
|
CompositeDisposable disposablesOnDestroy; |
|
|
|
[Obsolete("Internal Use.")] |
|
internal bool IsMonitoredActivate { get; set; } |
|
|
|
public bool IsActivated { get; private set; } |
|
|
|
/// <summary> |
|
/// Check called OnDestroy. |
|
/// This property does not guarantees GameObject was destroyed, |
|
/// when gameObject is deactive, does not raise OnDestroy. |
|
/// </summary> |
|
public bool IsCalledOnDestroy { get { return calledDestroy; } } |
|
|
|
void Awake() |
|
{ |
|
IsActivated = true; |
|
} |
|
|
|
/// <summary>This function is called when the MonoBehaviour will be destroyed.</summary> |
|
void OnDestroy() |
|
{ |
|
if (!calledDestroy) |
|
{ |
|
calledDestroy = true; |
|
if (disposablesOnDestroy != null) disposablesOnDestroy.Dispose(); |
|
if (onDestroy != null) { onDestroy.OnNext(Unit.Default); onDestroy.OnCompleted(); } |
|
} |
|
} |
|
|
|
/// <summary>This function is called when the MonoBehaviour will be destroyed.</summary> |
|
public IObservable<Unit> OnDestroyAsObservable() |
|
{ |
|
if (this == null) return Observable.Return(Unit.Default); |
|
if (calledDestroy) return Observable.Return(Unit.Default); |
|
return onDestroy ?? (onDestroy = new Subject<Unit>()); |
|
} |
|
|
|
/// <summary>Invoke OnDestroy, this method is used on internal.</summary> |
|
public void ForceRaiseOnDestroy() |
|
{ |
|
OnDestroy(); |
|
} |
|
|
|
public void AddDisposableOnDestroy(IDisposable disposable) |
|
{ |
|
if (calledDestroy) |
|
{ |
|
disposable.Dispose(); |
|
return; |
|
} |
|
|
|
if (disposablesOnDestroy == null) disposablesOnDestroy = new CompositeDisposable(); |
|
disposablesOnDestroy.Add(disposable); |
|
} |
|
} |
|
} |