public void Pause() { if (_state == CustomCoroutineState.Running) { _state = CustomCoroutineState.Pause; } }
public void Resume() { if (_state == CustomCoroutineState.Pause) { _state = CustomCoroutineState.Running; } }
public IEnumerator Start() { if (_state != CustomCoroutineState.Ready) { throw new System.InvalidOperationException("Unable to start coroutine in state: " + _state); } CustomCoroutineManager.Instance.AddCoroutine(this); _state = CustomCoroutineState.Running; do { try { if (!_routine.MoveNext()) { _state = CustomCoroutineState.Finished; break; } } catch (System.Exception ex) { Debug.LogError("Exception in coroutine: " + _routine + " " + ex.Message); _state = CustomCoroutineState.Finished; break; } yield return(_routine.Current); while (_state == CustomCoroutineState.Pause) { yield return(null); } }while (_state == CustomCoroutineState.Running); _state = CustomCoroutineState.Finished; if (onFinish != null) { onFinish(this); } CustomCoroutineManager.Instance.RemoveCoroutine(this); }
public void Stop() { _state = CustomCoroutineState.Finished; }
public CustomCoroutine(IEnumerator routine) { _routine = routine; _state = CustomCoroutineState.Ready; }