mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-26 15:49:14 +07:00
Resolved #1374 - air units should no longer move and attack in the same turn
This commit is contained in:
@ -210,23 +210,26 @@ class UnitAutomation{
|
|||||||
// Silly floats, basically
|
// Silly floats, basically
|
||||||
|
|
||||||
val unitMustBeSetUp = unit.hasUnique("Must set up to ranged attack")
|
val unitMustBeSetUp = unit.hasUnique("Must set up to ranged attack")
|
||||||
val tilesToAttackFrom = unitDistanceToTiles.asSequence()
|
val tilesToAttackFrom = if (unit.type.isAirUnit()) sequenceOf(unit.currentTile)
|
||||||
.filter {
|
else
|
||||||
val movementPointsToExpendAfterMovement = if(unitMustBeSetUp) 1 else 0
|
unitDistanceToTiles.asSequence()
|
||||||
val movementPointsToExpendHere = if(unitMustBeSetUp && unit.action != Constants.unitActionSetUp) 1 else 0
|
.filter {
|
||||||
val movementPointsToExpendBeforeAttack = if(it.key==unit.currentTile) movementPointsToExpendHere else movementPointsToExpendAfterMovement
|
val movementPointsToExpendAfterMovement = if (unitMustBeSetUp) 1 else 0
|
||||||
unit.currentMovement - it.value.totalDistance - movementPointsToExpendBeforeAttack > 0.1 } // still got leftover movement points after all that, to attack (0.1 is because of Float nensense, see MapUnit.moveToTile(...)
|
val movementPointsToExpendHere = if (unitMustBeSetUp && unit.action != Constants.unitActionSetUp) 1 else 0
|
||||||
.map { it.key }
|
val movementPointsToExpendBeforeAttack = if (it.key == unit.currentTile) movementPointsToExpendHere else movementPointsToExpendAfterMovement
|
||||||
.filter { unit.movement.canMoveTo(it) || it==unit.getTile() }
|
unit.currentMovement - it.value.totalDistance - movementPointsToExpendBeforeAttack > 0.1
|
||||||
|
} // still got leftover movement points after all that, to attack (0.1 is because of Float nonsense, see MapUnit.moveToTile(...)
|
||||||
|
.map { it.key }
|
||||||
|
.filter { unit.movement.canMoveTo(it) || it == unit.getTile() }
|
||||||
|
|
||||||
for(reachableTile in tilesToAttackFrom){ // tiles we'll still have energy after we reach there
|
for (reachableTile in tilesToAttackFrom) { // tiles we'll still have energy after we reach there
|
||||||
val tilesInAttackRange =
|
val tilesInAttackRange =
|
||||||
if (unit.hasUnique("Ranged attacks may be performed over obstacles") || unit.type.isAirUnit())
|
if (unit.hasUnique("Ranged attacks may be performed over obstacles") || unit.type.isAirUnit())
|
||||||
reachableTile.getTilesInDistance(rangeOfAttack)
|
reachableTile.getTilesInDistance(rangeOfAttack)
|
||||||
else reachableTile.getViewableTiles(rangeOfAttack, unit.type.isWaterUnit())
|
else reachableTile.getViewableTiles(rangeOfAttack, unit.type.isWaterUnit())
|
||||||
|
|
||||||
attackableTiles += tilesInAttackRange.asSequence().filter { it in tilesWithEnemies }
|
attackableTiles += tilesInAttackRange.asSequence().filter { it in tilesWithEnemies }
|
||||||
.map { AttackableTile(reachableTile,it) }
|
.map { AttackableTile(reachableTile, it) }
|
||||||
}
|
}
|
||||||
return attackableTiles
|
return attackableTiles
|
||||||
}
|
}
|
||||||
|
@ -44,12 +44,13 @@ class UnitMovementAlgorithms(val unit:MapUnit) {
|
|||||||
|
|
||||||
fun getDistanceToTilesWithinTurn(origin: Vector2, unitMovement: Float): PathsToTilesWithinTurn {
|
fun getDistanceToTilesWithinTurn(origin: Vector2, unitMovement: Float): PathsToTilesWithinTurn {
|
||||||
if(unitMovement==0f) return PathsToTilesWithinTurn()
|
if(unitMovement==0f) return PathsToTilesWithinTurn()
|
||||||
|
|
||||||
val distanceToTiles = PathsToTilesWithinTurn()
|
val distanceToTiles = PathsToTilesWithinTurn()
|
||||||
val unitTile = unit.getTile().tileMap[origin]
|
val unitTile = unit.getTile().tileMap[origin]
|
||||||
distanceToTiles[unitTile] = ParentTileAndTotalDistance(unitTile,0f)
|
distanceToTiles[unitTile] = ParentTileAndTotalDistance(unitTile,0f)
|
||||||
var tilesToCheck = listOf(unitTile)
|
var tilesToCheck = listOf(unitTile)
|
||||||
|
|
||||||
while (!tilesToCheck.isEmpty()) {
|
while (tilesToCheck.isNotEmpty()) {
|
||||||
val updatedTiles = ArrayList<TileInfo>()
|
val updatedTiles = ArrayList<TileInfo>()
|
||||||
for (tileToCheck in tilesToCheck)
|
for (tileToCheck in tilesToCheck)
|
||||||
for (neighbor in tileToCheck.neighbors) {
|
for (neighbor in tileToCheck.neighbors) {
|
||||||
|
Reference in New Issue
Block a user