public static IObservable <bool> EveryApplicationFocus() { return(UnityMainThreadDispatcher.OnApplicationFocusAsObservable().AsObservable()); }
/// <summary>publish OnNext(Unit) and OnCompleted() on application quit.</summary> public static IObservable <Unit> OnceApplicationQuit() { return(UnityMainThreadDispatcher.OnApplicationQuitAsObservable().Take(1)); }
/// <summary>AutoStart observable as coroutine.</summary> public static Coroutine StartAsCoroutine <T>(this IObservable <T> source, Action <T> onResult, Action <Exception> onError, CancellationToken cancel = default(CancellationToken)) { return(UnityMainThreadDispatcher.StartCoroutine(source.ToAwaitableEnumerator(onResult, onError, cancel))); }
// delay action is run in StartCoroutine // Okay to action run synchronous and guaranteed run on MainThread IEnumerator DelayAction(TimeSpan dueTime, Action action, ICancelable cancellation) { #if UNITY_EDITOR if (!ScenePlaybackDetector.IsPlaying) { var startTime = DateTimeOffset.UtcNow; while (true) { yield return(null); if (cancellation.IsDisposed) { break; } var elapsed = DateTimeOffset.UtcNow - startTime; if (elapsed >= dueTime) { UnityMainThreadDispatcher.UnsafeSend(action); break; } } ; yield break; } #endif if (dueTime == TimeSpan.Zero) { yield return(null); // not immediately, run next frame if (cancellation.IsDisposed) { yield break; } UnityMainThreadDispatcher.UnsafeSend(action); } else if (dueTime.TotalMilliseconds % 1000 == 0) { yield return(new WaitForSeconds((float)dueTime.TotalSeconds)); if (cancellation.IsDisposed) { yield break; } UnityMainThreadDispatcher.UnsafeSend(action); } else { var startTime = Time.time; var dt = (float)dueTime.TotalSeconds; while (true) { yield return(null); if (cancellation.IsDisposed) { break; } var elapsed = Time.time - startTime; if (elapsed >= dt) { UnityMainThreadDispatcher.UnsafeSend(action); break; } } } }
public MainThreadScheduler() { UnityMainThreadDispatcher.Initialize(); }
public IgnoreTimeScaleMainThreadScheduler() { UnityMainThreadDispatcher.Initialize(); }
public static Coroutine WhenAll(IEnumerable <LazyTask> tasks) { var coroutines = tasks.Select(x => x.Start()).ToArray(); return(UnityMainThreadDispatcher.StartCoroutine(WhenAllCore(coroutines))); }