mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-27 13:55:54 -04:00
Added Ancient Ruins, aka goodie huts!
This commit is contained in:
parent
7b2bf48e04
commit
895331e3f2
@ -32,11 +32,16 @@ class UnitAutomation{
|
||||
if(unit.name.startsWith("Great")) return // I don't know what to do with you yet.
|
||||
|
||||
val unitActions = UnitActions().getUnitActions(unit,UnCivGame.Current.worldScreen)
|
||||
var unitDistanceToTiles = unit.getDistanceToTiles()
|
||||
|
||||
if(tryGoToRuin(unit,unitDistanceToTiles)){
|
||||
if(unit.currentMovement==0f) return
|
||||
unitDistanceToTiles = unit.getDistanceToTiles()
|
||||
}
|
||||
|
||||
if (tryUpgradeUnit(unit, unitActions)) return
|
||||
|
||||
// Accompany settlers
|
||||
val unitDistanceToTiles = unit.getDistanceToTiles()
|
||||
if (tryAccompanySettler(unit,unitDistanceToTiles)) return
|
||||
|
||||
if (unit.health < 50) {
|
||||
@ -259,7 +264,25 @@ class UnitAutomation{
|
||||
return false
|
||||
}
|
||||
|
||||
fun tryGoToRuin(unit:MapUnit, unitDistanceToTiles: HashMap<TileInfo, Float>): Boolean {
|
||||
val tileWithRuin = unitDistanceToTiles.keys.firstOrNull{unit.canMoveTo(it) && it.improvement == "Ancient ruins"}
|
||||
if(tileWithRuin==null) return false
|
||||
unit.moveToTile(tileWithRuin)
|
||||
return true
|
||||
}
|
||||
|
||||
private fun explore(unit: MapUnit, unitDistanceToTiles: HashMap<TileInfo, Float>) {
|
||||
val distanceToTiles:HashMap<TileInfo, Float>
|
||||
if(tryGoToRuin(unit,unitDistanceToTiles))
|
||||
{
|
||||
if(unit.currentMovement==0f) return
|
||||
distanceToTiles = unit.getDistanceToTiles()
|
||||
}
|
||||
else distanceToTiles = unitDistanceToTiles
|
||||
|
||||
val reachableTiles= distanceToTiles
|
||||
.filter { unit.canMoveTo(it.key) }
|
||||
|
||||
for(tile in unit.currentTile.getTilesInDistance(5))
|
||||
if(unit.canMoveTo(tile) && tile.position !in unit.civInfo.exploredTiles
|
||||
&& unit.movementAlgs().canReach(tile)){
|
||||
@ -267,8 +290,6 @@ class UnitAutomation{
|
||||
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)
|
||||
else if (reachableTiles.any()) unit.moveToTile(reachableTiles.toList().getRandom().first)
|
||||
@ -317,6 +338,8 @@ class UnitAutomation{
|
||||
}
|
||||
|
||||
fun automatedExplore(unit:MapUnit){
|
||||
if(tryGoToRuin(unit,unit.getDistanceToTiles()) && unit.currentMovement==0f) return
|
||||
|
||||
for(i in 1..10){
|
||||
val unexploredTilesAtDistance = unit.getTile().getTilesAtDistance(i)
|
||||
.filter { unit.canMoveTo(it) && it.position !in unit.civInfo.exploredTiles
|
||||
|
@ -179,7 +179,7 @@ class CivilizationInfo {
|
||||
fun getBuildingUniques(): List<String> = cities.flatMap { it.getBuildingUniques()}.distinct()
|
||||
|
||||
fun getCivUnits(): List<MapUnit> {
|
||||
return units
|
||||
return units.toList() // to avoid comodification problems (ie concurrency again...)
|
||||
}
|
||||
|
||||
fun getViewableTiles(): List<TileInfo> {
|
||||
@ -295,7 +295,7 @@ class CivilizationInfo {
|
||||
for (city in cities)
|
||||
city.cityStats.update()
|
||||
happiness = getHappinessForNextTurn().values.sum().roundToInt()
|
||||
getCivUnits().forEach { it.startTurn() }
|
||||
getCivUnits().toList().forEach { it.startTurn() }
|
||||
}
|
||||
|
||||
fun canEnterTiles(otherCiv: CivilizationInfo): Boolean {
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.unciv.logic.map
|
||||
|
||||
import com.badlogic.gdx.graphics.Color
|
||||
import com.badlogic.gdx.math.Vector2
|
||||
import com.unciv.logic.automation.UnitAutomation
|
||||
import com.unciv.logic.automation.WorkerAutomation
|
||||
@ -8,7 +9,10 @@ import com.unciv.models.gamebasics.GameBasics
|
||||
import com.unciv.models.gamebasics.tile.TerrainType
|
||||
import com.unciv.models.gamebasics.unit.BaseUnit
|
||||
import com.unciv.models.gamebasics.unit.UnitType
|
||||
import com.unciv.ui.utils.getRandom
|
||||
import java.text.DecimalFormat
|
||||
import java.util.*
|
||||
import kotlin.collections.ArrayList
|
||||
|
||||
class MapUnit {
|
||||
@Transient lateinit var civInfo: CivilizationInfo
|
||||
@ -258,6 +262,47 @@ class MapUnit {
|
||||
tile.civilianUnit=this
|
||||
else tile.militaryUnit=this
|
||||
currentTile = tile
|
||||
if(tile.improvement=="Ancient ruins" && !civInfo.isBarbarianCivilization())
|
||||
getAncientRuinBonus()
|
||||
}
|
||||
|
||||
private fun getAncientRuinBonus() {
|
||||
currentTile.improvement=null
|
||||
val actions: ArrayList<() -> Unit> = ArrayList()
|
||||
if(civInfo.cities.isNotEmpty()) actions.add {
|
||||
val city = civInfo.cities.getRandom()
|
||||
city.population.population++
|
||||
city.population.autoAssignPopulation()
|
||||
civInfo.addNotification("We have found survivors the ruins - population added to ["+city.name+"]",city.location, Color.GREEN)
|
||||
}
|
||||
val researchableAncientEraTechs = GameBasics.Technologies.values.filter { civInfo.tech.canBeResearched(it.name)}
|
||||
if(researchableAncientEraTechs.isNotEmpty())
|
||||
actions.add {
|
||||
val tech = researchableAncientEraTechs.getRandom().name
|
||||
civInfo.tech.techsResearched.add(tech)
|
||||
if(civInfo.tech.techsToResearch.contains(tech)) civInfo.tech.techsToResearch.remove(tech)
|
||||
civInfo.addNotification("We have discovered the lost technology of [$tech] in the ruins!",null, Color.BLUE)
|
||||
}
|
||||
|
||||
actions.add {
|
||||
val chosenUnit = listOf("Settler","Worker","Warrior").getRandom()
|
||||
civInfo.placeUnitNearTile(currentTile.position,chosenUnit)
|
||||
civInfo.addNotification("A [$chosenUnit] has joined us!",null, Color.BLUE)
|
||||
}
|
||||
|
||||
if(baseUnit.unitType!=UnitType.Civilian)
|
||||
actions.add {
|
||||
promotions.XP+=10
|
||||
civInfo.addNotification("An ancient tribe trains our [$name] in their ways of combat!",null, Color.RED)
|
||||
}
|
||||
|
||||
actions.add {
|
||||
val amount = listOf(25,60,100).getRandom()
|
||||
civInfo.gold+=amount
|
||||
civInfo.addNotification("We have found a stash of [$amount] gold in the ruins!!",null, Color.RED)
|
||||
}
|
||||
|
||||
(actions.getRandom())()
|
||||
}
|
||||
|
||||
fun assignOwner(civInfo:CivilizationInfo){
|
||||
|
@ -7,6 +7,7 @@ import com.unciv.models.gamebasics.tile.ResourceType
|
||||
import com.unciv.models.gamebasics.tile.TerrainType
|
||||
import com.unciv.models.gamebasics.tile.TileResource
|
||||
import com.unciv.ui.utils.getRandom
|
||||
import java.util.*
|
||||
|
||||
class AlexanderRandomMapGenerator:RandomMapGenerator(){
|
||||
fun generateMap(distance: Int, landExpansionChange:Float){
|
||||
@ -57,6 +58,7 @@ class Area(var terrain: String) {
|
||||
tile.baseTerrain = terrain
|
||||
RandomMapGenerator().addRandomTerrainFeature(tile)
|
||||
RandomMapGenerator().addRandomResourceToTile(tile)
|
||||
RandomMapGenerator().maybeAddAncientRuins(tile)
|
||||
return tile
|
||||
}
|
||||
}
|
||||
@ -215,4 +217,8 @@ open class RandomMapGenerator {
|
||||
map[vector.toString()] = addRandomTile(vector)
|
||||
return map
|
||||
}
|
||||
|
||||
fun maybeAddAncientRuins(tile: TileInfo) {
|
||||
if(Random().nextDouble() < 1f/100) tile.improvement = "Ancient ruins"
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user