Add iHasUniques.requiredTechs (#10587)

* Update IHasUniques.kt

* Update IHasUniques.kt

* Update IConstruction.kt

* Update IHasUniques.kt
This commit is contained in:
dHannasch
2023-12-02 13:56:00 -07:00
committed by GitHub
parent 7fae32c595
commit 1f47fff05d

View File

@ -46,11 +46,15 @@ interface IHasUniques : INamed {
fun hasUnique(uniqueType: UniqueType, stateForConditionals: StateForConditionals? = null) =
getMatchingUniques(uniqueType.placeholderText, stateForConditionals).any()
fun availabilityUniques(): Sequence<Unique> = getMatchingUniques(UniqueType.OnlyAvailableWhen, StateForConditionals.IgnoreConditionals)
fun techsRequiredByUniques(): Sequence<String> {
val uniquesForWhenThisIsAvailable: Sequence<Unique> = getMatchingUniques(UniqueType.OnlyAvailableWhen, StateForConditionals.IgnoreConditionals)
val conditionalsForWhenThisIsAvailable: Sequence<Unique> = uniquesForWhenThisIsAvailable.flatMap{ it.conditionals }
val techRequiringConditionalsForWhenThisIsAvailable: Sequence<Unique> = 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<String> = sequenceOf()