tileFilter now works with resources for most uniques!

This commit is contained in:
Yair Morgenstern 2021-02-18 16:22:15 +02:00
parent 92b82b22b0
commit 3d8e7fa99d
2 changed files with 9 additions and 10 deletions

View File

@ -206,8 +206,7 @@ open class TileInfo {
for (unique in cityWideUniques + civWideUniques) {
val tileType = unique.params[1]
if (tileType == improvement) continue // This is added to the calculation in getImprovementStats. we don't want to add it twice
if (matchesUniqueFilter(tileType)
|| (resource == tileType && hasViewableResource(observingCiv))
if (matchesUniqueFilter(tileType, observingCiv)
|| (tileType == "Strategic resource" && hasViewableResource(observingCiv) && getTileResource().resourceType == ResourceType.Strategic)
|| (tileType == "Luxury resource" && hasViewableResource(observingCiv) && getTileResource().resourceType == ResourceType.Luxury)
|| (tileType == "Bonus resource" && hasViewableResource(observingCiv) && getTileResource().resourceType == ResourceType.Bonus)
@ -289,7 +288,7 @@ open class TileInfo {
val adjacent = unique.params[1]
val numberOfBonuses = neighbors.count {
it.improvement == adjacent
|| it.matchesUniqueFilter(adjacent)
|| it.matchesUniqueFilter(adjacent, observingCiv)
|| it.roadStatus.name == adjacent
}
stats.add(unique.stats.times(numberOfBonuses.toFloat()))
@ -346,7 +345,7 @@ open class TileInfo {
}
}
fun matchesUniqueFilter(filter: String): Boolean {
fun matchesUniqueFilter(filter: String, civInfo: CivilizationInfo?=null): Boolean {
return filter == baseTerrain
|| filter == Constants.hill && isHill()
|| filter == "River" && isAdjacentToRiver()
@ -354,7 +353,7 @@ open class TileInfo {
|| baseTerrainObject.uniques.contains(filter)
|| terrainFeature != null && getTerrainFeature()!!.uniques.contains(filter)
|| improvement == filter
// || resource == filter // TODO uncomment in next version
|| civInfo != null && hasViewableResource(civInfo) && resource == filter
|| filter == "Water" && isWater
|| filter == "Land" && isLand
}

View File

@ -271,13 +271,13 @@ class Building : NamedStats(), IConstruction {
}
for (unique in uniqueObjects) when (unique.placeholderText) {
"Must be on []" -> if (!cityCenter.matchesUniqueFilter(unique.params[0])) return unique.text
"Must not be on []" -> if (cityCenter.matchesUniqueFilter(unique.params[0])) return unique.text
"Must be on []" -> if (!cityCenter.matchesUniqueFilter(unique.params[0], civInfo)) return unique.text
"Must not be on []" -> if (cityCenter.matchesUniqueFilter(unique.params[0], civInfo)) return unique.text
"Must be next to []" -> if (!(unique.params[0] == "Fresh water" && cityCenter.isAdjacentToRiver()) // Fresh water is special, in that rivers are not tiles themselves but also fit the filter.
&& cityCenter.getTilesInDistance(1).none { it.matchesUniqueFilter(unique.params[0]) }) return unique.text
"Must not be next to []" -> if (cityCenter.getTilesInDistance(1).any { it.matchesUniqueFilter(unique.params[0]) }) return unique.text
&& cityCenter.getTilesInDistance(1).none { it.matchesUniqueFilter(unique.params[0], civInfo) }) return unique.text
"Must not be next to []" -> if (cityCenter.getTilesInDistance(1).any { it.matchesUniqueFilter(unique.params[0], civInfo) }) return unique.text
"Must have an owned [] within [] tiles" -> if (cityCenter.getTilesInDistance(unique.params[1].toInt()).none {
it.matchesUniqueFilter(unique.params[0]) && it.getOwner() == construction.cityInfo.civInfo
it.matchesUniqueFilter(unique.params[0], civInfo) && it.getOwner() == construction.cityInfo.civInfo
}) return unique.text
"Can only be built in annexed cities" -> if (construction.cityInfo.isPuppet || construction.cityInfo.foundingCiv == ""
|| construction.cityInfo.civInfo.civName == construction.cityInfo.foundingCiv) return unique.text