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); } }
protected override void GrabDataFromUI() { _triggerStepData = new QuestTriggerStepData(); _triggerStepData.Id = _id; _triggerStepData.Triggers = new TriggerData[_triggerEditors.Length]; for (int i = 0; i < _triggerEditors.Length; i++) { _triggerStepData.Triggers[i] = _triggerEditors[i].GetTriggerData(); } }
internal QuestTriggerStepData Clone() { QuestTriggerStepData data = new QuestTriggerStepData(); data.Triggers = new TriggerData[Triggers.Length]; for (int i = 0; i < Triggers.Length; i++) { data.Triggers[i] = Triggers[i].Clone(); } return(data); }
internal override void Init(QuestStepData questStepData) { QuestStepData = questStepData; if (!questStepData.stepType.Equals(QuestStepType.TRIGGER)) { Debug.LogError(this.ToString() + " : !questStepData.stepType.Equals(QuestStepType.TRIGGER)"); return; } QuestTriggerStepData sourceData = Data.Repository.TriggerSteps[questStepData.typeId]; _id = sourceData.Id; for (int i = 0; i < _triggerEditors.Length; i++) { TriggerData triggerData = i < sourceData.Triggers.Length ? sourceData.Triggers[i] : null; _triggerEditors[i].Init(triggerData); } }
void CreateRelatedData(QuestStepData item) { switch (item.stepType) { case Collections.MESSAGE: var messageData = new QuestMessageData { Id = item.typeId }; global::Data.Repository.MessageSteps.Set(messageData, messageData.Id, true, OnCreated); break; case Collections.TRIGGER: var triggerData = new QuestTriggerStepData { Id = item.typeId }; global::Data.Repository.TriggerSteps.Set(triggerData, triggerData.Id, true, OnCreated); break; default: Debug.LogError(this + " Save(): unknown type: " + item.stepType); break; } }
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; } } } }