From 1f47fff05d9e807d605ae24d3e3200c8e9270ffe Mon Sep 17 00:00:00 2001 From: dHannasch Date: Sat, 2 Dec 2023 13:56:00 -0700 Subject: [PATCH] Add iHasUniques.requiredTechs (#10587) * Update IHasUniques.kt * Update IHasUniques.kt * Update IConstruction.kt * Update IHasUniques.kt --- .../com/unciv/models/ruleset/unique/IHasUniques.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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()