Esempio n. 1
0
 private void GoStopActualRoutine(QEditorCoroutine routine)
 {
     if (coroutineDict.ContainsKey(routine.routineUniqueHash))
     {
         coroutineOwnerDict[routine.ownerUniqueHash].Remove(routine.routineUniqueHash);
         coroutineDict.Remove(routine.routineUniqueHash);
     }
 }
Esempio n. 2
0
        private static bool MoveNext(QEditorCoroutine coroutine)
        {
            if (coroutine.routine.MoveNext())
            {
                return(Process(coroutine));
            }

            return(false);
        }
Esempio n. 3
0
        private QEditorCoroutine GoStartCoroutine(IEnumerator routine, object thisReference)
        {
            if (routine == null)
            {
                Debug.LogException(new Exception("IEnumerator is null!"), null);
            }
            QEditorCoroutine coroutine = CreateCoroutine(routine, thisReference);

            GoStartCoroutine(coroutine);
            return(coroutine);
        }
Esempio n. 4
0
        private void GoStopAllCoroutines(object thisReference)
        {
            QEditorCoroutine coroutine = CreateCoroutine(null, thisReference);

            if (coroutineOwnerDict.ContainsKey(coroutine.ownerUniqueHash))
            {
                foreach (var couple in coroutineOwnerDict[coroutine.ownerUniqueHash])
                {
                    coroutineDict.Remove(couple.Value.routineUniqueHash);
                }
                coroutineOwnerDict.Remove(coroutine.ownerUniqueHash);
            }
        }
        // returns false if no next, returns true if OK
        private static bool Process(QEditorCoroutine coroutine)
        {
            object current = coroutine.routine.Current;

            if (current == null)
            {
                return(false);
            }
            else if (current is WaitForSeconds)
            {
                float seconds = float.Parse(GetInstanceField(typeof(WaitForSeconds), current, "m_Seconds").ToString());
                coroutine.currentYield = new YieldWaitForSeconds()
                {
                    timeLeft = (float)seconds
                };
            }
            else if (current is WWW)
            {
                coroutine.currentYield = new YieldWWW {
                    Www = (WWW)current
                };
            }
            else if (current is WaitForFixedUpdate)
            {
                coroutine.currentYield = new YieldDefault();
            }
            else if (current is AsyncOperation)
            {
                coroutine.currentYield = new YieldAsync {
                    asyncOperation = (AsyncOperation)current
                };
            }
            else if (current is QEditorCoroutine)
            {
                coroutine.currentYield = new YieldNestedCoroutine {
                    coroutine = (QEditorCoroutine)current
                };
            }
            else
            {
                Debug.LogException(
                    new Exception("<" + coroutine.MethodName + "> yielded an unknown or unsupported type! (" + current.GetType() + ")"),
                    null);
                coroutine.currentYield = new YieldDefault();
            }
            return(true);
        }
Esempio n. 6
0
        private void OnUpdate()
        {
            float deltaTime = (float)(DateTime.Now.Subtract(previousTimeSinceStartup).TotalMilliseconds / 1000.0f);

            previousTimeSinceStartup = DateTime.Now;
            if (coroutineDict.Count == 0)
            {
                return;
            }

            tempCoroutineList.Clear();
            foreach (var pair in coroutineDict)
            {
                tempCoroutineList.Add(pair.Value);
            }

            for (var i = tempCoroutineList.Count - 1; i >= 0; i--)
            {
                List <QEditorCoroutine> coroutines = tempCoroutineList[i];

                for (int j = coroutines.Count - 1; j >= 0; j--)
                {
                    QEditorCoroutine coroutine = coroutines[j];

                    if (!coroutine.currentYield.IsDone(deltaTime))
                    {
                        continue;
                    }

                    if (!MoveNext(coroutine))
                    {
                        coroutines.RemoveAt(j);
                        coroutine.currentYield = null;
                        coroutine.finished     = true;
                    }

                    if (coroutines.Count == 0)
                    {
                        coroutineDict.Remove(coroutine.ownerUniqueHash);
                    }
                }
            }
        }
Esempio n. 7
0
        private void GoStartCoroutine(QEditorCoroutine coroutine)
        {
            if (!coroutineDict.ContainsKey(coroutine.routineUniqueHash))
            {
                List <QEditorCoroutine> newCoroutineList = new List <QEditorCoroutine>();
                coroutineDict.Add(coroutine.routineUniqueHash, newCoroutineList);
            }
            coroutineDict[coroutine.routineUniqueHash].Add(coroutine);

            if (!coroutineOwnerDict.ContainsKey(coroutine.ownerUniqueHash))
            {
                Dictionary <string, QEditorCoroutine> newCoroutineDict = new Dictionary <string, QEditorCoroutine>();
                coroutineOwnerDict.Add(coroutine.ownerUniqueHash, newCoroutineDict);
            }

            // If the method from the same owner has been stored before, it doesn't have to be stored anymore,
            // One reference is enough in order for "StopAllCoroutines" to work
            if (!coroutineOwnerDict[coroutine.ownerUniqueHash].ContainsKey(coroutine.routineUniqueHash))
            {
                coroutineOwnerDict[coroutine.ownerUniqueHash].Add(coroutine.routineUniqueHash, coroutine);
            }

            MoveNext(coroutine);
        }