mirror of
https://github.com/yairm210/Unciv.git
synced 2025-10-03 00:45:19 -04:00
Added Great War Bomber
Air units now require Oil
This commit is contained in:
parent
cf8d9f9ff1
commit
b9a7f7e1d0
@ -838,7 +838,6 @@
|
|||||||
hurryCostModifier:20,
|
hurryCostModifier:20,
|
||||||
attackSound:"shot"
|
attackSound:"shot"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
name:"Triplane",
|
name:"Triplane",
|
||||||
unitType:"Fighter",
|
unitType:"Fighter",
|
||||||
@ -848,11 +847,25 @@
|
|||||||
range:5,
|
range:5,
|
||||||
cost: 325,
|
cost: 325,
|
||||||
requiredTech:"Flight",
|
requiredTech:"Flight",
|
||||||
|
requiredResource:"Oil",
|
||||||
hurryCostModifier:20,
|
hurryCostModifier:20,
|
||||||
uniques:["[50]% chance to intercept air attacks","Bonus vs Bomber 150%",
|
uniques:["[50]% chance to intercept air attacks","Bonus vs Bomber 150%",
|
||||||
"6 tiles in every direction always visible"]
|
"6 tiles in every direction always visible"]
|
||||||
attackSound:"shot"
|
attackSound:"shot"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name:"Great War Bomber",
|
||||||
|
unitType:"Bomber",
|
||||||
|
movement:1,
|
||||||
|
strength:50,
|
||||||
|
rangedStrength:50,
|
||||||
|
range:6,
|
||||||
|
cost: 325,
|
||||||
|
requiredTech:"Flight",
|
||||||
|
requiredResource:"Oil",
|
||||||
|
hurryCostModifier:20,
|
||||||
|
attackSound:"shot"
|
||||||
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
{
|
{
|
||||||
|
@ -21,8 +21,8 @@ android {
|
|||||||
applicationId "com.unciv.app"
|
applicationId "com.unciv.app"
|
||||||
minSdkVersion 14
|
minSdkVersion 14
|
||||||
targetSdkVersion 28
|
targetSdkVersion 28
|
||||||
versionCode 272
|
versionCode 273
|
||||||
versionName "2.18.1"
|
versionName "2.18.2"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Had to add this crap for Travis to build, it wanted to sign the app
|
// Had to add this crap for Travis to build, it wanted to sign the app
|
||||||
|
@ -208,4 +208,32 @@ class SpecificUnitAutomation{
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun automateBomber(unit: MapUnit) {
|
||||||
|
if(UnitAutomation().tryAttackNearbyEnemy(unit)) return
|
||||||
|
|
||||||
|
val tilesInRange = unit.currentTile.getTilesInDistance(unit.getRange())
|
||||||
|
val immediatelyReachableCities = tilesInRange
|
||||||
|
.filter { it.isCityCenter() && it.getOwner()==unit.civInfo && unit.movement.canMoveTo(it)}
|
||||||
|
|
||||||
|
for(city in immediatelyReachableCities){
|
||||||
|
if(city.getTilesInDistance(unit.getRange())
|
||||||
|
.any { UnitAutomation().containsAttackableEnemy(it,MapUnitCombatant(unit)) }) {
|
||||||
|
unit.movement.moveToTile(city)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val pathsToCities = unit.movement.getArialPathsToCities()
|
||||||
|
if(pathsToCities.size==1) return // can't actually move anywhere else
|
||||||
|
|
||||||
|
val citiesThatCanAttackFrom = pathsToCities.keys
|
||||||
|
.filter { it.getTilesInDistance(unit.getRange())
|
||||||
|
.any { UnitAutomation().containsAttackableEnemy(it,MapUnitCombatant(unit)) } }
|
||||||
|
if(citiesThatCanAttackFrom.isEmpty()) return
|
||||||
|
|
||||||
|
val closestCityThatCanAttackFrom = citiesThatCanAttackFrom.minBy { pathsToCities[it]!!.size }!!
|
||||||
|
val firstStepInPath = pathsToCities[closestCityThatCanAttackFrom]!!.first()
|
||||||
|
unit.movement.moveToTile(firstStepInPath)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -36,6 +36,9 @@ class UnitAutomation{
|
|||||||
if(unit.type==UnitType.Fighter)
|
if(unit.type==UnitType.Fighter)
|
||||||
return SpecificUnitAutomation().automateFighter(unit)
|
return SpecificUnitAutomation().automateFighter(unit)
|
||||||
|
|
||||||
|
if(unit.type==UnitType.Bomber)
|
||||||
|
return SpecificUnitAutomation().automateBomber(unit)
|
||||||
|
|
||||||
if(unit.name.startsWith("Great")
|
if(unit.name.startsWith("Great")
|
||||||
&& unit.name in GreatPersonManager().statToGreatPersonMapping.values){ // So "Great War Infantry" isn't caught here
|
&& unit.name in GreatPersonManager().statToGreatPersonMapping.values){ // So "Great War Infantry" isn't caught here
|
||||||
return SpecificUnitAutomation().automateGreatPerson(unit)
|
return SpecificUnitAutomation().automateGreatPerson(unit)
|
||||||
@ -384,6 +387,8 @@ class UnitAutomation{
|
|||||||
val cityTilesToAttack = attackableEnemies.filter { it.tileToAttack.isCityCenter() }
|
val cityTilesToAttack = attackableEnemies.filter { it.tileToAttack.isCityCenter() }
|
||||||
val nonCityTilesToAttack = attackableEnemies.filter { !it.tileToAttack.isCityCenter() }
|
val nonCityTilesToAttack = attackableEnemies.filter { !it.tileToAttack.isCityCenter() }
|
||||||
|
|
||||||
|
// todo add filter undefended tile if is air unit
|
||||||
|
|
||||||
var enemyTileToAttack: AttackableTile? = null
|
var enemyTileToAttack: AttackableTile? = null
|
||||||
val capturableCity = cityTilesToAttack.firstOrNull{it.tileToAttack.getCity()!!.health == 1}
|
val capturableCity = cityTilesToAttack.firstOrNull{it.tileToAttack.getCity()!!.health == 1}
|
||||||
val cityWithHealthLeft = cityTilesToAttack.filter { it.tileToAttack.getCity()!!.health != 1 } // don't want ranged units to attack defeated cities
|
val cityWithHealthLeft = cityTilesToAttack.filter { it.tileToAttack.getCity()!!.health != 1 } // don't want ranged units to attack defeated cities
|
||||||
@ -394,6 +399,7 @@ class UnitAutomation{
|
|||||||
|
|
||||||
else if (nonCityTilesToAttack.isNotEmpty()) // second priority, units
|
else if (nonCityTilesToAttack.isNotEmpty()) // second priority, units
|
||||||
enemyTileToAttack = nonCityTilesToAttack.minBy { Battle(unit.civInfo.gameInfo).getMapCombatantOfTile(it.tileToAttack)!!.getHealth() }
|
enemyTileToAttack = nonCityTilesToAttack.minBy { Battle(unit.civInfo.gameInfo).getMapCombatantOfTile(it.tileToAttack)!!.getHealth() }
|
||||||
|
|
||||||
else if (cityWithHealthLeft!=null) enemyTileToAttack = cityWithHealthLeft// third priority, city
|
else if (cityWithHealthLeft!=null) enemyTileToAttack = cityWithHealthLeft// third priority, city
|
||||||
|
|
||||||
return enemyTileToAttack
|
return enemyTileToAttack
|
||||||
|
Loading…
x
Reference in New Issue
Block a user