mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-15 18:28:42 +07:00
Added automated exploration for scout units
This commit is contained in:
@ -58,6 +58,7 @@ class GameStarter(){
|
|||||||
|
|
||||||
civ.placeUnitNearTile(startingLocation, "Settler")
|
civ.placeUnitNearTile(startingLocation, "Settler")
|
||||||
civ.placeUnitNearTile(startingLocation, "Warrior")
|
civ.placeUnitNearTile(startingLocation, "Warrior")
|
||||||
|
civ.placeUnitNearTile(startingLocation, "Scout")
|
||||||
|
|
||||||
freeTiles.removeAll(gameInfo.tileMap.getTilesInDistance(startingLocation, distanceAroundStartingPointNoOneElseWillStartIn ))
|
freeTiles.removeAll(gameInfo.tileMap.getTilesInDistance(startingLocation, distanceAroundStartingPointNoOneElseWillStartIn ))
|
||||||
}
|
}
|
||||||
|
@ -275,7 +275,7 @@ class UnitAutomation{
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun rankTileAsCityCenter(tileInfo: TileInfo, nearbyTileRankings: Map<TileInfo, Float>): Float {
|
fun rankTileAsCityCenter(tileInfo: TileInfo, nearbyTileRankings: Map<TileInfo, Float>): Float {
|
||||||
val bestTilesFromOuterLayer = tileInfo.tileMap.getTilesAtDistance(tileInfo.position,2)
|
val bestTilesFromOuterLayer = tileInfo.getTilesAtDistance(2)
|
||||||
.sortedByDescending { nearbyTileRankings[it] }.take(2)
|
.sortedByDescending { nearbyTileRankings[it] }.take(2)
|
||||||
val top5Tiles = tileInfo.neighbors.union(bestTilesFromOuterLayer)
|
val top5Tiles = tileInfo.neighbors.union(bestTilesFromOuterLayer)
|
||||||
.sortedByDescending { nearbyTileRankings[it] }
|
.sortedByDescending { nearbyTileRankings[it] }
|
||||||
@ -316,4 +316,16 @@ class UnitAutomation{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun automatedExplore(unit:MapUnit){
|
||||||
|
for(i in 1..10){
|
||||||
|
val unexploredTilesAtDistance = unit.getTile().getTilesAtDistance(i)
|
||||||
|
.filter { unit.canMoveTo(it) && it.position !in unit.civInfo.exploredTiles
|
||||||
|
&& unit.movementAlgs().canReach(it) }
|
||||||
|
if(unexploredTilesAtDistance.isNotEmpty()){
|
||||||
|
unit.movementAlgs().headTowards(unexploredTilesAtDistance.getRandom())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package com.unciv.logic.map
|
package com.unciv.logic.map
|
||||||
|
|
||||||
import com.badlogic.gdx.math.Vector2
|
import com.badlogic.gdx.math.Vector2
|
||||||
|
import com.unciv.logic.automation.UnitAutomation
|
||||||
import com.unciv.logic.automation.WorkerAutomation
|
import com.unciv.logic.automation.WorkerAutomation
|
||||||
import com.unciv.logic.civilization.CivilizationInfo
|
import com.unciv.logic.civilization.CivilizationInfo
|
||||||
import com.unciv.models.gamebasics.GameBasics
|
import com.unciv.models.gamebasics.GameBasics
|
||||||
@ -135,7 +136,7 @@ class MapUnit {
|
|||||||
if (currentMovement == 0f) return // We've already done stuff this turn, and can't do any more stuff
|
if (currentMovement == 0f) return // We've already done stuff this turn, and can't do any more stuff
|
||||||
|
|
||||||
val enemyUnitsInWalkingDistance = getDistanceToTiles().keys
|
val enemyUnitsInWalkingDistance = getDistanceToTiles().keys
|
||||||
.filter { it.militaryUnit!=null && it.militaryUnit!!.civInfo!=civInfo }
|
.filter { it.militaryUnit!=null && civInfo.isAtWarWith(it.militaryUnit!!.civInfo)}
|
||||||
if(enemyUnitsInWalkingDistance.isNotEmpty()) {
|
if(enemyUnitsInWalkingDistance.isNotEmpty()) {
|
||||||
if (action != null && action!!.startsWith("moveTo")) action=null
|
if (action != null && action!!.startsWith("moveTo")) action=null
|
||||||
return // Don't you dare move.
|
return // Don't you dare move.
|
||||||
@ -155,6 +156,8 @@ class MapUnit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (action == "automation") WorkerAutomation(this).automateWorkerAction()
|
if (action == "automation") WorkerAutomation(this).automateWorkerAction()
|
||||||
|
|
||||||
|
if(action == "explore") UnitAutomation().automatedExplore(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun doPostTurnAction() {
|
private fun doPostTurnAction() {
|
||||||
|
@ -73,7 +73,7 @@ open class TileInfo {
|
|||||||
val neighbors: List<TileInfo>
|
val neighbors: List<TileInfo>
|
||||||
get(){
|
get(){
|
||||||
if(internalNeighbors==null)
|
if(internalNeighbors==null)
|
||||||
internalNeighbors = tileMap.getTilesAtDistance(position, 1)
|
internalNeighbors = getTilesAtDistance(1)
|
||||||
return internalNeighbors!!
|
return internalNeighbors!!
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,6 +229,10 @@ open class TileInfo {
|
|||||||
return tileMap.getTilesInDistance(position,distance)
|
return tileMap.getTilesInDistance(position,distance)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getTilesAtDistance(distance:Int): List<TileInfo> {
|
||||||
|
return tileMap.getTilesAtDistance(position,distance)
|
||||||
|
}
|
||||||
|
|
||||||
fun getDefensiveBonus(): Float {
|
fun getDefensiveBonus(): Float {
|
||||||
var bonus = getBaseTerrain().defenceBonus
|
var bonus = getBaseTerrain().defenceBonus
|
||||||
if(terrainFeature!=null) bonus += getTerrainFeature()!!.defenceBonus
|
if(terrainFeature!=null) bonus += getTerrainFeature()!!.defenceBonus
|
||||||
|
@ -177,12 +177,11 @@ class UnitMovementAlgorithms(val unit:MapUnit) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun teleportToClosestMoveableTile(){
|
fun teleportToClosestMoveableTile(){
|
||||||
val unitCurrentTilePosition = unit.getTile().position
|
|
||||||
var allowedTile:TileInfo? = null
|
var allowedTile:TileInfo? = null
|
||||||
var distance=0
|
var distance=0
|
||||||
while(allowedTile==null){
|
while(allowedTile==null){
|
||||||
distance++
|
distance++
|
||||||
allowedTile = tileMap.getTilesAtDistance(unitCurrentTilePosition,distance)
|
allowedTile = unit.getTile().getTilesAtDistance(distance)
|
||||||
.firstOrNull{unit.canMoveTo(it)}
|
.firstOrNull{unit.canMoveTo(it)}
|
||||||
}
|
}
|
||||||
unit.removeFromTile() // we "teleport" them away
|
unit.removeFromTile() // we "teleport" them away
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.unciv.ui.worldscreen.unit
|
package com.unciv.ui.worldscreen.unit
|
||||||
|
|
||||||
import com.unciv.UnCivGame
|
import com.unciv.UnCivGame
|
||||||
|
import com.unciv.logic.automation.UnitAutomation
|
||||||
import com.unciv.logic.automation.WorkerAutomation
|
import com.unciv.logic.automation.WorkerAutomation
|
||||||
import com.unciv.logic.map.MapUnit
|
import com.unciv.logic.map.MapUnit
|
||||||
import com.unciv.models.gamebasics.Building
|
import com.unciv.models.gamebasics.Building
|
||||||
@ -56,6 +57,14 @@ class UnitActions {
|
|||||||
actionList += UnitAction("Sleep", { unit.action = "Sleep" }, unit.currentMovement != 0f)
|
actionList += UnitAction("Sleep", { unit.action = "Sleep" }, unit.currentMovement != 0f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(unit.baseUnit.unitType == UnitType.Scout){
|
||||||
|
if(unit.action != "explore")
|
||||||
|
actionList += UnitAction("Explore", { UnitAutomation().automatedExplore(unit); unit.action = "explore" },
|
||||||
|
unit.currentMovement != 0f)
|
||||||
|
else
|
||||||
|
actionList += UnitAction("Stop exploration", { unit.action = null }, true)
|
||||||
|
}
|
||||||
|
|
||||||
if(unit.baseUnit().unitType!= UnitType.Civilian && unit.promotions.canBePromoted()){
|
if(unit.baseUnit().unitType!= UnitType.Civilian && unit.promotions.canBePromoted()){
|
||||||
actionList += UnitAction("Promote",
|
actionList += UnitAction("Promote",
|
||||||
{UnCivGame.Current.screen = PromotionPickerScreen(unit)},
|
{UnCivGame.Current.screen = PromotionPickerScreen(unit)},
|
||||||
|
@ -37,6 +37,8 @@ class UnitActionsTable(val worldScreen: WorldScreen) : Table(){
|
|||||||
"Set up" -> return ImageGetter.getUnitIcon("Catapult")
|
"Set up" -> return ImageGetter.getUnitIcon("Catapult")
|
||||||
"Disband unit" -> return ImageGetter.getImage("OtherIcons/DisbandUnit.png")
|
"Disband unit" -> return ImageGetter.getImage("OtherIcons/DisbandUnit.png")
|
||||||
"Sleep" -> return ImageGetter.getImage("OtherIcons/Sleep.png")
|
"Sleep" -> return ImageGetter.getImage("OtherIcons/Sleep.png")
|
||||||
|
"Explore" -> return ImageGetter.getUnitIcon("Scout")
|
||||||
|
"Stop exploration" -> return ImageGetter.getImage("OtherIcons/Stop.png")
|
||||||
else -> return ImageGetter.getImage("OtherIcons/Star.png")
|
else -> return ImageGetter.getImage("OtherIcons/Star.png")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user