コード例 #1
0
        void SetQuest(string id, string idTask, QuestStatus status)
        {
            QuestTaskDetails task = _GetQuest(id, idTask);

            if (task != null)
            {
                task.status = status;
            }
        }
コード例 #2
0
        /// <summary>
        /// Verifies a task is of a specific status
        /// </summary>
        /// <returns><c>true</c> if this instance is task status the specified id status; otherwise, <c>false</c>.</returns>
        /// <param name="id">Identifier.</param>
        /// <param name="status">Status.</param>
        bool IsTaskStatus(string id, QuestStatus status)
        {
            QuestTaskDetails task = ctrl._GetTask(id);

            if (task != null)
            {
                return(task.status == status);
            }

            return(false);
        }
コード例 #3
0
        public QuestTaskDetails _GetQuest(string id, string taskId)
        {
            QuestEntryDetails quest = _GetQuest(id);
            QuestTaskDetails  task  = _GetTask(id);

            if (quest == null || task == null)
            {
                return(null);
            }

            if (quest.defenition.Tasks.Contains(task.defenition))
            {
                return(task);
            }
            else
            {
                Debug.LogErrorFormat("Quest ID {0} does not contain task ID {1}. Please fix.", id, taskId);
                return(null);
            }
        }
コード例 #4
0
        // User boots up and starts a quest
        public void BeginQuest(string id)
        {
            // Get the quest and first task, mark them as ongoing, set start timestamp
            QuestEntryDetails quest = _GetQuest(id);

            if (quest != null)
            {
                quest.status    = QuestStatus.Ongoing;
                quest.startTime = System.DateTime.Now;
                if (quest.defenition.Tasks != null && quest.defenition.Tasks.Count > 0)
                {
                    QuestTaskDetails task = _GetQuest(id, quest.defenition.Tasks[0].id);
                    if (task != null)
                    {
                        // @TODO Poll the requirements of the task to check if they've already been completed
                        task.status    = QuestStatus.Ongoing;
                        task.startTime = System.DateTime.Now;
                    }
                }
            }
        }
コード例 #5
0
        public QuestText GetQuestText(string questId)
        {
            QuestEntryDetails quest = _GetQuest(questId);

            if (quest == null)
            {
                return(null);
            }

            QuestText questText = new QuestText {
                title       = quest.Title,
                description = quest.defenition.description
            };

            if (quest.status == QuestStatus.Success)
            {
                questText.description += string.Format(" \n {0}", quest.defenition.successMessage);
            }
            else if (quest.status == QuestStatus.Failure)
            {
                questText.description += string.Format(" \n {0}", quest.defenition.failMessage);
            }
            else
            {
                // Generate a list of tasks
                List <QuestTaskText> tasks = new List <QuestTaskText>();
                foreach (QuestTask t in quest.defenition.Tasks)
                {
                    QuestTaskDetails task = _GetTask(t.id);
                    tasks.Add(new QuestTaskText {
                        title  = t.displayName,
                        status = task.status
                    });
                }

                questText.tasks = tasks;
            }

            return(questText);
        }
コード例 #6
0
        // @TODO Incomplete
        public bool NextTask(string questId)
        {
            if (status.IsQuestActive(questId))
            {
                Debug.LogErrorFormat("Quest {0} is no longer active or not started.", questId);
                return(false);
            }

            QuestEntryDetails quest = _GetQuest(questId);
            QuestTaskDetails  task  = GetCurrentTask(questId);

            // Checks if all requirements have been fullfilled on the current task
            if (task.defenition.CheckRequirements())
            {
                task.status = QuestStatus.Success;

                if (quest.currentTaskIndex + 1 >= quest.defenition.Tasks.Count)
                {
                    // Quest has been completed
                    EndQuest(questId);
                    Debug.LogWarning("Quest {0} was marked as success from calling NextTask(). Please use EndQuest() to mark a quest as complete.");
                }
                else
                {
                    // Update the next task and quest index
                    quest.currentTaskIndex += 1;
                    quest.status            = QuestStatus.Ongoing;
                }

                quest.currentTaskIndex += 1;
            }
            else
            {
                return(false);
            }

            return(true);
        }