示例#1
0
 internal Coroutine(Processor proc)
 {
     Type        = CoroutineType.Coroutine;
     m_Processor = proc;
     m_Processor.AssociatedCoroutine = this;
     OwnerScript = proc.GetScript();
 }
示例#2
0
        internal void MarkClrCallbackAsDead()
        {
            if (Type != CoroutineType.ClrCallback)
            {
                throw new InvalidOperationException("State must be CoroutineType.ClrCallback");
            }

            Type = CoroutineType.ClrCallbackDead;
        }
示例#3
0
 public ReCoroutine(IEnumerator <float> e, CoroutineType type)
 {
     this.e             = e;
     this.coroutineType = type;
     this.currentTime   = 0;
     this.untilTime     = 0;
     this.isDone        = false;
     this.id            = currentId++;
 }
示例#4
0
        private ReCoroutine _AddCoroutine(IEnumerator <float> e, CoroutineType type = CoroutineType.Update)
        {
            var cor = new ReCoroutine(e, type);

            if (type == CoroutineType.Update)
            {
                updateIEnumeratorList.Add(cor);
            }
            else if (type == CoroutineType.LateUpdate)
            {
                lateUpdateIEnumeratorList.Add(cor);
            }
            else if (type == CoroutineType.FixedUpdate)
            {
                fixedUpdateIEnumeratorList.Add(cor);
            }

            return(cor);
        }
示例#5
0
        /// <summary>
        ///  获得等待类型
        /// </summary>
        /// <param name="coroutineType"></param>
        /// <param name="time"></param>
        /// <returns></returns>
        public static IEnumerator GetIEnumerator(CoroutineType coroutineType, float time)
        {
            switch (coroutineType)
            {
            case CoroutineType.WaitForEndOfFrame:
                yield return(WaitForEndOfFrame);

                break;

            case CoroutineType.WaitForFixedUpdate:
                yield return(WaitForFixedUpdate);

                break;

            case CoroutineType.WaitForSeconds:
                yield return(new WaitForSeconds(time));

                break;

            case CoroutineType.WaitFrame:
                if (time == 0)
                {
                    time = 1;
                }
                for (float i = time; i > 0; i--)
                {
                    yield return(null);
                }
                break;

            case CoroutineType.WaitNull:
                break;

            default:
                break;
            }
        }
示例#6
0
 /// <summary>
 /// 添加新协程
 /// </summary>
 /// <param name="e"></param>
 /// <param name="type"></param>
 /// <returns></returns>
 public static ReCoroutine AddCoroutine(IEnumerator <float> e, CoroutineType type = CoroutineType.Update)
 {
     return(Instance._AddCoroutine(e, type));
 }
示例#7
0
 internal Coroutine(CallbackFunction function)
 {
     Type          = CoroutineType.ClrCallback;
     m_ClrCallback = function;
     OwnerScript   = null;
 }
示例#8
0
    IEnumerator Coroutine(Func <bool> condition, Action action, Action cleanup, float deltaTime, CoroutineType type)
    {
        while (condition())
        {
            action();

            if (type == CoroutineType.REAL_TIME)
            {
                yield return(new WaitForSecondsRealtime(deltaTime));
            }
            else if (type == CoroutineType.SCALED_TIME)
            {
                yield return(new WaitForSeconds(deltaTime));
            }
        }
        cleanup();
    }
示例#9
0
 internal Coroutine(Processor proc)
 {
     Type        = CoroutineType.Coroutine;
     m_Processor = proc;
     m_Processor.AssociatedCoroutine = this;
 }
示例#10
0
 internal Coroutine(CallbackFunction function)
 {
     Type          = CoroutineType.ClrCallback;
     m_ClrCallback = function;
 }
示例#11
0
        private IEnumerator StartCoroutineFunction(CoroutineType coroutineType, float time, Action callback)
        {
            yield return(GetIEnumerator(coroutineType, time));

            callback();
        }
示例#12
0
 /// <summary>
 ///  开启单个协程
 /// </summary>
 /// <param name="coroutineType"></param>
 /// <param name="time"></param>
 /// <param name="callback"></param>
 public static void StartSingleCoroutine(CoroutineType coroutineType, float time, Action callback)
 {
     Instance.StartCoroutine(Instance.StartCoroutineFunction(coroutineType, time, callback));
 }
示例#13
0
 public SingleCoroutine(CoroutineType coroutineType, float time, Action action)
 {
     this.action = action;
     this.daly   = GameTimer.GetIEnumerator(coroutineType, time);
 }
示例#14
0
 internal DynValue Recycle(Processor mainProcessor, Closure closure)
 {
     Type = CoroutineType.Recycled;
     return(m_Processor.Coroutine_Recycle(mainProcessor, closure));
 }