/// <summary> /// Manually step the coroutine. This is usually done from within a Update event. /// </summary> /// <param name="handle">A MonoBehaviour to use as a handle if a YieldInstruction is to be operated on.</param> /// <returns></returns> public bool ManualTick(MonoBehaviour handle) { if (_owner != null) throw new System.InvalidOperationException("Can not manually operate a RadicalCoroutine that is already being operated on."); if (handle == null) throw new System.ArgumentNullException("handle"); if ((this as IEnumerator).MoveNext()) { var current = _currentIEnumeratorYieldValue; _currentIEnumeratorYieldValue = null; if (current is YieldInstruction || current is WWW) { var wait = new ManualWaitForGeneric(this, handle, current); _stack.Push(wait); wait.Start(); } return true; } else { return false; } }
/// <summary> /// Manually step the coroutine. This is usually done from within a Update event. /// </summary> /// <param name="handle">A MonoBehaviour to use as a handle if a YieldInstruction is to be operated on.</param> /// <returns></returns> public bool ManualTick(MonoBehaviour handle) { if (_owner != null || _state != RadicalCoroutineOperatingState.Inactive) throw new System.InvalidOperationException("Can not manually operate a RadicalCoroutine that is already being operating."); if (handle == null) throw new System.ArgumentNullException("handle"); _state = RadicalCoroutineOperatingState.Active; bool result = (this as IEnumerator).MoveNext(); if (_state == RadicalCoroutineOperatingState.Active) _state = RadicalCoroutineOperatingState.Inactive; if (result) { var current = _currentIEnumeratorYieldValue; _currentIEnumeratorYieldValue = null; if (current is YieldInstruction || current is WWW) { var wait = new ManualWaitForGeneric(this, handle, current); _stack.Push(wait); wait.Start(); } } return result; }