diff --git a/core/src/com/unciv/logic/automation/WorkerAutomation.kt b/core/src/com/unciv/logic/automation/WorkerAutomation.kt index 6fe026e907..80a91cf933 100644 --- a/core/src/com/unciv/logic/automation/WorkerAutomation.kt +++ b/core/src/com/unciv/logic/automation/WorkerAutomation.kt @@ -212,33 +212,33 @@ class WorkerAutomation( } while (true) { for (cityTile in cityTilesToSeek) { - if (bfs.hasReachedTile(cityTile)) { // we have a winner! - val pathToCity = bfs.getPathTo(cityTile) - val roadableTiles = pathToCity.filter { it.roadStatus < bestRoadAvailable } - val tileToConstructRoadOn: TileInfo - if (currentTile in roadableTiles) tileToConstructRoadOn = - currentTile - else { - val reachableTile = roadableTiles - .sortedBy { it.aerialDistanceTo(unit.getTile()) } - .firstOrNull { - unit.movement.canMoveTo(it) && unit.movement.canReach( - it - ) - } - ?: continue - tileToConstructRoadOn = reachableTile - unit.movement.headTowards(tileToConstructRoadOn) - } - if (unit.currentMovement > 0 && currentTile == tileToConstructRoadOn - && currentTile.improvementInProgress != bestRoadAvailable.name) { - val improvement = bestRoadAvailable.improvement(ruleSet)!! - tileToConstructRoadOn.startWorkingOnImprovement(improvement, civInfo) - } - if (WorkerAutomationConst.consoleOutput) - println("WorkerAutomation: ${unit.label()} -> connect city ${bfs.startingPoint.getCity()?.name} to ${cityTile.getCity()!!.name} on $tileToConstructRoadOn") - return true + if (!bfs.hasReachedTile(cityTile)) continue + // we have a winner! + val pathToCity = bfs.getPathTo(cityTile) + val roadableTiles = pathToCity.filter { it.roadStatus < bestRoadAvailable } + val tileToConstructRoadOn: TileInfo + if (currentTile in roadableTiles) tileToConstructRoadOn = + currentTile + else { + val reachableTile = roadableTiles + .sortedBy { it.aerialDistanceTo(unit.getTile()) } + .firstOrNull { + unit.movement.canMoveTo(it) && unit.movement.canReach( + it + ) + } + ?: continue + tileToConstructRoadOn = reachableTile + unit.movement.headTowards(tileToConstructRoadOn) } + if (unit.currentMovement > 0 && currentTile == tileToConstructRoadOn + && currentTile.improvementInProgress != bestRoadAvailable.name) { + val improvement = bestRoadAvailable.improvement(ruleSet)!! + tileToConstructRoadOn.startWorkingOnImprovement(improvement, civInfo) + } + if (WorkerAutomationConst.consoleOutput) + println("WorkerAutomation: ${unit.label()} -> connect city ${bfs.startingPoint.getCity()?.name} to ${cityTile.getCity()!!.name} on $tileToConstructRoadOn") + return true } if (bfs.hasEnded()) break bfs.nextStep() diff --git a/core/src/com/unciv/logic/civilization/CityStateFunctions.kt b/core/src/com/unciv/logic/civilization/CityStateFunctions.kt index 53dafad087..84f95b1d46 100644 --- a/core/src/com/unciv/logic/civilization/CityStateFunctions.kt +++ b/core/src/com/unciv/logic/civilization/CityStateFunctions.kt @@ -349,7 +349,7 @@ class CityStateFunctions(val civInfo: CivilizationInfo) { if (!requireWholeList && modifiers.values.sum() < -100) return modifiers - val bullyRange = max(5, civInfo.gameInfo.tileMap.tileMatrix.size / 10) // Longer range for larger maps + val bullyRange = (civInfo.gameInfo.tileMap.tileMatrix.size / 10).coerceIn(5, 10) // Longer range for larger maps val inRangeTiles = civInfo.getCapital().getCenterTile().getTilesInDistanceRange(1..bullyRange) val forceNearCity = inRangeTiles .sumOf { if (it.militaryUnit?.civInfo == demandingCiv) diff --git a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt index 2e0faff4df..038f8052f1 100644 --- a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt +++ b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt @@ -168,11 +168,11 @@ class DiplomacyManager() { return otherCiv().getDiplomacyManager(civInfo).relationshipLevel() if (civInfo.isCityState()) return when { + influence >= 60 && civInfo.getAllyCiv() == otherCivName -> RelationshipLevel.Ally + influence >= 30 -> RelationshipLevel.Friend influence <= -30 || civInfo.isAtWarWith(otherCiv()) -> RelationshipLevel.Unforgivable influence < 30 && civInfo.getTributeWillingness(otherCiv()) > 0 -> RelationshipLevel.Afraid influence < 0 -> RelationshipLevel.Enemy - influence >= 60 && civInfo.getAllyCiv() == otherCivName -> RelationshipLevel.Ally - influence >= 30 -> RelationshipLevel.Friend else -> RelationshipLevel.Neutral }