mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-30 15:30:43 -04:00
Mark bombard targets.
This commit is contained in:
parent
9054496940
commit
7a17779bf4
@ -134,6 +134,17 @@ class UnitAutomation{
|
||||
return true
|
||||
}
|
||||
|
||||
fun containsBombardableEnemy(tile: TileInfo, city: CityInfo): Boolean {
|
||||
val tileCombatant = Battle(city.civInfo.gameInfo).getMapCombatantOfTile(tile)
|
||||
if(tileCombatant==null) return false
|
||||
if(tileCombatant.getCivilization()==city.civInfo) return false
|
||||
if(!city.civInfo.isAtWarWith(tileCombatant.getCivilization())) return false
|
||||
|
||||
//city cannot bombard submarine
|
||||
if (tileCombatant.isInvisible()) return false
|
||||
return true
|
||||
}
|
||||
|
||||
class AttackableTile(val tileToAttackFrom:TileInfo, val tileToAttack:TileInfo)
|
||||
|
||||
fun getAttackableEnemies(unit: MapUnit, unitDistanceToTiles: HashMap<TileInfo, Float>, minMovementBeforeAttack: Float = 0.1f): ArrayList<AttackableTile> {
|
||||
@ -162,6 +173,10 @@ class UnitAutomation{
|
||||
return attackableTiles
|
||||
}
|
||||
|
||||
fun getBombardTargets(city: CityInfo): List<TileInfo> {
|
||||
return city.getCenterTile().getViewableTiles(city.range).filter { containsBombardableEnemy(it, city) }
|
||||
}
|
||||
|
||||
private fun tryAdvanceTowardsCloseEnemy(unit: MapUnit): Boolean {
|
||||
// this can be sped up if we check each layer separately
|
||||
var closeEnemies = unit.getTile().getTilesInDistance(5)
|
||||
|
@ -32,7 +32,7 @@ class CityInfo {
|
||||
var tiles = HashSet<Vector2>()
|
||||
var workedTiles = HashSet<Vector2>()
|
||||
var isBeingRazed = false
|
||||
|
||||
val range = 2
|
||||
|
||||
constructor() // for json parsing, we need to have a default constructor
|
||||
constructor(civInfo: CivilizationInfo, cityLocation: Vector2) {
|
||||
|
@ -11,6 +11,7 @@ import com.badlogic.gdx.scenes.scene2d.utils.ActorGestureListener
|
||||
import com.unciv.UnCivGame
|
||||
import com.unciv.logic.HexMath
|
||||
import com.unciv.logic.automation.UnitAutomation
|
||||
import com.unciv.logic.city.CityInfo
|
||||
import com.unciv.logic.civilization.CivilizationInfo
|
||||
import com.unciv.logic.map.MapUnit
|
||||
import com.unciv.logic.map.TileInfo
|
||||
@ -211,11 +212,13 @@ class TileMapHolder(internal val worldScreen: WorldScreen, internal val tileMap:
|
||||
moveHereButtonDto=null
|
||||
}
|
||||
|
||||
if(worldScreen.bottomBar.unitTable.selectedUnit!=null){
|
||||
if (worldScreen.bottomBar.unitTable.selectedCity!=null){
|
||||
val city = worldScreen.bottomBar.unitTable.selectedCity!!
|
||||
updateTilegroupsForSelectedCity(city, playerViewableTilePositions)
|
||||
} else if(worldScreen.bottomBar.unitTable.selectedUnit!=null){
|
||||
val unit = worldScreen.bottomBar.unitTable.selectedUnit!!
|
||||
updateTilegroupsForSelectedUnit(unit, playerViewableTilePositions)
|
||||
}
|
||||
|
||||
else if(moveToOverlay!=null){
|
||||
moveToOverlay!!.remove()
|
||||
moveToOverlay=null
|
||||
@ -253,6 +256,15 @@ class TileMapHolder(internal val worldScreen: WorldScreen, internal val tileMap:
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateTilegroupsForSelectedCity(city: CityInfo, playerViewableTilePositions: HashSet<Vector2>) {
|
||||
val attackableTiles: List<TileInfo> = UnitAutomation().getBombardTargets(city)
|
||||
.filter { (UnCivGame.Current.viewEntireMapForDebug || playerViewableTilePositions.contains(it.position)) }
|
||||
for (attackableTile in attackableTiles) {
|
||||
tileGroups[attackableTile]!!.showCircle(colorFromRGB(237, 41, 57))
|
||||
tileGroups[attackableTile]!!.showCrosshair()
|
||||
}
|
||||
}
|
||||
|
||||
fun setCenterPosition(vector: Vector2) {
|
||||
val tileGroup = tileGroups.values.first { it.tileInfo.position == vector }
|
||||
selectedTile = tileGroup.tileInfo
|
||||
|
Loading…
x
Reference in New Issue
Block a user