private IEnumerator ReversePreparations() { for (int i = QuestPreparations.Count - 1; i >= 0; i--) { QuestObjectivePreparer p = QuestPreparations[i]; bool prepReversed = false; if (p != null) { QuestPreparationEvent prepDecrement = () => prepReversed = true; p.OnPreparationReversed += prepDecrement; p.ReversePreparations(); yield return(new WaitUntil(() => prepReversed)); p.OnPreparationDone -= prepDecrement; } } QuestObject.OnCollect -= QuestObjectUpdate; if (OnReset != null) { OnReset(this); } }
private IEnumerator PrepareObjective() { state = QuestObjectiveState.InProgress; if (PrerequisiteObjectives.Count > 0) { //Subscribe to prerequisite completion for (int i = 0; i < PrerequisiteObjectives.Count; i++) { QuestObjective prereq = PrerequisiteObjectives[i]; yield return(new WaitUntil(() => prereq.state == QuestObjectiveState.Completed)); //prereq.OnComplete += prereqIncrement; } } for (int i = 0; i < QuestPreparations.Count; i++) { QuestObjectivePreparer p = QuestPreparations[i]; bool prepFinished = false; if (p != null) { QuestPreparationEvent prepIncrement = () => prepFinished = true; p.OnPreparationDone += prepIncrement; p.PrepareObjective(); yield return(new WaitUntil(() => prepFinished)); p.OnPreparationDone -= prepIncrement; } } QuestObject.OnCollect += QuestObjectUpdate; if (OnObjectiveReady != null) { OnObjectiveReady(this); } }