public void Stop() { if (state == OperationQueueState.Stopped) { return; } _operations.Clear(); _operationRunner.StopCoroutine(_operationRoutine); state = OperationQueueState.Stopped; OnStop(); }
public void Start(MonoBehaviour operationRunner) { if (state == OperationQueueState.Playing) { return; } state = OperationQueueState.Playing; OnStart(); _operationRunner = operationRunner; _operationRoutine = _operationRunner.StartCoroutine(RoutineRunOperationQueue()); }
private IEnumerator RoutineRunOperationQueue() { while (_operations.Count != 0) { if (state == OperationQueueState.Paused) { yield return(null); } object operation = _operations.Dequeue(); Action action = operation as Action; if (action != null) { action(); yield return(null); continue; } IEnumerator enumerator = operation as IEnumerator; if (enumerator != null) { yield return(_operationRunner.StartCoroutine(enumerator)); continue; } YieldInstruction yieldInstruction = operation as YieldInstruction; if (yieldInstruction != null) { yield return(yieldInstruction); continue; } Coroutine coroutine = operation as Coroutine; if (coroutine != null) { yield return(coroutine); continue; } } state = OperationQueueState.Finished; OnFinish(); }
public void Pause() { state = OperationQueueState.Paused; OnPause(); }
public void Resume() { state = OperationQueueState.Playing; OnResume(); }