// To reduce repeat code. private void QuestDeactivator(int _quest, QuestState _state, string _logFormatText, string _trigger) { QuestProgress quest = quests[_quest]; Debug.Log(string.Format(_logFormatText, quest.line.quests[quest.currentQuest].name)); quest.state = _state; DeactivateQuest(quest); GS.Data.EventManager.TriggerEvent(_trigger); }
public void DeactivateQuest(QuestProgress _quest) { List <QuestProgress> _quests = new List <QuestProgress>(); _quests.AddRange(quests); DeactivateTask(_quests.IndexOf(_quest)); _quests.Remove(_quest); quests = _quests.ToArray(); //_quests.Clear(); changedQuest = new QuestChanged(QuestChange.Removed, _quest.line, _quest.currentQuest, _quest.state); }
// Private task methods private bool IsQuestComplete(int _quest) { int tasksComplete = 0; QuestProgress questProgress = quests[_quest]; foreach (QuestTask task in questProgress.tasks) { if (task.IsTaskCompleted()) { tasksComplete++; } } return(tasksComplete.Equals(questProgress.tasks.Length)); }
public void QuestComplete(QuestLine _line, QuestRewardType[] _types) { int _index = GetQuestIndex(_line); // Quest tasks are handled by QuestData. if (IsQuestComplete(GetQuestIndex(_line))) { QuestProgress quest = quests[_index]; // If quest is started. if (quest.state == QuestState.Started) { // Quest completed. quest.currentQuest++; // Is quest line complete or is there more quests? quest.state = ( (quest.line.quests.Length > quest.currentQuest) ? QuestState.Searching : QuestState.Done ); // Fixing current quest index. if (quest.line.quests.Length == quest.currentQuest) { quest.currentQuest--; } // Each QuestReward type work differently based on RewardType. quest.line.quests[quest.currentQuest].AwardRewards(_types); // TODO Tell player which quest was completed. // Or to save and load progress... // Or to QuestTracker (local, online, session etc.) // Perhaps through event manager? // New idea: EventManager told and QuestProgress checks the quest list. // Quest data is saved by ProgressManager, which handles SaveProgress<T> classes. // Deactivate quest. Debug.Log(string.Format(questCompleteText, quest.line.quests[quest.currentQuest].name)); DeactivateQuest(quest); GS.Data.EventManager.TriggerEvent(QuestCompleteTrigger); return; } } QuestInComplete(_index); }