/// <summary> /// Перед запуском корутины останавливает её, если она выполнялась на данный момент. /// </summary> /// <param name="enumerator">IEnumerator для выполнения</param> /// <returns></returns> public void ReStartCoroutineExecution(ICoroutineContainer coroutineInfo, IEnumerator enumerator) { if (enumerator == null) { throw new ArgumentNullException(nameof(enumerator)); } CoroutineWithData coroutineWithData = (CoroutineWithData)coroutineInfo; coroutineWithData.SetEnumerator(enumerator); if (coroutineInfo.IsExecuting) { BreakCoroutine(coroutineInfo); } StartNewCoroutine(coroutineWithData); }
/// <summary> /// Запускает корутину в том случае, если она НЕ выполняется в данный момент. /// </summary> /// <param name="enumerator">IEnumerator для выполнения</param> /// <returns></returns> public void ExecuteCoroutineContinuously(ICoroutineContainer coroutineInfo, IEnumerator enumerator) { if (coroutineInfo == null) { throw new ArgumentNullException(nameof(coroutineInfo)); } if (enumerator == null) { throw new ArgumentNullException(nameof(enumerator)); } CoroutineWithData coroutineWithData = (CoroutineWithData)coroutineInfo; coroutineWithData.SetEnumerator(enumerator); if (!coroutineWithData.IsExecuting) { StartNewCoroutine(coroutineWithData); } else { coroutineWithData.OnCoroutineAlreadyStarted?.Invoke(); } }