More unique typing isn't this fun

This commit is contained in:
Yair Morgenstern 2022-02-24 16:29:09 +02:00
parent f14a201afb
commit c767ebe2bf
6 changed files with 13 additions and 9 deletions

View File

@ -391,7 +391,7 @@ class CityConstructions {
private fun constructionBegun(construction: IConstruction) {
if (construction !is Building) return
if (!construction.hasUnique("Triggers a global alert upon build start")) return
if (!construction.hasUnique(UniqueType.TriggersAlertOnStart)) return
val buildingIcon = "BuildingIcons/${construction.name}"
for (otherCiv in cityInfo.civInfo.gameInfo.civilizations) {
if (otherCiv == cityInfo.civInfo) continue
@ -433,7 +433,7 @@ class CityConstructions {
cityInfo.location, NotificationIcon.Construction, icon)
}
if (construction is Building && construction.hasUnique("Triggers a global alert upon completion",
if (construction is Building && construction.hasUnique(UniqueType.TriggersAlertOnCompletion,
StateForConditionals(cityInfo.civInfo, cityInfo)
)) {
for (otherCiv in cityInfo.civInfo.gameInfo.civilizations) {

View File

@ -610,7 +610,7 @@ class CityInfo {
expansion.nextTurn(stats.culture)
if (isBeingRazed) {
val removedPopulation =
1 + civInfo.getMatchingUniques("Cities are razed [] times as fast")
1 + civInfo.getMatchingUniques(UniqueType.CitiesAreRazedXTimesFaster)
.sumOf { it.params[0].toInt() - 1 }
population.addPopulation(-1 * removedPopulation)
if (population.population <= 0) {

View File

@ -249,7 +249,6 @@ open class TileInfo {
fun isRoughTerrain() = getAllTerrains().any{ it.isRough() }
fun hasUnique(unique: String) = getAllTerrains().any { it.hasUnique(unique) }
fun hasUnique(uniqueType: UniqueType) = getAllTerrains().any { it.hasUnique(uniqueType) }
fun getWorkingCity(): CityInfo? {
@ -539,7 +538,7 @@ open class TileInfo {
improvement.hasUnique(UniqueType.ImprovementBuildableByFreshWater) && isAdjacentToFreshwater -> true
// If an unique of this type exists, we want all to match (e.g. Hill _and_ Forest would be meaningful).
improvement.getMatchingUniques("Can only be built on [] tiles").let {
improvement.getMatchingUniques(UniqueType.CanOnlyBeBuiltOnTile).let {
it.any() && it.all { unique -> matchesTerrainFilter(unique.params[0]) }
} -> true
@ -578,7 +577,7 @@ open class TileInfo {
"Fresh Water" -> isAdjacentToFreshwater
else -> {
if (terrainFeatures.contains(filter)) return true
if (hasUnique(filter)) return true
if (getAllTerrains().any { it.hasUnique(filter) }) return true
// Resource type check is last - cannot succeed if no resource here
if (resource == null) return false
// Checks 'luxury resource', 'strategic resource' and 'bonus resource' - only those that are visible of course

View File

@ -138,7 +138,7 @@ class Technology: RulesetObject() {
.filter {
it.requiredTech == name
&& (it.uniqueTo == civInfo.civName || it.uniqueTo==null && civInfo.getEquivalentUnit(it) == it)
&& (nuclearWeaponsEnabled || !it.hasUnique("Nuclear weapon of Strength []"))
&& (nuclearWeaponsEnabled || !it.isNuclearWeapon())
&& (religionEnabled || !it.hasUnique(UniqueType.HiddenWithoutReligion))
&& !it.hasUnique(UniqueType.HiddenFromCivilopedia)
}

View File

@ -241,6 +241,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags:
ChanceToRecruitBarbarianFromEncampment("67% chance to earn 25 Gold and recruit a Barbarian unit from a conquered encampment", UniqueTarget.Global),
ChanceToRecruitNavalBarbarian("50% chance of capturing defeated Barbarian naval units and earning 25 Gold", UniqueTarget.Global),
TripleGoldFromEncampmentsAndCities("Receive triple Gold from Barbarian encampments and pillaging Cities", UniqueTarget.Global),
CitiesAreRazedXTimesFaster("Cities are razed [amount] times as fast", UniqueTarget.Global),
EnablesOpenBorders("Enables Open Borders agreements", UniqueTarget.Global),
// Should the 'R' in 'Research agreements' be capitalized?
@ -334,6 +335,8 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags:
ConvertFoodToProductionWhenConstructed("Excess Food converted to Production when under construction", UniqueTarget.Building, UniqueTarget.Unit),
RequiresPopulation("Requires at least [amount] population", UniqueTarget.Building, UniqueTarget.Unit),
TriggersAlertOnStart("Triggers a global alert upon build start", UniqueTarget.Building, UniqueTarget.Unit),
TriggersAlertOnCompletion("Triggers a global alert upon completion", UniqueTarget.Building, UniqueTarget.Unit),
//endregion
@ -367,6 +370,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags:
NotDestroyedWhenCityCaptured("Never destroyed when the city is captured", UniqueTarget.Building),
DoublesGoldFromCapturingCity("Doubles Gold given to enemy if city is captured", UniqueTarget.Building),
RemoveAnnexUnhappiness("Remove extra unhappiness from annexed cities", UniqueTarget.Building),
//endregion
@ -553,6 +557,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags:
CanBuildOutsideBorders("Can be built outside your borders", UniqueTarget.Improvement),
CanBuildJustOutsideBorders("Can be built just outside your borders", UniqueTarget.Improvement),
CanOnlyBeBuiltOnTile("Can only be built on [tileFilter] tiles", UniqueTarget.Improvement),
CannotBuildOnTile("Cannot be built on [tileFilter] tiles", UniqueTarget.Improvement),
NoFeatureRemovalNeeded("Does not need removal of [tileFilter]", UniqueTarget.Improvement),

View File

@ -101,7 +101,7 @@ class Promotion : RulesetObject() {
}
val grantors = ruleset.buildings.values.filter {
building -> building.getMatchingUniques("All newly-trained [] units [] receive the [] promotion")
building -> building.getMatchingUniques(UniqueType.UnitStartingPromotions)
.any { it.params[2] == name }
} + ruleset.terrains.values.filter {
terrain -> terrain.getMatchingUniques(UniqueType.TerrainGrantsPromotion).any {