mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-07 00:41:39 +07:00
Fix canImprovementBeBuiltHere regression (#4623)
This commit is contained in:
@ -430,9 +430,12 @@ open class TileInfo {
|
||||
// deprecated as of 3.15.15
|
||||
"Can only be built on Coastal tiles" in improvement.uniques && isCoastalTile() -> true
|
||||
//
|
||||
improvement.uniqueObjects.filter { it.placeholderText == "Can only be built on [] tiles" }.all {
|
||||
unique -> matchesTerrainFilter(unique.params[0])
|
||||
|
||||
// If an unique of this type exists, we want all to match (e.g. Hill _and_ Forest would be meaningful).
|
||||
improvement.uniqueObjects.filter { it.placeholderText == "Can only be built on [] tiles" }.let {
|
||||
it.any() && it.all { unique -> matchesTerrainFilter(unique.params[0]) }
|
||||
} -> true
|
||||
|
||||
else -> resourceIsVisible && getTileResource().improvement == improvement.name
|
||||
}
|
||||
}
|
||||
|
@ -89,6 +89,19 @@ class TileImprovementConstructionTests {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun coastalImprovementsCanNOTBeBuiltInland() {
|
||||
tile.baseTerrain = "Plains"
|
||||
tile.setTransients()
|
||||
|
||||
for (improvement in ruleSet.tileImprovements.values) {
|
||||
if (!improvement.uniques.contains("Can only be built on [Coastal] tiles")) continue
|
||||
civInfo.civName = improvement.uniqueTo ?: "OtherCiv"
|
||||
val canBeBuilt = tile.canBuildImprovement(improvement, civInfo)
|
||||
Assert.assertFalse(improvement.name, canBeBuilt)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun uniqueToOtherImprovementsCanNOTBeBuilt() {
|
||||
for (improvement in ruleSet.tileImprovements.values) {
|
||||
@ -101,6 +114,25 @@ class TileImprovementConstructionTests {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun improvementsCanNOTBeBuiltOnWrongResource() {
|
||||
tile.baseTerrain = "Plains"
|
||||
civInfo.civName = "OtherCiv"
|
||||
|
||||
for (resource in ruleSet.tileResources.values) {
|
||||
if (resource.improvement == null) continue
|
||||
val improvement = ruleSet.tileImprovements[resource.improvement]!!
|
||||
if (improvement.terrainsCanBeBuiltOn.isNotEmpty()) continue
|
||||
val wrongResource = ruleSet.tileResources.values.firstOrNull {
|
||||
it != resource && it.improvement != improvement.name
|
||||
} ?: continue
|
||||
tile.resource = wrongResource.name
|
||||
tile.setTransients()
|
||||
val canBeBuilt = tile.canBuildImprovement(improvement, civInfo)
|
||||
Assert.assertFalse(improvement.name, canBeBuilt)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun terraceFarmCanNOTBeBuiltOnBonus() {
|
||||
tile.baseTerrain = "Plains"
|
||||
|
Reference in New Issue
Block a user