mirror of
https://github.com/yairm210/Unciv.git
synced 2025-02-23 13:10:54 +07:00
Differentiated attackable from visible tiles per Civ V
This commit is contained in:
parent
31acb7e469
commit
864145acbb
@ -68,8 +68,7 @@ object BattleHelper {
|
||||
val tilesInAttackRange =
|
||||
if (unit.hasUnique(UniqueType.IndirectFire) || unit.baseUnit.movesLikeAirUnits())
|
||||
reachableTile.getTilesInDistance(rangeOfAttack)
|
||||
else reachableTile.getViewableTilesList(rangeOfAttack)
|
||||
.asSequence()
|
||||
else reachableTile.tileMap.getViewableTiles(reachableTile.position, rangeOfAttack, true).asSequence()
|
||||
|
||||
for (tile in tilesInAttackRange) {
|
||||
if (tile in tilesWithEnemies) attackableTiles += AttackableTile(
|
||||
|
@ -329,7 +329,7 @@ class TileMap : IsPartOfGameInfoSerialization {
|
||||
data class ViewableTile(val tile:TileInfo, val maxHeightSeenToTile:Int, val isVisible:Boolean, val isAttackable: Boolean)
|
||||
|
||||
/** @return List of tiles visible from location [position] for a unit with sight range [sightDistance] */
|
||||
fun getViewableTiles(position: Vector2, sightDistance: Int): List<TileInfo> {
|
||||
fun getViewableTiles(position: Vector2, sightDistance: Int, forAttack:Boolean = false): List<TileInfo> {
|
||||
val aUnitHeight = get(position).unitHeight
|
||||
val viewableTiles = mutableListOf(ViewableTile(
|
||||
get(position),
|
||||
@ -373,6 +373,8 @@ class TileMap : IsPartOfGameInfoSerialization {
|
||||
viewableTiles.addAll(tilesToAddInDistanceI)
|
||||
}
|
||||
|
||||
if (forAttack) return viewableTiles.filter { it.isAttackable }.map { it.tile }
|
||||
|
||||
return viewableTiles.filter { it.isVisible }.map { it.tile }
|
||||
}
|
||||
|
||||
|
@ -186,6 +186,18 @@ class VisibilityTests {
|
||||
assert(viewableTiles.contains(beyondSight))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun canSeeElevation3TilesEvenWithInvisibleIntermediate() {
|
||||
val source = addTile("Grassland", Vector2(0f,0f))
|
||||
addTile(listOf("Grassland", "Hill"), Vector2(1f,0f))
|
||||
val intermediate = addTile(listOf("Grassland", "Hill"), Vector2(2f,0f))
|
||||
val beyondSight = addTile(listOf("Grassland", "Hill", "Forest"), Vector2(3f,0f))
|
||||
|
||||
val viewableTiles = source.getViewableTilesList(2)
|
||||
assert(viewableTiles.contains(beyondSight))
|
||||
assert(!viewableTiles.contains(intermediate))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun cannotSeeHiddenElevation3Tiles() {
|
||||
val source = addTile("Grassland", Vector2(0f,0f))
|
||||
@ -197,4 +209,26 @@ class VisibilityTests {
|
||||
assert(!viewableTiles.contains(beyondSight))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun canSeeButNotAttackHillForestOverHill() {
|
||||
val grassland = addTile("Grassland", Vector2(0f,0f))
|
||||
addTile(listOf("Grassland", "Hill"), Vector2(1f,0f))
|
||||
val hillForest = addTile(listOf("Grassland", "Hill", "Forest"), Vector2(2f, 0f))
|
||||
val viewableTiles = grassland.getViewableTilesList(2)
|
||||
assert(viewableTiles.contains(hillForest))
|
||||
val attackableTiles = tileMap.getViewableTiles(grassland.position, 2, true)
|
||||
assert(!attackableTiles.contains(hillForest))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun canSeeAndAttackMountainOverHill() {
|
||||
val grassland = addTile("Grassland", Vector2(0f,0f))
|
||||
addTile(listOf("Grassland", "Hill"), Vector2(1f,0f))
|
||||
val mountain = addTile(listOf("Mountain"), Vector2(2f, 0f))
|
||||
val viewableTiles = grassland.getViewableTilesList(2)
|
||||
assert(viewableTiles.contains(mountain))
|
||||
val attackableTiles = tileMap.getViewableTiles(grassland.position, 2, true)
|
||||
assert(attackableTiles.contains(mountain))
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user