private void OnObjectiveProgressUpdated(QuestObjectiveState objectiveState) { _objectiveDescription.text = objectiveState.ObjectiveDescription; if (objectiveState.Status == QuestObjectiveStatus.Invalid) { Debug.LogError($"[{nameof(ObjectiveUI)}]: Invalid objective state!"); } _incompleteImage.enabled = objectiveState.Status == QuestObjectiveStatus.Ongoing; _completedImage.enabled = objectiveState.Status == QuestObjectiveStatus.Completed; _failedImage.enabled = objectiveState.Status == QuestObjectiveStatus.Failed; }
public void SetObjectiveInfo(QuestObjectiveState objectiveState) { if (_questObjectiveState != null) { CleanUpObjectiveState(); } _questObjectiveState = objectiveState; _questObjectiveState.OnProgressUpdated += OnObjectiveProgressUpdated; // update visuals to reflect objective state _objectiveDescription.text = objectiveState.ObjectiveDescription; OnObjectiveProgressUpdated(objectiveState); }
private IEnumerator ObjectiveReset() { state = QuestObjectiveState.Inactive; progress = 0; for (int i = 0; i < QuestCompletionActions.Count; i++) { QuestCompletionActions[i].Reverse(); } yield return(StartCoroutine(ReversePreparations())); if (OnUpdate != null) { OnUpdate(this); } }
private void LoadObjectives() { for (int i = 0; i < _questData.Objectives.Count; i++) { QuestObjectiveData objectiveData = _questData.Objectives[i]; QuestObjectiveState objectiveState = objectiveData.CreateState(); if (objectiveState == null) { Debug.LogError($"[{QuestName}]: Failed to create quest objective state for objective data {objectiveData.name}!"); return; } objectiveState.OnCompleted += OnObjectiveCompleted; objectiveState.OnFailed += OnObjectiveFailed; objectiveState.OnProgressUpdated += OnObjectiveProgressUpdated; _objectiveStates.Add(objectiveState); } }
private IEnumerator ObjectiveCompletion() { state = QuestObjectiveState.Completed; for (int i = 0; i < QuestCompletionActions.Count; i++) { QuestCompletionActions[i].Execute(); } yield return(StartCoroutine(ReversePreparations())); if (OnUpdate != null) { OnUpdate(this); } if (OnComplete != null) { OnComplete(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); } }
private void CleanUpObjectiveState() { _questObjectiveState.OnProgressUpdated -= OnObjectiveProgressUpdated; _questObjectiveState = null; }
private void OnObjectiveProgressUpdated(QuestObjectiveState objectiveState) { OnStateUpdated?.Invoke(); }
private void OnObjectiveFailed(QuestObjectiveState objectiveState) { RemoveObjectiveState(objectiveState); FireOnFailed(); }
private void OnObjectiveCompleted(QuestObjectiveState objectiveState) { RemoveObjectiveState(objectiveState); TryCompleteQuest(); }
private void RemoveObjectiveState(QuestObjectiveState objectiveState) { objectiveState.OnCompleted -= OnObjectiveCompleted; objectiveState.OnFailed -= OnObjectiveFailed; objectiveState.OnProgressUpdated -= OnObjectiveProgressUpdated; }