public void RestoreState(object state) { if (m_LatestQuest != null) { return; } (string questName, string questGiverName, int latestStage) = (Tuple <string, string, int>)state; if (string.IsNullOrEmpty(questName)) { return; } m_LatestQuest = QuestSaver.Load(questName); m_QuestGiverName = questGiverName; if (!string.IsNullOrEmpty(m_QuestGiverName)) { GameObject qgGObj = GameObject.Find(m_QuestGiverName); if (qgGObj != null) { m_QuestGiver = qgGObj.GetComponent <QuestGiver>(); } } m_LatestQuest.Init(); m_LatestStage = m_LatestQuest.Stages[latestStage]; AttachEvents(); questHUD.UpdateQuestDisplay(m_LatestStage); }
private void Evaluate(StageS currentStage) { //check for slicing by current stage position var stagesCompleted = true; for (int stage = 0; stage < stages.Count; stage++) { if (stages[stage].Completed) { continue; } stagesCompleted = false; break; } if (stagesCompleted) { CompleteQuest(); return; } int currentStageIndex = stages.IndexOf(currentStage); if (currentStageIndex < stages.Count - 1) { stages[currentStageIndex + 1].Activate(); } }
private void AttachEvents() { if (m_LatestQuest == null) { return; } m_LatestQuest.OnQuestCompleted += QuestHasBeenCompleted; for (int i = 0; i < m_LatestQuest.Stages.Count; i++) { m_LatestQuest.Stages[i].OnStageActivated += StageHasBeenActivated; if (m_LatestQuest.Stages[i].Active) { m_LatestStage = m_LatestQuest.Stages[i]; } for (int j = 0; j < m_LatestQuest.Stages[i].Goals.Count; j++) { m_LatestQuest.Stages[i].Goals[j].OnGoalCompleted += questHUD.UpdateQuestDisplay; } } }
private void StageHasBeenActivated(StageS stage) { m_LatestStage = stage; questHUD.UpdateQuestDisplay(stage); }