mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-27 05:46:43 -04:00
Make units pillage improvement to heal, especially barbarians.
This commit is contained in:
parent
0ef11e12cd
commit
d91a23b723
@ -64,6 +64,11 @@ class UnitAutomation{
|
|||||||
// if there is an attackable unit in the vicinity, attack!
|
// if there is an attackable unit in the vicinity, attack!
|
||||||
if (tryAttackNearbyEnemy(unit,unitDistanceToTiles)) return
|
if (tryAttackNearbyEnemy(unit,unitDistanceToTiles)) return
|
||||||
|
|
||||||
|
// Barbarians try to pillage improvements if no targets reachable
|
||||||
|
if (unit.civInfo.isBarbarianCivilization()) {
|
||||||
|
if (pillageImprovement(unit, unitDistanceToTiles)) return
|
||||||
|
}
|
||||||
|
|
||||||
if (tryGarrisoningUnit(unit)) return
|
if (tryGarrisoningUnit(unit)) return
|
||||||
|
|
||||||
if (unit.health < 80) {
|
if (unit.health < 80) {
|
||||||
@ -101,6 +106,8 @@ class UnitAutomation{
|
|||||||
val tilesInDistance = unitDistanceToTiles.keys.filter { unit.canMoveTo(it) }
|
val tilesInDistance = unitDistanceToTiles.keys.filter { unit.canMoveTo(it) }
|
||||||
val unitTile = unit.getTile()
|
val unitTile = unit.getTile()
|
||||||
|
|
||||||
|
if (pillageImprovement(unit, unitDistanceToTiles)) return
|
||||||
|
|
||||||
val tilesByHealingRate = tilesInDistance.groupBy { rankTileForHealing(it,unit) }
|
val tilesByHealingRate = tilesInDistance.groupBy { rankTileForHealing(it,unit) }
|
||||||
if(tilesByHealingRate.isEmpty()) return
|
if(tilesByHealingRate.isEmpty()) return
|
||||||
val bestTilesForHealing = tilesByHealingRate.maxBy { it.key }!!.value
|
val bestTilesForHealing = tilesByHealingRate.maxBy { it.key }!!.value
|
||||||
@ -113,6 +120,20 @@ class UnitAutomation{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun pillageImprovement(unit: MapUnit, unitDistanceToTiles: HashMap<TileInfo, Float>) : Boolean {
|
||||||
|
val tilesInDistance = unitDistanceToTiles.filter {it.value < unit.currentMovement}.keys
|
||||||
|
.filter { unit.canMoveTo(it) && it.improvement != null }
|
||||||
|
|
||||||
|
if (tilesInDistance.isEmpty()) return false
|
||||||
|
val tileToPillage = tilesInDistance.maxBy { it.getDefensiveBonus() }!!
|
||||||
|
if (unit.getTile()!=tileToPillage)
|
||||||
|
unit.moveToTile(tileToPillage)
|
||||||
|
|
||||||
|
UnitActions().getUnitActions(unit,UnCivGame.Current.worldScreen)
|
||||||
|
.first { it.name=="Pillage" }.action()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
fun containsAttackableEnemy(tile: TileInfo, combatant: ICombatant): Boolean {
|
fun containsAttackableEnemy(tile: TileInfo, combatant: ICombatant): Boolean {
|
||||||
if(combatant is MapUnitCombatant){
|
if(combatant is MapUnitCombatant){
|
||||||
if (combatant.unit.isEmbarked()) {
|
if (combatant.unit.isEmbarked()) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user