| 746 | } |
| 747 | |
| 748 | QuestPtr createPreviewQuest( |
| 749 | String const& templateId, String const& position, String const& questGiverSpecies, Player* player) { |
| 750 | auto questTemplates = Root::singleton().questTemplateDatabase(); |
| 751 | auto questTemplate = questTemplates->questTemplate(templateId); |
| 752 | if (!questTemplate) |
| 753 | return {}; |
| 754 | |
| 755 | Json portrait = player->portrait(PortraitMode::Full).transformed(mem_fn(&Drawable::toJson)); |
| 756 | |
| 757 | JsonObject paramJson = questTemplate->parameterExamples; |
| 758 | for (auto const& paramName : paramJson.keys()) { |
| 759 | paramJson[paramName] = paramJson[paramName].set("type", questTemplate->parameterTypes[paramName]); |
| 760 | paramJson[paramName] = paramJson[paramName].set("portrait", portrait); |
| 761 | } |
| 762 | StringMap<QuestParam> parameters = questParamsFromJson(paramJson); |
| 763 | QuestDescriptor questDesc = QuestDescriptor{"preview", templateId, parameters, Random::randu64()}; |
| 764 | |
| 765 | List<QuestDescriptor> quests; |
| 766 | if (!position.equalsIgnoreCase("next") && !position.equalsIgnoreCase("last") && !position.equalsIgnoreCase("first")) { |
| 767 | quests = {questDesc}; |
| 768 | } else { |
| 769 | quests = {questDesc, questDesc, questDesc}; |
| 770 | } |
| 771 | QuestArcDescriptor arc = QuestArcDescriptor{quests, {}}; |
| 772 | |
| 773 | size_t arcPos = 0; |
| 774 | if (position.equalsIgnoreCase("next")) { |
| 775 | arcPos = 1; |
| 776 | } else if (position.equalsIgnoreCase("last")) { |
| 777 | arcPos = 2; |
| 778 | } |
| 779 | |
| 780 | auto quest = make_shared<Quest>(arc, arcPos, player); |
| 781 | quest->setParameter("questGiver", QuestParam{QuestEntity{{}, questGiverSpecies, {}}, {"Quest Giver"}, portrait, {}}); |
| 782 | return quest; |
| 783 | } |
| 784 | |
| 785 | } |
no test coverage detected