Beispiel #1
0
 /// Creates a new Task object for the given coroutine.
 ///
 /// If autoStart is true (default) the task is automatically started
 /// upon construction.
 public Task(IEnumerator c, bool autoStart = true)
 {
     task = TaskManager.CreateTask(c);
     task.Finished += TaskFinished;
     if(autoStart)
         Start();
 }
 /// Don't use this, use Task.Get instead to be able get from
 /// unused task, Preveting futher GC Allocates
 public Task(IEnumerator c, bool autoStart = true)
 {
     task           = TaskManager.CreateTask(c);
     task.Finished += TaskFinished;
     if (autoStart)
     {
         Start();
     }
 }
        public void StartStory()
        {
            _storyGraph.ConnectStoryElements();
            _currentElement = _storyGraph.GetRootStory()[0];

            _currentTask           = TaskManager.CreateTask(_currentElement.Execute(_manager, _canvas));
            _currentTask.Finished += AdvanceStory;

            _currentTask.Start();
        }
        public void AdvanceStory(bool manual)
        {
            if (!manual && !_handlingSubgraph)
            {
                if (_currentElement.Next != null && _currentTask != null && !_currentTask.Running)
                {
                    _currentElement = _currentElement.Next;

                    _currentTask           = TaskManager.CreateTask(_currentElement.Execute(_manager, _canvas));
                    _currentTask.Finished += AdvanceStory;
                    _currentTask.Start();
                }
                else
                {
                    _afterSubgraphHandler?.Invoke();
                }
            }
        }
        public void AdvanceStory(StoryElement newStoryPoint, bool continueToRun = false)
        {
            if (_handlingSubgraph)
            {
                _subgraphHandler.AdvanceStory(false);
            }
            else if (newStoryPoint != null)
            {
                if (!continueToRun)
                {
                    _currentTask.Stop();
                }

                _currentElement = newStoryPoint;

                _currentTask           = TaskManager.CreateTask(_currentElement.Execute(_manager, _canvas));
                _currentTask.Finished += AdvanceStory;
                _currentTask.Start();
            }
            else
            {
                _afterSubgraphHandler?.Invoke();
            }
        }
Beispiel #6
0
 /// <summary>
 /// 恢复任务状态
 /// </summary>
 /// <param name="state"></param>
 public virtual void Recovery(TaskManager.TaskState state)
 {
     intHeap   = state.completed;
     totalHeap = state.total;
 }