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.
|
if(unit.name.startsWith("Great")) return // I don't know what to do with you yet.
|
||||||
|
|
||||||
val unitActions = UnitActions().getUnitActions(unit,UnCivGame.Current.worldScreen)
|
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
|
if (tryUpgradeUnit(unit, unitActions)) return
|
||||||
|
|
||||||
// Accompany settlers
|
// Accompany settlers
|
||||||
val unitDistanceToTiles = unit.getDistanceToTiles()
|
|
||||||
if (tryAccompanySettler(unit,unitDistanceToTiles)) return
|
if (tryAccompanySettler(unit,unitDistanceToTiles)) return
|
||||||
|
|
||||||
if (unit.health < 50) {
|
if (unit.health < 50) {
|
||||||
@ -259,7 +264,25 @@ class UnitAutomation{
|
|||||||
return false
|
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>) {
|
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))
|
for(tile in unit.currentTile.getTilesInDistance(5))
|
||||||
if(unit.canMoveTo(tile) && tile.position !in unit.civInfo.exploredTiles
|
if(unit.canMoveTo(tile) && tile.position !in unit.civInfo.exploredTiles
|
||||||
&& unit.movementAlgs().canReach(tile)){
|
&& unit.movementAlgs().canReach(tile)){
|
||||||
@ -267,8 +290,6 @@ class UnitAutomation{
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val reachableTiles= unitDistanceToTiles
|
|
||||||
.filter { unit.canMoveTo(it.key) }
|
|
||||||
val reachableTilesMaxWalkingDistance = reachableTiles.filter { it.value == unit.currentMovement }
|
val reachableTilesMaxWalkingDistance = reachableTiles.filter { it.value == unit.currentMovement }
|
||||||
if (reachableTilesMaxWalkingDistance.any()) unit.moveToTile(reachableTilesMaxWalkingDistance.toList().getRandom().first)
|
if (reachableTilesMaxWalkingDistance.any()) unit.moveToTile(reachableTilesMaxWalkingDistance.toList().getRandom().first)
|
||||||
else if (reachableTiles.any()) unit.moveToTile(reachableTiles.toList().getRandom().first)
|
else if (reachableTiles.any()) unit.moveToTile(reachableTiles.toList().getRandom().first)
|
||||||
@ -317,6 +338,8 @@ class UnitAutomation{
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun automatedExplore(unit:MapUnit){
|
fun automatedExplore(unit:MapUnit){
|
||||||
|
if(tryGoToRuin(unit,unit.getDistanceToTiles()) && unit.currentMovement==0f) return
|
||||||
|
|
||||||
for(i in 1..10){
|
for(i in 1..10){
|
||||||
val unexploredTilesAtDistance = unit.getTile().getTilesAtDistance(i)
|
val unexploredTilesAtDistance = unit.getTile().getTilesAtDistance(i)
|
||||||
.filter { unit.canMoveTo(it) && it.position !in unit.civInfo.exploredTiles
|
.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 getBuildingUniques(): List<String> = cities.flatMap { it.getBuildingUniques()}.distinct()
|
||||||
|
|
||||||
fun getCivUnits(): List<MapUnit> {
|
fun getCivUnits(): List<MapUnit> {
|
||||||
return units
|
return units.toList() // to avoid comodification problems (ie concurrency again...)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getViewableTiles(): List<TileInfo> {
|
fun getViewableTiles(): List<TileInfo> {
|
||||||
@ -295,7 +295,7 @@ class CivilizationInfo {
|
|||||||
for (city in cities)
|
for (city in cities)
|
||||||
city.cityStats.update()
|
city.cityStats.update()
|
||||||
happiness = getHappinessForNextTurn().values.sum().roundToInt()
|
happiness = getHappinessForNextTurn().values.sum().roundToInt()
|
||||||
getCivUnits().forEach { it.startTurn() }
|
getCivUnits().toList().forEach { it.startTurn() }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun canEnterTiles(otherCiv: CivilizationInfo): Boolean {
|
fun canEnterTiles(otherCiv: CivilizationInfo): Boolean {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.unciv.logic.map
|
package com.unciv.logic.map
|
||||||
|
|
||||||
|
import com.badlogic.gdx.graphics.Color
|
||||||
import com.badlogic.gdx.math.Vector2
|
import com.badlogic.gdx.math.Vector2
|
||||||
import com.unciv.logic.automation.UnitAutomation
|
import com.unciv.logic.automation.UnitAutomation
|
||||||
import com.unciv.logic.automation.WorkerAutomation
|
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.tile.TerrainType
|
||||||
import com.unciv.models.gamebasics.unit.BaseUnit
|
import com.unciv.models.gamebasics.unit.BaseUnit
|
||||||
import com.unciv.models.gamebasics.unit.UnitType
|
import com.unciv.models.gamebasics.unit.UnitType
|
||||||
|
import com.unciv.ui.utils.getRandom
|
||||||
import java.text.DecimalFormat
|
import java.text.DecimalFormat
|
||||||
|
import java.util.*
|
||||||
|
import kotlin.collections.ArrayList
|
||||||
|
|
||||||
class MapUnit {
|
class MapUnit {
|
||||||
@Transient lateinit var civInfo: CivilizationInfo
|
@Transient lateinit var civInfo: CivilizationInfo
|
||||||
@ -258,6 +262,47 @@ class MapUnit {
|
|||||||
tile.civilianUnit=this
|
tile.civilianUnit=this
|
||||||
else tile.militaryUnit=this
|
else tile.militaryUnit=this
|
||||||
currentTile = tile
|
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){
|
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.TerrainType
|
||||||
import com.unciv.models.gamebasics.tile.TileResource
|
import com.unciv.models.gamebasics.tile.TileResource
|
||||||
import com.unciv.ui.utils.getRandom
|
import com.unciv.ui.utils.getRandom
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
class AlexanderRandomMapGenerator:RandomMapGenerator(){
|
class AlexanderRandomMapGenerator:RandomMapGenerator(){
|
||||||
fun generateMap(distance: Int, landExpansionChange:Float){
|
fun generateMap(distance: Int, landExpansionChange:Float){
|
||||||
@ -57,6 +58,7 @@ class Area(var terrain: String) {
|
|||||||
tile.baseTerrain = terrain
|
tile.baseTerrain = terrain
|
||||||
RandomMapGenerator().addRandomTerrainFeature(tile)
|
RandomMapGenerator().addRandomTerrainFeature(tile)
|
||||||
RandomMapGenerator().addRandomResourceToTile(tile)
|
RandomMapGenerator().addRandomResourceToTile(tile)
|
||||||
|
RandomMapGenerator().maybeAddAncientRuins(tile)
|
||||||
return tile
|
return tile
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -215,4 +217,8 @@ open class RandomMapGenerator {
|
|||||||
map[vector.toString()] = addRandomTile(vector)
|
map[vector.toString()] = addRandomTile(vector)
|
||||||
return map
|
return map
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun maybeAddAncientRuins(tile: TileInfo) {
|
||||||
|
if(Random().nextDouble() < 1f/100) tile.improvement = "Ancient ruins"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user