mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-25 12:54:06 -04:00
United 'getTriggeredUniques' modifier filtering
This commit is contained in:
parent
ba085ca585
commit
8a97573c7d
@ -540,18 +540,19 @@ class Civilization : IsPartOfGameInfoSerialization {
|
||||
|
||||
fun getTriggeredUniques(
|
||||
trigger: UniqueType,
|
||||
stateForConditionals: StateForConditionals = StateForConditionals(this)
|
||||
stateForConditionals: StateForConditionals = StateForConditionals(this),
|
||||
modifierFilter: (Unique) -> Boolean = { true }
|
||||
) : Iterable<Unique> = sequence {
|
||||
yieldAll(nation.uniqueMap.getTriggeredUniques(trigger, stateForConditionals))
|
||||
yieldAll(nation.uniqueMap.getTriggeredUniques(trigger, stateForConditionals, modifierFilter))
|
||||
yieldAll(cities.asSequence()
|
||||
.flatMap { city -> city.cityConstructions.builtBuildingUniqueMap.getTriggeredUniques(trigger, stateForConditionals) }
|
||||
.flatMap { city -> city.cityConstructions.builtBuildingUniqueMap.getTriggeredUniques(trigger, stateForConditionals, modifierFilter) }
|
||||
)
|
||||
if (religionManager.religion != null)
|
||||
yieldAll(religionManager.religion!!.founderBeliefUniqueMap.getTriggeredUniques(trigger, stateForConditionals))
|
||||
yieldAll(policies.policyUniques.getTriggeredUniques(trigger, stateForConditionals))
|
||||
yieldAll(tech.techUniques.getTriggeredUniques(trigger, stateForConditionals))
|
||||
yieldAll(getEra().uniqueMap.getTriggeredUniques (trigger, stateForConditionals))
|
||||
yieldAll(gameInfo.ruleset.globalUniques.uniqueMap.getTriggeredUniques(trigger, stateForConditionals))
|
||||
yieldAll(religionManager.religion!!.founderBeliefUniqueMap.getTriggeredUniques(trigger, stateForConditionals, modifierFilter))
|
||||
yieldAll(policies.policyUniques.getTriggeredUniques(trigger, stateForConditionals, modifierFilter))
|
||||
yieldAll(tech.techUniques.getTriggeredUniques(trigger, stateForConditionals, modifierFilter))
|
||||
yieldAll(getEra().uniqueMap.getTriggeredUniques (trigger, stateForConditionals, modifierFilter))
|
||||
yieldAll(gameInfo.ruleset.globalUniques.uniqueMap.getTriggeredUniques(trigger, stateForConditionals, modifierFilter))
|
||||
}.toList() // Triggers can e.g. add buildings which contain triggers, causing concurrent modification errors
|
||||
|
||||
|
||||
|
@ -301,14 +301,13 @@ class MapUnit : IsPartOfGameInfoSerialization {
|
||||
|
||||
fun getTriggeredUniques(
|
||||
trigger: UniqueType,
|
||||
stateForConditionals: StateForConditionals = StateForConditionals(civInfo = civ, unit = this)
|
||||
stateForConditionals: StateForConditionals = StateForConditionals(civInfo = civ, unit = this),
|
||||
modifierFilter: (Unique) -> Boolean = { true }
|
||||
): Sequence<Unique> {
|
||||
return getUniques().filter { unique ->
|
||||
unique.hasModifier(trigger)
|
||||
&& unique.conditionalsApply(stateForConditionals)
|
||||
}
|
||||
return tempUniquesMap.getTriggeredUniques(trigger, stateForConditionals, modifierFilter)
|
||||
}
|
||||
|
||||
|
||||
/** Gets *per turn* resource requirements - does not include immediate costs for stockpiled resources.
|
||||
* StateForConditionals is assumed to regarding this mapUnit*/
|
||||
fun getResourceRequirementsPerTurn(): Counter<String> {
|
||||
|
@ -260,18 +260,12 @@ class TileImprovementFunctions(val tile: Tile) {
|
||||
UniqueTriggerActivation.triggerUnique(unique, civ, unit = unit, tile = tile)
|
||||
|
||||
for (unique in civ.getTriggeredUniques(UniqueType.TriggerUponBuildingImprovement, stateForConditionals)
|
||||
.filter {
|
||||
it.getModifiers(UniqueType.TriggerUponBuildingImprovement).any {
|
||||
improvement.matchesFilter(it.params[0])
|
||||
} })
|
||||
{ improvement.matchesFilter(it.params[0]) })
|
||||
UniqueTriggerActivation.triggerUnique(unique, civ, unit = unit, tile = tile)
|
||||
|
||||
if (unit == null) return
|
||||
for (unique in unit.getTriggeredUniques(UniqueType.TriggerUponBuildingImprovement, stateForConditionals)
|
||||
.filter {
|
||||
it.getModifiers(UniqueType.TriggerUponBuildingImprovement).any {
|
||||
improvement.matchesFilter(it.params[0])
|
||||
} })
|
||||
{ improvement.matchesFilter(it.params[0]) })
|
||||
UniqueTriggerActivation.triggerUnique(unique, civ, unit = unit, tile = tile)
|
||||
}
|
||||
|
||||
|
@ -323,9 +323,10 @@ open class UniqueMap() {
|
||||
|
||||
fun getAllUniques() = innerUniqueMap.values.asSequence().flatten()
|
||||
|
||||
fun getTriggeredUniques(trigger: UniqueType, stateForConditionals: StateForConditionals): Sequence<Unique> {
|
||||
fun getTriggeredUniques(trigger: UniqueType, stateForConditionals: StateForConditionals,
|
||||
modifierFilter: (Unique) -> Boolean = { true }): Sequence<Unique> {
|
||||
return getAllUniques().filter { unique ->
|
||||
unique.hasModifier(trigger) && unique.conditionalsApply(stateForConditionals)
|
||||
unique.getModifiers(trigger).any(modifierFilter) && unique.conditionalsApply(stateForConditionals)
|
||||
}.flatMap { it.getMultiplied(stateForConditionals) }
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user