/// <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(); }
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(); } } }
/// <summary> /// called when player completes the task /// </summary> protected virtual void SetComplete() { Active = false; Complete = true; if (OnTaskCompleted != null) { OnTaskCompleted.Invoke(); } }
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 }); } }); }