From bf568a44eb22d9d8eec24785288a6b3092543b4e Mon Sep 17 00:00:00 2001 From: yairm210 Date: Sun, 31 Oct 2021 22:19:56 +0200 Subject: [PATCH] Big performance improvement - don't need to string-compare every param of every unique of every building each time we're looking for global uniques --- core/src/com/unciv/logic/city/CityInfo.kt | 6 +++--- core/src/com/unciv/models/ruleset/unique/Unique.kt | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/core/src/com/unciv/logic/city/CityInfo.kt b/core/src/com/unciv/logic/city/CityInfo.kt index 3f3042ce8e..1a2340937a 100644 --- a/core/src/com/unciv/logic/city/CityInfo.kt +++ b/core/src/com/unciv/logic/city/CityInfo.kt @@ -749,21 +749,21 @@ class CityInfo { // Get all matching uniques that don't apply to only this city fun getMatchingUniquesWithNonLocalEffects(placeholderText: String): Sequence { return cityConstructions.builtBuildingUniqueMap.getUniques(placeholderText) - .filter { it.params.none { param -> param == "in this city" } } + .filter { !it.isLocalEffect } // Note that we don't query religion here, as those only have local effects } fun getMatchingUniquesWithNonLocalEffects(uniqueType: UniqueType): Sequence { return cityConstructions.builtBuildingUniqueMap.getUniques(uniqueType) - .filter { it.params.none { param -> param == "in this city" } } + .filter { !it.isLocalEffect } // Note that we don't query religion here, as those only have local effects } // Get all uniques that don't apply to only this city fun getAllUniquesWithNonLocalEffects(): Sequence { return cityConstructions.builtBuildingUniqueMap.getAllUniques() - .filter { it.params.none { param -> param == "in this city" } } + .filter { !it.isLocalEffect } // Note that we don't query religion here, as those only have local effects } diff --git a/core/src/com/unciv/models/ruleset/unique/Unique.kt b/core/src/com/unciv/models/ruleset/unique/Unique.kt index 191b6eda51..9715dbe961 100644 --- a/core/src/com/unciv/models/ruleset/unique/Unique.kt +++ b/core/src/com/unciv/models/ruleset/unique/Unique.kt @@ -26,6 +26,8 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s val allParams = params + conditionals.flatMap { it.params } + val isLocalEffect = params.contains("in this city") + fun isOfType(uniqueType: UniqueType) = uniqueType == type fun conditionalsApply(civInfo: CivilizationInfo? = null, city: CityInfo? = null): Boolean {