示例#1
0
 public void Pause()
 {
     if (_state == CustomCoroutineState.Running)
     {
         _state = CustomCoroutineState.Pause;
     }
 }
示例#2
0
 public void Resume()
 {
     if (_state == CustomCoroutineState.Pause)
     {
         _state = CustomCoroutineState.Running;
     }
 }
示例#3
0
        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);
        }
示例#4
0
 public void Stop()
 {
     _state = CustomCoroutineState.Finished;
 }
示例#5
0
 public CustomCoroutine(IEnumerator routine)
 {
     _routine = routine;
     _state   = CustomCoroutineState.Ready;
 }