Exemple #1
0
        protected CoroutinueModel StartCoroutinueQueue(Func <string, System.Object, IEnumerator> action, string key, System.Object value)
        {
            CoroutinueModel cm = new CoroutinueModel();

            cm.session = session++;
            coroutinueQueue.Add(cm);
            cm.c = StartCoroutine(coroutinueQueueScheduling(action, key, value, cm));
            return(cm);
        }
Exemple #2
0
        /// <summary>
        /// 暂停队列中的某个方法
        /// </summary>
        /// <param name="routine">The routine.</param>
        protected void StopCoroutineQueue(CoroutinueModel routine)
        {
            bool b = coroutinueQueue.Remove(routine);

            if (b && routine.c != null)
            {
                StopCoroutine(routine.c);
            }
        }
Exemple #3
0
        /// <summary>
        /// 启动协程调度队列
        /// </summary>
        /// <param name="actionName">Name of the action.</param>
        /// <returns>Coroutine.</returns>
        protected CoroutinueModel StartCoroutinueQueue(Func <IEnumerator> action)
        {
            CoroutinueModel cm = new CoroutinueModel();

            cm.session = session++;
            coroutinueQueue.Add(cm);
            cm.c = StartCoroutine(coroutinueQueueScheduling(action, cm));
            return(cm);
        }
Exemple #4
0
        IEnumerator coroutinueQueueScheduling(Func <string, System.Object, IEnumerator> action, string key, System.Object value, CoroutinueModel cm)
        {
            while (true)
            {
                // 获得当前调度对象
                CoroutinueModel cmTmp = coroutinueQueue[0];
                if (cmTmp.session == cm.session)
                {
                    break;
                }
                yield return(null);
            }
            // 运行逻辑协程
            IEnumerator ie = action(key, value);

            if (ie != null)
            {
                yield return(ie);
            }
            coroutinueQueue.RemoveAt(0);
        }