/// <summary>
        /// Operations that happend after the cmdlet is invoked.
        /// </summary>
        protected override void EndProcessing()
        {
            try
            {
                do
                {
                    while (outputTasks.TryDequeue(out Task task))
                    {
                        task?.RunSynchronously();
                    }
                }while (!Scheduler.CheckForComplete(500, CancellationToken));

                OnTaskCompleted?.Invoke(this, EventArgs.Empty);

                if (!outputTasks.IsEmpty)
                {
                    while (outputTasks.TryDequeue(out Task task))
                    {
                        task?.RunSynchronously();
                    }
                }
            }
            finally
            {
                Scheduler?.Dispose();
            }

            base.EndProcessing();
        }
Example #2
0
        private void CheckTaskProgress()
        {
            if (CurrentProgress >= QuestData.objectiveDatas[CurrentObjective].TaskDatas[CurrentTask].Amount)
            {
                Trigger();

                QuestManager.Instance.Unsubscribe(QuestData.objectiveDatas[CurrentObjective].TaskDatas[CurrentTask], UpdateTaskProgress);

                DespawnDepencencies();

                CurrentTask++;
                CurrentProgress = 0;

                if (!CheckObjectiveProgress())
                {
                    OnTaskCompleted?.Invoke(ID);

                    QuestManager.Instance.Subscribe(QuestData.objectiveDatas[CurrentObjective].TaskDatas[CurrentTask], UpdateTaskProgress);
                }
                else
                {
                    SpawnDependencies();
                }
            }
        }
Example #3
0
    /// <summary>
    /// called when player completes the task
    /// </summary>
    protected virtual void SetComplete()
    {
        Active   = false;
        Complete = true;

        if (OnTaskCompleted != null)
        {
            OnTaskCompleted.Invoke();
        }
    }
Example #4
0
 private void AssignAwaiter(bool removeOnCompleted)
 {
     _task.GetAwaiter().OnCompleted(() =>
     {
         if (OnTaskCompleted != null)
         {
             OnTaskCompleted.Invoke(this, new TaskCompleteEventArgs <T>
             {
                 Result            = this.Task.Result,
                 Status            = this.Status,
                 TaskName          = this.TaskName,
                 RemoveOnCompleted = removeOnCompleted
             });
         }
     });
 }