Added "upon founding a city" trigger

This commit is contained in:
Yair Morgenstern
2023-01-22 18:59:23 +02:00
parent 83ff2d12d9
commit 2b879e14d4
4 changed files with 14 additions and 4 deletions

View File

@ -930,6 +930,7 @@ due to adopting [policy] =
due to discovering [naturalWonder] =
due to entering the [eraName] =
due to constructing [buildingName] =
due to founding a city =
from the ruins =
# World Screen UI

View File

@ -7,6 +7,8 @@ import com.unciv.logic.civilization.Proximity
import com.unciv.logic.civilization.diplomacy.DiplomacyFlags
import com.unciv.logic.civilization.managers.ReligionState
import com.unciv.models.ruleset.nation.Nation
import com.unciv.models.ruleset.unique.StateForConditionals
import com.unciv.models.ruleset.unique.UniqueTriggerActivation
import com.unciv.models.ruleset.unique.UniqueType
class CityFounder {
@ -82,6 +84,12 @@ class CityFounder {
triggerCitiesSettledNearOtherCiv(city)
civInfo.gameInfo.cityDistances.setDirty()
for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponFoundingCity,
StateForConditionals(civInfo, city)
))
UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, city, triggerNotificationText = "due to founding a city")
return city
}

View File

@ -25,12 +25,12 @@ import kotlin.random.Random
// Buildings, techs, policies, ancient ruins and promotions can have 'triggered' effects
object UniqueTriggerActivation {
/** @return boolean whether an action was successfully performed */
/** @return whether an action was successfully performed */
fun triggerCivwideUnique(
unique: Unique,
civInfo: Civilization,
city: City? = null,
tile: Tile? = null,
tile: Tile? = city?.getCenterTile(),
notification: String? = null,
triggerNotificationText: String? = null
): Boolean {
@ -205,8 +205,8 @@ object UniqueTriggerActivation {
"in other cities" -> civInfo.cities.asSequence().filter { it != city }
else -> civInfo.cities.asSequence().filter { it.matchesFilter(unique.params[1]) }
}
for (city in applicableCities) {
city.population.addPopulation(unique.params[0].toInt())
for (applicableCity in applicableCities) {
applicableCity.population.addPopulation(unique.params[0].toInt())
}
if (notification != null && applicableCities.any())
civInfo.addNotification(

View File

@ -710,6 +710,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags:
TriggerUponDeclaringFriendship("upon declaring friendship", UniqueTarget.TriggerCondition),
TriggerUponEnteringGoldenAge("upon entering a Golden Age", UniqueTarget.TriggerCondition),
TriggerUponConqueringCity("upon conquering a city", UniqueTarget.TriggerCondition),
TriggerUponFoundingCity("upon founding a city", UniqueTarget.TriggerCondition),
TriggerUponConstructingBuilding("upon constructing [buildingFilter]", UniqueTarget.TriggerCondition),
// Not auto cityfiltered, since 'in all cities' can be read 'only if it's in all cities'
TriggerUponConstructingBuildingCityFilter("upon constructing [buildingFilter] [cityFilter]", UniqueTarget.TriggerCondition),