From 7039b6a287ac9bf70f2a37aca41c4f9d29444cd6 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Mon, 19 Jul 2021 23:13:36 +0300 Subject: [PATCH] More sequencing for faster unique filtering --- core/src/com/unciv/logic/city/CityInfo.kt | 8 +++----- core/src/com/unciv/logic/civilization/CivilizationInfo.kt | 2 +- core/src/com/unciv/models/ruleset/Unique.kt | 6 +++--- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/core/src/com/unciv/logic/city/CityInfo.kt b/core/src/com/unciv/logic/city/CityInfo.kt index 4e33631641..8895060b11 100644 --- a/core/src/com/unciv/logic/city/CityInfo.kt +++ b/core/src/com/unciv/logic/city/CityInfo.kt @@ -569,10 +569,8 @@ class CityInfo { // Matching uniques provided by sources in the city itself fun getLocalMatchingUniques(placeholderText: String): Sequence { - return ( - cityConstructions.builtBuildingUniqueMap.getUniques(placeholderText) + - religion.getMatchingUniques(placeholderText) - ).asSequence() + return cityConstructions.builtBuildingUniqueMap.getUniques(placeholderText) + + religion.getMatchingUniques(placeholderText) } // Get all uniques that originate from this city @@ -582,7 +580,7 @@ class CityInfo { // Get all matching uniques that don't apply to only this city fun getMatchingUniquesWithNonLocalEffects(placeholderText: String): Sequence { - return cityConstructions.builtBuildingUniqueMap.getUniques(placeholderText).asSequence() + return cityConstructions.builtBuildingUniqueMap.getUniques(placeholderText) .filter { it.params.none { param -> param == "in this city" } } // Note that we don't query religion here, as those only have local effects (for now at least) } diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index 32dd223de1..bece99dc40 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -256,7 +256,7 @@ class CivilizationInfo { } + policies.policyUniques.getUniques(uniqueTemplate) + tech.getTechUniques().filter { it.placeholderText == uniqueTemplate } + - temporaryUniques.filter { it.first.placeholderText == uniqueTemplate }.map { it.first } + temporaryUniques.asSequence().filter { it.first.placeholderText == uniqueTemplate }.map { it.first } } //region Units diff --git a/core/src/com/unciv/models/ruleset/Unique.kt b/core/src/com/unciv/models/ruleset/Unique.kt index 643f91a895..496e5f75ce 100644 --- a/core/src/com/unciv/models/ruleset/Unique.kt +++ b/core/src/com/unciv/models/ruleset/Unique.kt @@ -25,10 +25,10 @@ class UniqueMap:HashMap>() { this[unique.placeholderText]!!.add(unique) } - fun getUniques(placeholderText: String): List { + fun getUniques(placeholderText: String): Sequence { val result = this[placeholderText] - if (result == null) return listOf() - else return result + if (result == null) return sequenceOf() + else return result.asSequence() } fun getAllUniques() = this.asSequence().flatMap { it.value.asSequence() }