Railroad connection propagates correctly over harbor connections

This commit is contained in:
Yair Morgenstern 2020-07-28 09:27:37 +03:00
parent b816d1036d
commit 9d2cc90ccd
3 changed files with 14 additions and 10 deletions

View File

@ -362,9 +362,11 @@ class CityStats {
} }
fun isConnectedToCapital(roadType: RoadStatus): Boolean { fun isConnectedToCapital(roadType: RoadStatus): Boolean {
if (cityInfo.civInfo.cities.count() < 2) return false// first city! if (cityInfo.civInfo.cities .count() < 2) return false// first city!
return cityInfo.isConnectedToCapital { it.contains(roadType.name) || it.contains("Harbor") } // Railroad, or harbor from railroad
if (roadType == RoadStatus.Railroad) return cityInfo.isConnectedToCapital { it.any { it.contains("Railroad") } }
else return cityInfo.isConnectedToCapital()
} }
//endregion //endregion

View File

@ -19,7 +19,8 @@ class CapitalConnectionsFinder(private val civInfo: CivilizationInfo) {
private val road = RoadStatus.Road.name private val road = RoadStatus.Road.name
private val railroad = RoadStatus.Railroad.name private val railroad = RoadStatus.Railroad.name
private val harbor = "Harbor" private val harborFromRoad = "Harbor-Road"
private val harborFromRailroad = "Harbor-Railroad"
init { init {
citiesReachedToMediums[civInfo.getCapital()] = hashSetOf("Start") citiesReachedToMediums[civInfo.getCapital()] = hashSetOf("Start")
@ -36,8 +37,10 @@ class CapitalConnectionsFinder(private val civInfo: CivilizationInfo) {
if (cityToConnectFrom.containsHarbor()) { if (cityToConnectFrom.containsHarbor()) {
checkHarbor(cityToConnectFrom) checkHarbor(cityToConnectFrom)
} }
if (railroadIsResearched) { if (railroadIsResearched){
checkRailroad(cityToConnectFrom) val mediumsReached= citiesReachedToMediums[cityToConnectFrom]!!
if(mediumsReached.contains("Start") || mediumsReached.contains(railroad) || mediumsReached.contains(harborFromRailroad))
checkRailroad(cityToConnectFrom) // This is only relevant for city connection if there is an unbreaking line from the capital
} }
if (theWheelIsResearched) { if (theWheelIsResearched) {
checkRoad(cityToConnectFrom) checkRoad(cityToConnectFrom)
@ -61,21 +64,22 @@ class CapitalConnectionsFinder(private val civInfo: CivilizationInfo) {
check( check(
cityToConnectFrom, cityToConnectFrom,
transportType = railroad, transportType = railroad,
tileFilter = { tile -> tile.hasRailroad() || tile.isCityCenter() } tileFilter = { tile -> tile.roadStatus == RoadStatus.Railroad || tile.isCityCenter() }
) )
} }
private fun checkHarbor(cityToConnectFrom: CityInfo) { private fun checkHarbor(cityToConnectFrom: CityInfo) {
check( check(
cityToConnectFrom, cityToConnectFrom,
transportType = harbor, transportType = if(cityToConnectFrom.wasPreviouslyReached("Railroad",null)) harborFromRailroad else harborFromRoad,
overridingTransportType = harborFromRailroad,
tileFilter = { tile -> tile.isWater || tile.isCityCenter() }, tileFilter = { tile -> tile.isWater || tile.isCityCenter() },
cityFilter = { city -> city.containsHarbor() } cityFilter = { city -> city.containsHarbor() }
) )
} }
private fun CityInfo.containsHarbor() = private fun CityInfo.containsHarbor() =
this.cityConstructions.containsBuildingOrEquivalent(harbor) this.cityConstructions.containsBuildingOrEquivalent("Harbor")
private fun check(cityToConnectFrom: CityInfo, private fun check(cityToConnectFrom: CityInfo,
transportType: String, transportType: String,

View File

@ -447,8 +447,6 @@ open class TileInfo {
fun hasConnection(civInfo: CivilizationInfo) = fun hasConnection(civInfo: CivilizationInfo) =
roadStatus != RoadStatus.None || forestOrJungleAreRoads(civInfo) roadStatus != RoadStatus.None || forestOrJungleAreRoads(civInfo)
fun hasRailroad() =
roadStatus == RoadStatus.Railroad
private fun forestOrJungleAreRoads(civInfo: CivilizationInfo) = private fun forestOrJungleAreRoads(civInfo: CivilizationInfo) =
civInfo.nation.forestsAndJunglesAreRoads civInfo.nation.forestsAndJunglesAreRoads