示例#1
0
        /// <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);
        }
示例#2
0
        /// <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();
            }
        }