public void Update() { List <int> lstNeedDelIndex = new List <int>(); for (int i = 0; i < lstRoutine.Count; ++i) { RoutineInfo item = lstRoutine[i]; if (null == item) { continue; } bool bCallMoveNext = item.objYield == null || DealWithYieldInstruction(item); if (!bCallMoveNext) { continue; } if (item.routine.MoveNext()) { SetRoutineInfo(ref item); } else { lstNeedDelIndex.Add(i); } } for (int i = lstNeedDelIndex.Count - 1; i >= 0; i--) { lstRoutine.RemoveAt(lstNeedDelIndex[i]); } }
public void SetRoutineInfo(ref RoutineInfo objRoutineInfo) { if (objRoutineInfo.routine.Current is YieldInstruction) { objRoutineInfo.objYield = objRoutineInfo.routine.Current as YieldInstruction; objRoutineInfo.objYieldInfo = new WaitForSecondsInfo(Time.timeSinceLevelLoad); } }
public bool DealWithYieldInstruction(RoutineInfo objRoutineInfo) { if (objRoutineInfo.objYield is WaitForSeconds waitForSec) { float objSpan = Time.timeSinceLevelLoad - ((WaitForSecondsInfo)objRoutineInfo.objYieldInfo).BeginTime; return(objSpan > waitForSec.Seconds); } return(true); }
public void StartCoroutine(IEnumerator routine) { if (null == routine) { return; } routine.MoveNext(); var objRoutineInfo = new RoutineInfo { routine = routine }; SetRoutineInfo(ref objRoutineInfo); lstRoutine.Add(objRoutineInfo); }