Esempio n. 1
0
 //可以删除元素的遍历
 void GoOnForeach(IEnumerator dicIter)
 {
     while (dicIter.MoveNext())
     {
         var dicIterItem = (KeyValuePair <IEnumerator, MyYieldInstruction>)dicIter.Current;
         //持续减少指令对象的剩余时间
         dicIterItem.Value.time -= Time.deltaTime;
         //时间到了
         if (dicIterItem.Value.time < 0)
         {
             //如果这个协程后面还有yield  就替换新的指令对象(用copy的方式)
             if (dicIterItem.Key.MoveNext())
             {
                 MyYieldInstruction tempOperation = null;
                 if (mIterDic.TryGetValue(dicIterItem.Key, out tempOperation))
                 {
                     tempOperation.copy((MyYieldInstruction)dicIterItem.Key.Current);
                 }
             }
             //否则 删除这个协程
             else
             {
                 var tempIterItem = dicIterItem;
                 GoOnForeach(dicIter);
                 mIterDic.Remove(tempIterItem.Key);
                 break;
             }
         }
     }
 }
Esempio n. 2
0
            //提供给外界开启协程的接口
            public IEnumerator StartCorouine(IEnumerator iter)
            {
                //先运行到第一个yield处
                iter.MoveNext();
                //得到yield 返回的 指令对象
                MyYieldInstruction operation = (MyYieldInstruction)iter.Current;

                //加入字典 进行管理
                mIterDic.Add(iter, operation);
                return(iter);
            }
Esempio n. 3
0
 //复制接口
 public void copy(MyYieldInstruction other)
 {
     time = other.time;
 }