mirror of
https://github.com/yairm210/Unciv.git
synced 2025-02-10 02:47:24 +07:00
Resolved #8736 - AI Workers remove fallout
This commit is contained in:
parent
cfc292eb0a
commit
8d2af7af78
@ -295,12 +295,13 @@ class WorkerAutomation(
|
|||||||
.sortedByDescending { getPriority(it) }
|
.sortedByDescending { getPriority(it) }
|
||||||
|
|
||||||
// These are the expensive calculations (tileCanBeImproved, canReach), so we only apply these filters after everything else it done.
|
// These are the expensive calculations (tileCanBeImproved, canReach), so we only apply these filters after everything else it done.
|
||||||
val selectedTile = workableTiles.firstOrNull { unit.movement.canReach(it) && (tileCanBeImproved(unit, it) || it.isPillaged()) }
|
val selectedTile =
|
||||||
|
workableTiles.firstOrNull { unit.movement.canReach(it) && (tileCanBeImproved(unit, it) || it.isPillaged()) }
|
||||||
|
?: return currentTile
|
||||||
|
|
||||||
return if (selectedTile != null
|
return if ((!tileCanBeImproved(unit, currentTile) && !currentTile.isPillaged()) // current tile is unimprovable
|
||||||
&& ((!tileCanBeImproved(unit, currentTile) && !currentTile.isPillaged()) // current tile is unimprovable
|
|
||||||
|| !workableTiles.contains(currentTile) // current tile is unworkable by city
|
|| !workableTiles.contains(currentTile) // current tile is unworkable by city
|
||||||
|| getPriority(selectedTile) > getPriority(currentTile))) // current tile is less important
|
|| getPriority(selectedTile) > getPriority(currentTile)) // current tile is less important
|
||||||
selectedTile
|
selectedTile
|
||||||
else currentTile
|
else currentTile
|
||||||
}
|
}
|
||||||
@ -389,16 +390,15 @@ class WorkerAutomation(
|
|||||||
|
|
||||||
val lastTerrain = tile.lastTerrain
|
val lastTerrain = tile.lastTerrain
|
||||||
|
|
||||||
fun isUnbuildableAndRemovable(terrain: Terrain): Boolean = terrain.unbuildable
|
fun isRemovable(terrain: Terrain): Boolean = ruleSet.tileImprovements.containsKey(Constants.remove + terrain.name)
|
||||||
&& ruleSet.tileImprovements.containsKey(Constants.remove + terrain.name)
|
|
||||||
|
|
||||||
|
|
||||||
val improvementStringForResource: String? = when {
|
val improvementStringForResource: String? = when {
|
||||||
tile.resource == null || !tile.hasViewableResource(civInfo) -> null
|
tile.resource == null || !tile.hasViewableResource(civInfo) -> null
|
||||||
tile.terrainFeatures.isNotEmpty()
|
tile.terrainFeatures.isNotEmpty()
|
||||||
&& isUnbuildableAndRemovable(lastTerrain)
|
&& lastTerrain.unbuildable
|
||||||
&& !tile.providesResources(civInfo)
|
&& isRemovable(lastTerrain)
|
||||||
&& !isResourceImprovementAllowedOnFeature(tile, potentialTileImprovements) -> Constants.remove + lastTerrain.name
|
&& !tile.providesResources(civInfo)
|
||||||
|
&& !isResourceImprovementAllowedOnFeature(tile, potentialTileImprovements) -> Constants.remove + lastTerrain.name
|
||||||
else -> tile.tileResource.getImprovements().filter { it in potentialTileImprovements || it==tile.improvement }
|
else -> tile.tileResource.getImprovements().filter { it in potentialTileImprovements || it==tile.improvement }
|
||||||
.maxByOrNull { getRankingWithImprovement(it) }
|
.maxByOrNull { getRankingWithImprovement(it) }
|
||||||
}
|
}
|
||||||
@ -411,12 +411,14 @@ class WorkerAutomation(
|
|||||||
tile.resource != null && tile.tileResource.getImprovements().any() -> return null
|
tile.resource != null && tile.tileResource.getImprovements().any() -> return null
|
||||||
bestBuildableImprovement == null -> null
|
bestBuildableImprovement == null -> null
|
||||||
|
|
||||||
tile.improvement!=null && getRankingWithImprovement(tile.improvement!!) > getRankingWithImprovement(bestBuildableImprovement.name)
|
tile.improvement != null &&
|
||||||
|
getRankingWithImprovement(tile.improvement!!) > getRankingWithImprovement(bestBuildableImprovement.name)
|
||||||
-> null // What we have is better, even if it's pillaged we should repair it
|
-> null // What we have is better, even if it's pillaged we should repair it
|
||||||
|
|
||||||
lastTerrain.let {
|
lastTerrain.let {
|
||||||
isUnbuildableAndRemovable(it) &&
|
isRemovable(it) &&
|
||||||
(Automation.rankStatsValue(it, civInfo) < 0 || it.hasUnique(UniqueType.NullifyYields) )
|
(Automation.rankStatsValue(it, civInfo) < 0
|
||||||
|
|| it.hasUnique(UniqueType.NullifyYields))
|
||||||
} -> Constants.remove + lastTerrain.name
|
} -> Constants.remove + lastTerrain.name
|
||||||
|
|
||||||
else -> bestBuildableImprovement.name
|
else -> bestBuildableImprovement.name
|
||||||
|
Loading…
Reference in New Issue
Block a user