mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-28 14:24:43 -04:00
Un-hardcoded some settler checks
This commit is contained in:
parent
585be1b2be
commit
566a9529ef
@ -67,8 +67,6 @@ object Constants {
|
||||
const val disabled = "disabled"
|
||||
const val enabled = "enabled"
|
||||
|
||||
const val scienceConversionEffect = "Production to science conversion in cities increased by 33%"
|
||||
|
||||
const val ancientEra = "Ancient era"
|
||||
const val classicalEra = "Classical era"
|
||||
const val medievalEra = "Medieval era"
|
||||
|
@ -68,10 +68,12 @@ class WorkerAutomation(val unit: MapUnit) {
|
||||
val targetRoad = unit.civInfo.tech.getBestRoadAvailable()
|
||||
|
||||
val citiesThatNeedConnecting = unit.civInfo.cities.asSequence()
|
||||
.filter { it.population.population>3 && !it.isCapital() && !it.isBeingRazed //City being razed should not be connected.
|
||||
.filter {
|
||||
it.population.population > 3 && !it.isCapital() && !it.isBeingRazed //City being razed should not be connected.
|
||||
&& !it.cityStats.isConnectedToCapital(targetRoad)
|
||||
// Cities that are too far away make the caReach() calculations devastatingly long
|
||||
&& it.getCenterTile().aerialDistanceTo(unit.getTile()) < 20 }
|
||||
&& it.getCenterTile().aerialDistanceTo(unit.getTile()) < 20
|
||||
}
|
||||
if (citiesThatNeedConnecting.none()) return false // do nothing.
|
||||
|
||||
val citiesThatNeedConnectingBfs = citiesThatNeedConnecting
|
||||
@ -217,6 +219,7 @@ class WorkerAutomation(val unit: MapUnit) {
|
||||
if (improvementString == null) return null
|
||||
return unit.civInfo.gameInfo.ruleSet.tileImprovements[improvementString] // For mods, the tile improvement may not exist, so don't assume.
|
||||
}
|
||||
|
||||
private fun isImprovementOnFeatureAllowed(tile: TileInfo, civInfo: CivilizationInfo): Boolean {
|
||||
// routine assumes the caller ensured that terrainFeature and resource are both present
|
||||
val resourceImprovementName = tile.getTileResource().improvement
|
||||
@ -226,8 +229,7 @@ class WorkerAutomation(val unit: MapUnit) {
|
||||
return resourceImprovement.resourceTerrainAllow.contains(tile.terrainFeature!!)
|
||||
}
|
||||
|
||||
private fun isAcceptableTileForFort(tile: TileInfo, civInfo: CivilizationInfo): Boolean
|
||||
{
|
||||
private fun isAcceptableTileForFort(tile: TileInfo, civInfo: CivilizationInfo): Boolean {
|
||||
if (tile.isCityCenter() // don't build fort in the city
|
||||
|| !tile.isLand // don't build fort in the water
|
||||
|| tile.improvement == Constants.fort // don't build fort if it is already here
|
||||
@ -251,8 +253,9 @@ class WorkerAutomation(val unit: MapUnit) {
|
||||
// don't build forts too close to the cities
|
||||
if (closeTile.isCityCenter()) return false
|
||||
// don't build forts too close to other forts
|
||||
if (closeTile.improvement == Constants.fort || closeTile.improvement == Constants.citadel
|
||||
|| closeTile.improvementInProgress == Constants.fort) return false
|
||||
if (closeTile.improvement != null
|
||||
&& closeTile.getTileImprovement()!!.uniqueObjects.any { it.placeholderText == "Gives a defensive bonus of []%" }
|
||||
|| closeTile.improvementInProgress != Constants.fort) return false
|
||||
// there is another better tile for the fort
|
||||
if (!tile.isHill() && closeTile.isHill() &&
|
||||
isAcceptableTileForFort(closeTile, civInfo)) return false
|
||||
@ -273,7 +276,8 @@ class WorkerAutomation(val unit: MapUnit) {
|
||||
ThreatLevel.Medium -> 10
|
||||
ThreatLevel.High -> 15 // they are strong, let's built until they reach us
|
||||
ThreatLevel.VeryHigh -> 20
|
||||
} }
|
||||
}
|
||||
}
|
||||
val enemyCivsIsCloseEnough = enemyCivs.filter { NextTurnAutomation.getMinDistanceBetweenCities(civInfo, it) <= threatMapping(it) }
|
||||
// no threat, let's not build fort
|
||||
if (enemyCivsIsCloseEnough.isEmpty()) return false
|
||||
|
@ -41,12 +41,14 @@ object UniqueTriggerActivation {
|
||||
when (unique.placeholderText) {
|
||||
"Free [] appears" -> {
|
||||
val unitName = unique.params[0]
|
||||
if (chosenCity != null && (unitName != Constants.settler || !civInfo.isOneCityChallenger()))
|
||||
val unit = civInfo.gameInfo.ruleSet.units[unitName]
|
||||
if (chosenCity != null && unit != null && (!unit.uniques.contains("Founds a new city") || !civInfo.isOneCityChallenger()))
|
||||
civInfo.addUnit(unitName, chosenCity)
|
||||
}
|
||||
"[] free [] units appear" -> {
|
||||
val unitName = unique.params[1]
|
||||
if (chosenCity!=null && (unitName != Constants.settler || !civInfo.isOneCityChallenger()))
|
||||
val unit = civInfo.gameInfo.ruleSet.units[unitName]
|
||||
if (chosenCity != null && unit != null && (!unit.uniques.contains("Founds a new city") || !civInfo.isOneCityChallenger()))
|
||||
for (i in 1..unique.params[0].toInt())
|
||||
civInfo.addUnit(unitName, chosenCity)
|
||||
}
|
||||
@ -84,9 +86,11 @@ object UniqueTriggerActivation {
|
||||
val promotion = unique.params[1]
|
||||
for (unit in civInfo.getCivUnits())
|
||||
if (unit.matchesFilter(filter)
|
||||
|| (civInfo.gameInfo.ruleSet.unitPromotions.values.any { it.name == promotion
|
||||
&& unit.type.name in it.unitTypes }))
|
||||
unit.promotions.addPromotion(promotion, isFree = true)}
|
||||
|| (civInfo.gameInfo.ruleSet.unitPromotions.values.any {
|
||||
it.name == promotion && unit.type.name in it.unitTypes
|
||||
}))
|
||||
unit.promotions.addPromotion(promotion, isFree = true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user