Resolved #12107 - automated settlers take conditionals on settling locations into account

This commit is contained in:
yairm210 2024-08-11 22:48:57 +03:00
parent 6637e67ddb
commit 5eb2d39d5c

View File

@ -9,6 +9,7 @@ import com.unciv.logic.map.mapunit.MapUnit
import com.unciv.logic.map.tile.Tile
import com.unciv.models.ruleset.tile.ResourceType
import com.unciv.models.ruleset.unique.LocalUniqueCache
import com.unciv.models.ruleset.unique.StateForConditionals
import com.unciv.models.ruleset.unique.UniqueType
object CityLocationTileRanker {
@ -31,7 +32,10 @@ object CityLocationTileRanker {
val nearbyCities = unit.civ.gameInfo.getCities()
.filter { it.getCenterTile().aerialDistanceTo(unit.getTile()) <= 7 + range }
val uniques = unit.getMatchingUniques(UniqueType.FoundCity)
val possibleCityLocations = unit.getTile().getTilesInDistance(range)
// Filter out tiles that we can't actually found on
.filter { tile -> uniques.any { it.conditionalsApply(StateForConditionals(unit = unit, tile = tile)) } }
.filter { canSettleTile(it, unit.civ, nearbyCities) && (unit.getTile() == it || unit.movement.canMoveTo(it)) }
val uniqueCache = LocalUniqueCache()
val bestTilesToFoundCity = BestTilesToFoundCity()