public static void GoToStep(string questId, string state = UserQuestState.ACTIVE, int variantId = -1) { var step = Data.Repository.Steps[questId]; if (step == null) { return; } if (step.stepType == QuestStepType.TRIGGER) { QuestTriggerStepData questTriggerStepStep = Data.Repository.TriggerSteps[step.typeId]; CheckTrigger(questTriggerStepStep); return; } if (step.stepType == QuestStepType.MESSAGE) { QuestMessageData messageStep = Data.Repository.MessageSteps[step.typeId]; UserQuestStepData userStep = new UserQuestStepData(); userStep.questStepId = questId; userStep.state = state; CreateMessage(questId, messageStep.text); if (variantId > 0) { CompleteStep(questId, variantId); } Data.Repository.UserSteps.Set(userStep, questId); } }
public static void CompleteStep(string questId, int variantId) { UserQuestStepData userStep = _userStepStorage.Get(questId); if (userStep.state == UserQuestState.COMPLETE) { Debug.LogError("Failed to complete step! Already completed userStep id=" + questId); return; } QuestStepData questQuestStepData = Data.Repository.Steps[questId]; if (questQuestStepData.stepType == QuestStepType.MESSAGE) { QuestMessageData messageStep = Data.Repository.MessageSteps[questQuestStepData.typeId]; if (variantId < messageStep.variants.Length) { QuestVariantData variant = messageStep.variants[variantId]; userStep.Complete(variantId); CreateMessage(questId, variant.text, true); GoToStep(variant.targetStepId); } else { Debug.LogError("Failed to complete step! No variant id=" + variantId.ToString() + " found in step id=" + messageStep.Id); return; } } //OnStepComplete.Invoke(userStep); }
public static UserQuestStepData GetActiveStep() { UserQuestStepData activeStep = _userStepStorage.Get(s => s.state == UserQuestState.ACTIVE); activeStepId = activeStep.questStepId; return(activeStep); }
static void CheckTrigger(QuestTriggerStepData questTriggerStepStep) { TriggerData trigger; int length = questTriggerStepStep.Triggers.Length; for (int i = 0; i < length; i++) // looking for step to which trigger leads to { trigger = questTriggerStepStep.Triggers[i]; UserQuestStepData userStep = _userStepStorage.Get(u => u.questStepId == trigger.triggerStepId); //check trigger condition if (trigger.condition == QuestTriggerCondition.COMPLETE) { if (userStep != null) { GoToStep(trigger.targetStepId); break; } else if (!string.IsNullOrEmpty(trigger.alterStepId)) { GoToStep(trigger.alterStepId); break; } } else if (trigger.condition == QuestTriggerCondition.UNCOMPLETE) { if (userStep == null) { GoToStep(trigger.targetStepId); break; } else if (!string.IsNullOrEmpty(trigger.alterStepId)) { GoToStep(trigger.alterStepId); break; } } } }
public void Init(UserQuestStepData data) { }