using System; using System.Collections; using UnityEngine; public static class StaticCoroutine { public static void Start(ref Coroutine coroutine, IEnumerator iEnumerator, Action onCompleted = null) { if (coroutine != null) { Debug.LogWarning($"{nameof(coroutine)} is already working. Overriding it."); Static.MonoBehaviour.StopCoroutine(coroutine); coroutine = null; } if (onCompleted == null) { coroutine = Static.MonoBehaviour.StartCoroutine(iEnumerator); } else { coroutine = Static.MonoBehaviour.StartCoroutine(WrapperCoroutine(iEnumerator, onCompleted)); } } private static IEnumerator WrapperCoroutine(IEnumerator iEnumerator, Action onCompleted) { yield return iEnumerator; onCompleted?.Invoke(); } public static void Stop(ref Coroutine coroutine) { if (coroutine == null) { Debug.LogWarning("Trying to stop a null reference"); return; } Static.MonoBehaviour.StopCoroutine(coroutine); coroutine = null; } public static void StopAllCoroutines() { Static.MonoBehaviour.StopAllCoroutines(); } }