/// <summary> /// 初始化协程。 /// </summary> /// <param name="customCoroutineCreator">自定义协程创建器,若为空则调用全局协程</param> /// <param name="customCoroutineTeminator">自定义协程终止器,若为空则调用全局协程</param> public void Initialization(CoroutineCreator customCoroutineCreator = null, CoroutineTeminator customCoroutineTeminator = null) { mCoroutineCreator = customCoroutineCreator; mCoroutineTeminator = customCoroutineTeminator; if (mCoroutineCreator == null) { mCoroutineCreator = (enumerator) => CoroutineHelper.StartCoroutine(enumerator); } if (mCoroutineTeminator == null) { mCoroutineTeminator = (enumerator) => CoroutineHelper.StopCoroutine(enumerator); } for (int i = 0, iMax = mCoroutinesArray.Length; i < iMax; i++) { var coroutineInfo = new CoroutineInfo(); coroutineInfo.Task = new Task(); coroutineInfo.Task.Init(); coroutineInfo.Task.OnTaskFinished = DetectTaskWaitCoroutine; var coroutine = mCoroutineCreator(coroutineInfo.Task.Tick()); coroutineInfo.Coroutine = coroutine; mCoroutinesArray[i] = coroutineInfo; } mIsInitialized = true; }
/// <summary> /// 停止组内所有协程。 /// </summary> public void StopAllCoroutines() { for (int i = 0, iMax = mCoroutineList.Count; i < iMax; i++) { var coroutine = mCoroutineList[i]; CoroutineHelper.StopCoroutine(coroutine); } mCoroutineList.Clear(); }
/// <summary> /// 停止一个创建出的协程。 /// </summary> public void StopCoroutine(Coroutine routine) { mCoroutineList.Remove(routine); CoroutineHelper.StopCoroutine(routine); }