mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-09 23:39:40 +07:00
Add iHasUniques.requiredTechs (#10587)
* Update IHasUniques.kt * Update IHasUniques.kt * Update IConstruction.kt * Update IHasUniques.kt
This commit is contained in:
@ -46,11 +46,15 @@ interface IHasUniques : INamed {
|
|||||||
fun hasUnique(uniqueType: UniqueType, stateForConditionals: StateForConditionals? = null) =
|
fun hasUnique(uniqueType: UniqueType, stateForConditionals: StateForConditionals? = null) =
|
||||||
getMatchingUniques(uniqueType.placeholderText, stateForConditionals).any()
|
getMatchingUniques(uniqueType.placeholderText, stateForConditionals).any()
|
||||||
|
|
||||||
|
fun availabilityUniques(): Sequence<Unique> = getMatchingUniques(UniqueType.OnlyAvailableWhen, StateForConditionals.IgnoreConditionals)
|
||||||
|
|
||||||
fun techsRequiredByUniques(): Sequence<String> {
|
fun techsRequiredByUniques(): Sequence<String> {
|
||||||
val uniquesForWhenThisIsAvailable: Sequence<Unique> = getMatchingUniques(UniqueType.OnlyAvailableWhen, StateForConditionals.IgnoreConditionals)
|
return availabilityUniques()
|
||||||
val conditionalsForWhenThisIsAvailable: Sequence<Unique> = uniquesForWhenThisIsAvailable.flatMap{ it.conditionals }
|
// Currently an OnlyAvailableWhen can have multiple conditionals, implicitly a conjunction.
|
||||||
val techRequiringConditionalsForWhenThisIsAvailable: Sequence<Unique> = conditionalsForWhenThisIsAvailable.filter{ it.isOfType(UniqueType.ConditionalTech) }
|
// Therefore, if any of its several conditionals is a ConditionalTech, then that tech is required.
|
||||||
return techRequiringConditionalsForWhenThisIsAvailable.map{ it.params[0] }
|
.flatMap{ it.conditionals }
|
||||||
|
.filter{ it.isOfType(UniqueType.ConditionalTech) }
|
||||||
|
.map{ it.params[0] }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun legacyRequiredTechs(): Sequence<String> = sequenceOf()
|
fun legacyRequiredTechs(): Sequence<String> = sequenceOf()
|
||||||
|
Reference in New Issue
Block a user