Resolve #7937 - Automated workers no longer improve unworkable tiles

This commit is contained in:
Yair Morgenstern
2022-10-27 20:33:39 +03:00
parent 77c3aac931
commit ac557f36dd

View File

@ -5,8 +5,8 @@ import com.unciv.Constants
import com.unciv.UncivGame import com.unciv.UncivGame
import com.unciv.logic.HexMath import com.unciv.logic.HexMath
import com.unciv.logic.automation.Automation import com.unciv.logic.automation.Automation
import com.unciv.logic.automation.civilization.NextTurnAutomation
import com.unciv.logic.automation.ThreatLevel import com.unciv.logic.automation.ThreatLevel
import com.unciv.logic.automation.civilization.NextTurnAutomation
import com.unciv.logic.automation.unit.UnitAutomation.wander import com.unciv.logic.automation.unit.UnitAutomation.wander
import com.unciv.logic.city.CityInfo import com.unciv.logic.city.CityInfo
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
@ -285,17 +285,23 @@ class WorkerAutomation(
val city = tile.getCity() val city = tile.getCity()
if (city == null || city.civInfo != civInfo) if (city == null || city.civInfo != civInfo)
return false return false
if (!city.tilesInRange.contains(tile)
&& !tile.hasViewableResource(civInfo)
&& civInfo.cities.none { it.getCenterTile().aerialDistanceTo(tile) <= 3 })
return false // unworkable tile
val junkImprovement = tile.getTileImprovement()?.hasUnique(UniqueType.AutomatedWorkersWillReplace) val junkImprovement = tile.getTileImprovement()?.hasUnique(UniqueType.AutomatedWorkersWillReplace)
if (tile.improvement != null && junkImprovement == false && !UncivGame.Current.settings.automatedWorkersReplaceImprovements) { if (tile.improvement != null && junkImprovement == false
if (unit.civInfo.isPlayerCivilization()) && !UncivGame.Current.settings.automatedWorkersReplaceImprovements
return false && unit.civInfo.isPlayerCivilization())
} return false
if (tile.improvement == null || junkImprovement == true) { if (tile.improvement == null || junkImprovement == true) {
if (tile.improvementInProgress != null && unit.canBuildImprovement(tile.getTileImprovementInProgress()!!, tile)) return true if (tile.improvementInProgress != null && unit.canBuildImprovement(tile.getTileImprovementInProgress()!!, tile)) return true
val chosenImprovement = chooseImprovement(unit, tile) val chosenImprovement = chooseImprovement(unit, tile)
if (chosenImprovement != null && tile.canBuildImprovement(chosenImprovement, civInfo) && unit.canBuildImprovement(chosenImprovement, tile)) return true if (chosenImprovement != null && tile.canBuildImprovement(chosenImprovement, civInfo) && unit.canBuildImprovement(chosenImprovement, tile)) return true
} else if (!tile.containsGreatImprovement() && tile.hasViewableResource(civInfo) } else if (!tile.containsGreatImprovement() && tile.hasViewableResource(civInfo)
&& tile.tileResource.isImprovedBy(tile.improvement!!) && tile.tileResource.isImprovedBy(tile.improvement!!)
&& (chooseImprovement(unit, tile) // if the chosen improvement is not null and buildable && (chooseImprovement(unit, tile) // if the chosen improvement is not null and buildable