Solved 'cannot start game' errors - 'always true' conditionals do not affect 'getMatchingUniques'

This commit is contained in:
Yair Morgenstern
2023-03-04 20:45:57 +02:00
parent f55e010451
commit ae4d226027
4 changed files with 6 additions and 5 deletions

View File

@ -567,7 +567,7 @@ class City : IsPartOfGameInfoSerialization {
getLocalMatchingUniques(uniqueType, stateForConditionals)
}
fun getLocalMatchingUniques(uniqueType: UniqueType, stateForConditionals: StateForConditionals? = null): Sequence<Unique> {
fun getLocalMatchingUniques(uniqueType: UniqueType, stateForConditionals: StateForConditionals = StateForConditionals(civ, this)): Sequence<Unique> {
return (
cityConstructions.builtBuildingUniqueMap.getUniques(uniqueType).filter { !it.isAntiLocalEffect }
+ religion.getUniques().filter { it.isOfType(uniqueType) }

View File

@ -17,7 +17,7 @@ interface IHasUniques {
fun getMatchingUniques(uniqueTemplate: String, stateForConditionals: StateForConditionals? = null): Sequence<Unique> {
val matchingUniques = uniqueMap[uniqueTemplate] ?: return sequenceOf()
return matchingUniques.asSequence().filter { it.conditionalsApply(stateForConditionals) }
return matchingUniques.asSequence().filter { it.conditionalsApply(stateForConditionals ?: StateForConditionals()) }
}
fun getMatchingUniques(uniqueType: UniqueType, stateForConditionals: StateForConditionals? = null) =

View File

@ -48,8 +48,7 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s
return conditionalsApply(StateForConditionals(civInfo, city))
}
fun conditionalsApply(state: StateForConditionals?): Boolean {
if (state == null) return conditionals.isEmpty()
fun conditionalsApply(state: StateForConditionals = StateForConditionals()): Boolean {
if (state.ignoreConditionals) return true
for (condition in conditionals) {
if (!conditionalApplies(condition, state)) return false

View File

@ -203,7 +203,9 @@ object UnitActions {
return UnitAction(
type = UnitActionType.FoundCity,
title = actionTextWithSideEffects(UnitActionType.FoundCity.value, unique, unit),
title =
if (hasActionModifiers) actionTextWithSideEffects(UnitActionType.FoundCity.value, unique, unit)
else UnitActionType.FoundCity.value,
uncivSound = UncivSound.Chimes,
action = {
// check if we would be breaking a promise