diff --git a/core/src/com/unciv/models/ruleset/unique/IHasUniques.kt b/core/src/com/unciv/models/ruleset/unique/IHasUniques.kt index 3c3906fba2..654c06b3d9 100644 --- a/core/src/com/unciv/models/ruleset/unique/IHasUniques.kt +++ b/core/src/com/unciv/models/ruleset/unique/IHasUniques.kt @@ -46,11 +46,15 @@ interface IHasUniques : INamed { fun hasUnique(uniqueType: UniqueType, stateForConditionals: StateForConditionals? = null) = getMatchingUniques(uniqueType.placeholderText, stateForConditionals).any() + fun availabilityUniques(): Sequence = getMatchingUniques(UniqueType.OnlyAvailableWhen, StateForConditionals.IgnoreConditionals) + fun techsRequiredByUniques(): Sequence { - val uniquesForWhenThisIsAvailable: Sequence = getMatchingUniques(UniqueType.OnlyAvailableWhen, StateForConditionals.IgnoreConditionals) - val conditionalsForWhenThisIsAvailable: Sequence = uniquesForWhenThisIsAvailable.flatMap{ it.conditionals } - val techRequiringConditionalsForWhenThisIsAvailable: Sequence = conditionalsForWhenThisIsAvailable.filter{ it.isOfType(UniqueType.ConditionalTech) } - return techRequiringConditionalsForWhenThisIsAvailable.map{ it.params[0] } + return availabilityUniques() + // Currently an OnlyAvailableWhen can have multiple conditionals, implicitly a conjunction. + // Therefore, if any of its several conditionals is a ConditionalTech, then that tech is required. + .flatMap{ it.conditionals } + .filter{ it.isOfType(UniqueType.ConditionalTech) } + .map{ it.params[0] } } fun legacyRequiredTechs(): Sequence = sequenceOf()