Example #1
0
        // 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);
        }
Example #2
0
        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);
        }
Example #3
0
        // 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));
        }
Example #4
0
        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);
        }