AI units now go out and explore unseen areas

This commit is contained in:
Yair Morgenstern
2018-09-16 23:14:35 +03:00
parent c1e6c8e894
commit a1f824842d
5 changed files with 15 additions and 7 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 KiB

View File

@ -21,8 +21,8 @@ android {
applicationId "com.unciv.game"
minSdkVersion 14
targetSdkVersion 26
versionCode 137
versionName "2.8.5"
versionCode 138
versionName "2.8.6"
}
buildTypes {
release {

View File

@ -66,7 +66,7 @@ class UnitAutomation{
if (tryHeadTowardsEnemyCity(unit)) return
// else, go to a random space
randomWalk(unit,unitDistanceToTiles)
explore(unit,unitDistanceToTiles)
// if both failed, then... there aren't any reachable tiles. Which is possible.
}
@ -259,8 +259,15 @@ class UnitAutomation{
return false
}
private fun randomWalk(unit: MapUnit, unitDistanceToTiles: HashMap<TileInfo, Float>) {
val reachableTiles = unitDistanceToTiles
private fun explore(unit: MapUnit, unitDistanceToTiles: HashMap<TileInfo, Float>) {
for(tile in unit.currentTile.getTilesInDistance(5))
if(unit.canMoveTo(tile) && tile.position !in unit.civInfo.exploredTiles
&& unit.movementAlgs().canReach(tile)){
unit.movementAlgs().headTowards(tile)
return
}
val reachableTiles= unitDistanceToTiles
.filter { unit.canMoveTo(it.key) }
val reachableTilesMaxWalkingDistance = reachableTiles.filter { it.value == unit.currentMovement }
if (reachableTilesMaxWalkingDistance.any()) unit.moveToTile(reachableTilesMaxWalkingDistance.toList().getRandom().first)
@ -296,7 +303,7 @@ class UnitAutomation{
if(bestCityLocation==null) // We got a badass over here, all tiles within 5 are taken? Screw it, random walk.
{
randomWalk(unit, unit.getDistanceToTiles())
explore(unit, unit.getDistanceToTiles())
return
}

View File

@ -231,7 +231,8 @@ class CityStats {
val newTiles = tilesToCheck
.flatMap { it.neighbors }.distinct()
.filter {
!tilesReached.contains(it) && !tilesToCheck.contains(it)
!tilesReached.contains(it)
&& !tilesToCheck.contains(it)
&& (roadType !== RoadStatus.Road || it.roadStatus !== RoadStatus.None)
&& (roadType !== RoadStatus.Railroad || it.roadStatus === roadType)
}