public void Update(double dt) { foreach (var elem in m_callStack) { elem.Task.Update(dt); } if (m_callStack.Count() != 0) { int lastIndex = m_callStack.Count() - 1; _StackData lastElem = m_callStack[lastIndex]; if (lastElem.Process.MoveNext()) { // has next element CoroutineTask newTask = lastElem.Process.Current; if (newTask != null) { // stack new sub-coroutine m_callStack.Add(new _StackData() { Process = newTask.Execute(), Task = newTask }); } } else { // finish current coroutine m_callStack.RemoveAt(lastIndex); } } }
public void Start(CoroutineTask task) { Stop(); m_callStack.Add(new _StackData() { Process = task.Execute(), Task = task }); }