From 00eb2aae957dd4e9e29c3509dae176afde1c5d95 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 17 Apr 2023 21:43:49 +0100 Subject: [PATCH] Move uninvented item to invented list when research is complete When an item began initial research, it was moved to the invented list. This is not intuitive for plugins, so move it once the item is fully researched. --- src/openrct2/management/Research.cpp | 19 ++++++++++++++----- src/openrct2/management/Research.h | 1 - 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/openrct2/management/Research.cpp b/src/openrct2/management/Research.cpp index fefe6bf3a0..8177c9bcd8 100644 --- a/src/openrct2/management/Research.cpp +++ b/src/openrct2/management/Research.cpp @@ -164,17 +164,25 @@ static void ResearchNextDesign() it = gResearchItemsUninvented.begin(); } - const ResearchItem researchItem = *it; - gResearchNextItem = researchItem; + gResearchNextItem = *it; gResearchProgress = 0; gResearchProgressStage = RESEARCH_STAGE_DESIGNING; - gResearchItemsUninvented.erase(it); - gResearchItemsInvented.push_back(researchItem); - ResearchInvalidateRelatedWindows(); } +static void MarkResearchItemInvented(const ResearchItem& researchItem) +{ + gResearchItemsUninvented.erase( + std::remove(gResearchItemsUninvented.begin(), gResearchItemsUninvented.end(), researchItem), + gResearchItemsUninvented.end()); + + if (std::find(gResearchItemsInvented.begin(), gResearchItemsInvented.end(), researchItem) == gResearchItemsInvented.end()) + { + gResearchItemsInvented.push_back(researchItem); + } +} + /** * * rct2: 0x006848D4 @@ -346,6 +354,7 @@ void ResearchUpdate() ResearchInvalidateRelatedWindows(); break; case RESEARCH_STAGE_COMPLETING_DESIGN: + MarkResearchItemInvented(*gResearchNextItem); ResearchFinishItem(*gResearchNextItem); gResearchProgress = 0; gResearchProgressStage = RESEARCH_STAGE_INITIAL_RESEARCH; diff --git a/src/openrct2/management/Research.h b/src/openrct2/management/Research.h index a0fcdbf3f2..6f5b40d7e5 100644 --- a/src/openrct2/management/Research.h +++ b/src/openrct2/management/Research.h @@ -139,7 +139,6 @@ void ResearchInsertRideEntry(ObjectEntryIndex entryIndex, bool researched); bool ResearchInsertSceneryGroupEntry(ObjectEntryIndex entryIndex, bool researched); bool ResearchIsInvented(ObjectType objectType, ObjectEntryIndex index); -bool ResearchSetInvented(ObjectType objectType, ObjectEntryIndex index, bool value); void RideTypeSetInvented(uint32_t rideType); void RideEntrySetInvented(ObjectEntryIndex rideEntryIndex); void ScenerySetInvented(const ScenerySelection& sceneryItem);