use for custom a croutine for CRoutine
コード例 #1
0
        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);
            }
        }
コード例 #2
0
 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;
 }
コード例 #3
0
ファイル: CFiber.cs プロジェクト: s3chugo/KEngine
 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;
 }