void QueueNewDialogMessage(int index) { Dialog dialog = (Dialog)target; DialogMessage src = null; DialogMessage dst = new DialogMessage(); if (index == 0 && dialog.messages.Count > 0) { src = dialog.messages[0]; } else if (index > 0 && index <= dialog.messages.Count) { src = dialog.messages[index - 1]; } if (src != null) { dst.CopyFrom(src); } dialog.messages.Insert(index, dst); EditorUtility.SetDirty(target); }
public virtual QuestInstance newInstance() { if (!metaQuestDummy) { metaQuestDummy = new GameObject("metaQuestDummy"); DontDestroyOnLoad(metaQuestDummy); } //strip the dummy gameobject from the components MonoBehaviour[] components = metaQuestDummy.GetComponents <MonoBehaviour>(); foreach (MonoBehaviour bhvr in components) { Destroy(bhvr); } //create a new quest instance QuestInstance qi = new QuestInstance(); //copy the data qi.quest = metaQuestDummy.AddComponent <Quest>(); qi.quest.audioQuest = _music; qi.quest.title = _title; qi.quest.town = _town; qi.quest.background = _background; qi.quest.baseCoinsAward = _award; qi.quest.startDialog = metaQuestDummy.AddComponent <Dialog>(); //create the dialog Dialog dialog = qi.quest.startDialog; foreach (DialogMessage dm in messages) { DialogMessage msg = new DialogMessage(); msg.CopyFrom(dm); dialog.messages.Add(msg); } //add the accept side quest window and the quest title cinematic event metaQuestDummy.AddComponent <ShowAcceptSideQuestWindow>(); metaQuestDummy.AddComponent <ShowQuestTitle>(); //create new quest objectives evaluator qi.objectives = new List <QuestObjectiveEvaluator>(); MetaKillQuest[] mkq = GetComponents <MetaKillQuest>(); List <KillQuest> mandatoryKillQuests = new List <KillQuest>(); List <KillQuest> optionalKillQuests = new List <KillQuest>(); if (mkq != null) { foreach (MetaKillQuest mk in mkq) { if (mk._mandatory) { mandatoryKillQuests.Add(mk as KillQuest); } else { optionalKillQuests.Add(mk as KillQuest); } } foreach (KillQuest kq in mandatoryKillQuests) { qi.objectives.Add(kq.getEvaluator()); } if (_maxKillQuests >= 0) { if (mandatoryKillQuests.Count < _maxKillQuests) { //random sort optionalKillQuests.Sort(delegate(KillQuest kq1, KillQuest kq2) { return((Random.Range(0, 2) == 0)?-1:1); //shuffle }); int numKillQuestsToAdd = _maxKillQuests - mandatoryKillQuests.Count; for (int i = 0; i < numKillQuestsToAdd; i++) { qi.objectives.Add(optionalKillQuests[i].getEvaluator()); } } } else { foreach (KillQuest kq in optionalKillQuests) { qi.objectives.Add(kq.getEvaluator()); } } } LootQuest[] lqs = GetComponents <LootQuest>(); if (lqs != null) { foreach (LootQuest lq in lqs) { qi.objectives.Add(lq.getEvaluator()); } } RescueQuest[] rqs = GetComponents <RescueQuest>(); if (rqs != null && rqs.Length > 0) { int index = Random.Range(0, rqs.Length); Debug.Log(index); qi.objectives.Add(rqs[index].getEvaluator()); } return(qi); }