From 51e444df6d8f7fae515ede081d3fd4d860cae66a Mon Sep 17 00:00:00 2001 From: Will Allen Date: Sun, 17 Dec 2023 14:02:59 -0600 Subject: [PATCH] Units that can't build roads should not have connect roads automation. (#10760) --- .../unit/actions/UnitActionsFromUniques.kt | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsFromUniques.kt b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsFromUniques.kt index be6984e010..ba01b841dd 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsFromUniques.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsFromUniques.kt @@ -271,7 +271,20 @@ object UnitActionsFromUniques { fun getConnectRoadActions(unit: MapUnit, tile: Tile) = sequence { if (!unit.hasUnique(UniqueType.BuildImprovements)) return@sequence - if (unit.civ.tech.getBestRoadAvailable() == RoadStatus.None) return@sequence + val unitCivBestRoad = unit.civ.tech.getBestRoadAvailable() + if (unitCivBestRoad == RoadStatus.None) return@sequence + + var unitCanBuildRoad = false + val uniquesToCheck = UnitActionModifiers.getUsableUnitActionUniques(unit, UniqueType.BuildImprovements) + + // If a unit has terrainFilter "Land" or improvementFilter "All", then we may proceed. + // If a unit only had improvement filter "Road" or "Railroad", then we need to also check if that tech is unlocked + unitCanBuildRoad = uniquesToCheck.any { it.params[0] == "Land" || it.params[0] == "All" } + || uniquesToCheck.any {it.params[0] == "Road" } && (unitCivBestRoad == RoadStatus.Road || unitCivBestRoad == RoadStatus.Railroad) + || uniquesToCheck.any {it.params[0] == "Railroad"} && (unitCivBestRoad == RoadStatus.Railroad) + + if(!unitCanBuildRoad) return@sequence + val worldScreen = GUI.getWorldScreen() yield(UnitAction(UnitActionType.ConnectRoad, isCurrentAction = unit.isAutomatingRoadConnection(),