mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-15 18:28:42 +07:00
Better great general placement calc
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
package com.unciv.logic.battle
|
||||
|
||||
import com.unciv.logic.automation.unit.BattleHelper
|
||||
import com.unciv.logic.automation.unit.SpecificUnitAutomation
|
||||
import com.unciv.logic.map.mapunit.MapUnit
|
||||
import com.unciv.logic.map.tile.Tile
|
||||
@ -93,7 +94,8 @@ object GreatGeneralImplementation {
|
||||
.maxByOrNull { unitTile ->
|
||||
unitTile.getTilesInDistance(unitBonusRadius).sumOf { auraTile ->
|
||||
val militaryUnit = auraTile.militaryUnit
|
||||
if (militaryUnit == null || militaryUnit.civ != general.civ) 0
|
||||
if (militaryUnit == null || militaryUnit.civ != general.civ || militaryUnit.isEmbarked()) 0
|
||||
else if (BattleHelper.getAttackableEnemies(militaryUnit, militaryUnit.movement.getDistanceToTiles()).isEmpty()) 0
|
||||
else generalBonusData.firstOrNull {
|
||||
// "Military" as commented above only a small optimization
|
||||
auraTile.aerialDistanceTo(unitTile) <= it.radius
|
||||
|
@ -145,7 +145,7 @@ class UnitMovementAlgorithms(val unit: MapUnit) {
|
||||
return true
|
||||
}
|
||||
|
||||
class ParentTileAndTotalDistance(val parentTile: Tile, val totalDistance: Float)
|
||||
class ParentTileAndTotalDistance(val tile:Tile, val parentTile: Tile, val totalDistance: Float)
|
||||
|
||||
fun isUnknownTileWeShouldAssumeToBePassable(tile: Tile) = !unit.civ.hasExplored(tile)
|
||||
|
||||
@ -160,7 +160,7 @@ class UnitMovementAlgorithms(val unit: MapUnit) {
|
||||
val currentUnitTile = unit.currentTile
|
||||
// This is for performance, because this is called all the time
|
||||
val unitTile = if (origin == currentUnitTile.position) currentUnitTile else currentUnitTile.tileMap[origin]
|
||||
distanceToTiles[unitTile] = ParentTileAndTotalDistance(unitTile, 0f)
|
||||
distanceToTiles[unitTile] = ParentTileAndTotalDistance(unitTile, unitTile, 0f)
|
||||
var tilesToCheck = listOf(unitTile)
|
||||
|
||||
while (tilesToCheck.isNotEmpty()) {
|
||||
@ -189,7 +189,7 @@ class UnitMovementAlgorithms(val unit: MapUnit) {
|
||||
// In Civ V, you can always travel between adjacent tiles, even if you don't technically
|
||||
// have enough movement points - it simply depletes what you have
|
||||
|
||||
distanceToTiles[neighbor] = ParentTileAndTotalDistance(tileToCheck, totalDistanceToTile)
|
||||
distanceToTiles[neighbor] = ParentTileAndTotalDistance(neighbor, tileToCheck, totalDistanceToTile)
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user