Skip to content

Commit d5c6758

Browse files
committed
For cached stored in LocalUniqueCache, don't apply multiplication when storing, only when retrieving
1 parent 0bcf7f9 commit d5c6758

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

Diff for: core/src/com/unciv/models/ruleset/unique/StateForConditionals.kt

+3
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ data class StateForConditionals(
9393
companion object {
9494
val IgnoreConditionals = StateForConditionals(ignoreConditionals = true)
9595
val EmptyState = StateForConditionals()
96+
/** When caching uniques, we need to cache them unmultiplied, and apply multiplication only on retrieval from cache
97+
* This state lets the multiplication function know that it's always 1:1 */
98+
val IgnoreMultiplicationForCaching = StateForConditionals(ignoreConditionals = true)
9699
}
97100

98101
/** Used ONLY for stateBasedRandom in [Conditionals.conditionalApplies] to prevent save scumming on [UniqueType.ConditionalChance] */

Diff for: core/src/com/unciv/models/ruleset/unique/Unique.kt

+6-2
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s
9292
}
9393

9494
private fun getUniqueMultiplier(stateForConditionals: StateForConditionals): Int {
95+
if (stateForConditionals == StateForConditionals.IgnoreMultiplicationForCaching)
96+
return 1
9597

9698
var amount = 1
9799

@@ -235,8 +237,9 @@ class LocalUniqueCache(val cache: Boolean = true) {
235237

236238
val citySpecificUniques = get(
237239
"city-${city.id}-${uniqueType.name}",
238-
city.getLocalMatchingUniques(uniqueType, StateForConditionals.IgnoreConditionals)
240+
city.getLocalMatchingUniques(uniqueType, StateForConditionals.IgnoreMultiplicationForCaching)
239241
).filter { it.conditionalsApply(stateForConditionals) }
242+
.flatMap { it.getMultiplied(stateForConditionals) }
240243

241244
val civUniques = forCivGetMatchingUniques(city.civ, uniqueType, stateForConditionals)
242245

@@ -248,7 +251,7 @@ class LocalUniqueCache(val cache: Boolean = true) {
248251
uniqueType: UniqueType,
249252
stateForConditionals: StateForConditionals = civ.state
250253
): Sequence<Unique> {
251-
val sequence = civ.getMatchingUniques(uniqueType, StateForConditionals.IgnoreConditionals)
254+
val sequence = civ.getMatchingUniques(uniqueType, StateForConditionals.IgnoreMultiplicationForCaching)
252255
// The uniques CACHED are ALL civ uniques, regardless of conditional matching.
253256
// The uniques RETURNED are uniques AFTER conditional matching.
254257
// This allows reuse of the cached values, between runs with different conditionals -
@@ -258,6 +261,7 @@ class LocalUniqueCache(val cache: Boolean = true) {
258261
"civ-${civ.civName}-${uniqueType.name}",
259262
sequence
260263
).filter { it.conditionalsApply(stateForConditionals) }
264+
.flatMap { it.getMultiplied(stateForConditionals) }
261265
}
262266

263267
/** Get cached results as a sequence */

0 commit comments

Comments
 (0)