diff --git a/core/src/com/unciv/models/ruleset/tile/Terrain.kt b/core/src/com/unciv/models/ruleset/tile/Terrain.kt index 8bcc92b4ac..ab43d6090e 100644 --- a/core/src/com/unciv/models/ruleset/tile/Terrain.kt +++ b/core/src/com/unciv/models/ruleset/tile/Terrain.kt @@ -144,8 +144,15 @@ class Terrain : RulesetStatsObject() { return textList } + /** Terrain filter matching is "pure" - input always returns same output, and it's called a bajillion times */ + val cachedMatchesFilterResult = HashMap() + fun matchesFilter(filter: String): Boolean { - return MultiFilter.multiFilter(filter, { matchesSingleFilter(it) }) + val cachedAnswer = cachedMatchesFilterResult[filter] + if (cachedAnswer != null) return cachedAnswer + val newAnswer = MultiFilter.multiFilter(filter, { matchesSingleFilter(it) }) + cachedMatchesFilterResult[filter] = newAnswer + return newAnswer } /** Implements [UniqueParameterType.TerrainFilter][com.unciv.models.ruleset.unique.UniqueParameterType.TerrainFilter] */