diff --git a/core/src/com/unciv/logic/map/TileInfo.kt b/core/src/com/unciv/logic/map/TileInfo.kt index 2c09395f5f..91ed13c03c 100644 --- a/core/src/com/unciv/logic/map/TileInfo.kt +++ b/core/src/com/unciv/logic/map/TileInfo.kt @@ -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 } diff --git a/core/src/com/unciv/models/ruleset/Building.kt b/core/src/com/unciv/models/ruleset/Building.kt index 046b92bc49..cd8c4e536b 100644 --- a/core/src/com/unciv/models/ruleset/Building.kt +++ b/core/src/com/unciv/models/ruleset/Building.kt @@ -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