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
11 months ago
|
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);
|
||
|
}
|
||
|
}
|
||
|
}
|