public void UpdateMove() { if (CoroutineFunc.MoveNext()) { object yieldVal = CoroutineFunc.Current; if (yieldVal is YieldInstruction) // Unity Coroutine { CFiber.Instance.StartCoroutine(CFiber.Instance._HandleUnityYieldInstruction(CoroutineId, this, yieldVal as YieldInstruction)); } if (yieldVal is Coroutine) // StartCoroutine(xxx) { CFiber.Instance.StartCoroutine(CFiber.Instance._HandleUnityCoroutine(this, yieldVal as Coroutine)); } else if (yieldVal is CFiberBase) { CFiberBase customRoutine = yieldVal as CFiberBase; CFiber.Instance.PlayCoroutine(CFiber.Instance._HandleCustomRoutine(CoroutineId, this, customRoutine)); }// else do nothing // TODO: WWW, WaitForxxx, execute once at create } else { CFiber.Instance.DeleteQueue.Enqueue(this); } }
IEnumerator _HandleCustomRoutine(int coId, CCoroutineWrapper coWrapper, CFiberBase wait) { coWrapper.Suspend = true; _NewCoroutine(wait.DoRun()); // var co = while (!wait.IsFinish) { yield return(null); } coWrapper.Suspend = false; }
private IEnumerator _HandleCustomRoutine(int coId, CCoroutineWrapper coWrapper, CFiberBase wait) { coWrapper.Suspend = true; _NewCoroutine(wait.DoRun()); // var co = while (!wait.IsFinish) yield return null; coWrapper.Suspend = false; }