From ce68aad07890796f9498d2d216da7cd779329e3a Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Sat, 1 Jul 2023 08:01:29 +1000 Subject: [PATCH] Move expensive questIndicatorPosition() call need to optimize Object configValue at some point --- source/game/StarQuestManager.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/source/game/StarQuestManager.cpp b/source/game/StarQuestManager.cpp index 9294522..0807c03 100644 --- a/source/game/StarQuestManager.cpp +++ b/source/game/StarQuestManager.cpp @@ -276,12 +276,11 @@ Maybe QuestManager::trackedQuest() const { Maybe QuestManager::getQuestIndicator(EntityPtr const& entity) const { Maybe indicatorType; Vec2F indicatorPos = entity->position() + Vec2F(0, 2.75); + auto questGiver = as(entity); - if (auto questGiver = as(entity)) { - indicatorPos = questGiver->questIndicatorPosition(); - + if (questGiver) { if (!indicatorType) { - for (auto questId : questGiver->turnInQuests()) { + for (auto& questId : questGiver->turnInQuests()) { if (!isActive(questId)) continue; auto quest = getQuest(questId); @@ -294,9 +293,9 @@ Maybe QuestManager::getQuestIndicator(EntityPtr const& entity) c if (!indicatorType) { auto questTemplateDatabase = Root::singleton().questTemplateDatabase(); - for (auto questArc : questGiver->offeredQuests()) { + for (auto& questArc : questGiver->offeredQuests()) { if (canStart(questArc) && questArc.quests.size() > 0) { - auto questDesc = questArc.quests[0]; + auto& questDesc = questArc.quests[0]; auto questTemplate = questTemplateDatabase->questTemplate(questDesc.templateId); indicatorType = questTemplate->questGiverIndicator; break; @@ -308,13 +307,18 @@ Maybe QuestManager::getQuestIndicator(EntityPtr const& entity) c if (indicatorType) { Json indicators = Root::singleton().assets()->json("/quests/quests.config:indicators"); String indicatorImage = indicators.get(*indicatorType).getString("image"); + if (questGiver) + indicatorPos = questGiver->questIndicatorPosition(); return QuestIndicator{indicatorImage, indicatorPos}; } for (auto& pair : m_quests) { if (pair.second->state() == QuestState::Active) { - if (auto indicatorImage = pair.second->customIndicator(entity)) + if (auto indicatorImage = pair.second->customIndicator(entity)) { + if (questGiver) + indicatorPos = questGiver->questIndicatorPosition(); return QuestIndicator{ *indicatorImage, indicatorPos }; + } } }