mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-28 14:24:43 -04:00
Removed our getRandom() extension, because it now comes built-in in Kotlin, yay!
This commit is contained in:
parent
0539890a4d
commit
cd6806d07e
@ -4727,6 +4727,7 @@
|
|||||||
German:"Kartentyp"
|
German:"Kartentyp"
|
||||||
Dutch:"Kaarttype"
|
Dutch:"Kaarttype"
|
||||||
}
|
}
|
||||||
|
"No barbarians":{}
|
||||||
|
|
||||||
// Diplomacy!
|
// Diplomacy!
|
||||||
|
|
||||||
|
@ -8,11 +8,10 @@ import com.unciv.logic.map.MapType
|
|||||||
import com.unciv.logic.map.TileInfo
|
import com.unciv.logic.map.TileInfo
|
||||||
import com.unciv.logic.map.TileMap
|
import com.unciv.logic.map.TileMap
|
||||||
import com.unciv.models.gamebasics.GameBasics
|
import com.unciv.models.gamebasics.GameBasics
|
||||||
import com.unciv.ui.utils.getRandom
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
import kotlin.collections.ArrayList
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
|
|
||||||
|
|
||||||
class GameParameters{
|
class GameParameters{
|
||||||
var difficulty="Prince"
|
var difficulty="Prince"
|
||||||
var mapRadius=20
|
var mapRadius=20
|
||||||
@ -76,15 +75,18 @@ class GameStarter{
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun getStartingLocations(numberOfPlayers:Int,tileMap: TileMap): Stack<TileInfo> {
|
fun getStartingLocations(numberOfPlayers:Int,tileMap: TileMap): Stack<TileInfo> {
|
||||||
|
val landTiles = tileMap.values
|
||||||
|
.filter { it.isLand() && !it.getBaseTerrain().impassable}
|
||||||
|
|
||||||
for(minimumDistanceBetweenStartingLocations in tileMap.tileMatrix.size/2 downTo 0){
|
for(minimumDistanceBetweenStartingLocations in tileMap.tileMatrix.size/2 downTo 0){
|
||||||
val freeTiles = tileMap.values
|
val freeTiles = landTiles
|
||||||
.filter { it.isLand() && vectorIsWithinNTilesOfEdge(it.position,min(3,minimumDistanceBetweenStartingLocations),tileMap)}
|
.filter { vectorIsWithinNTilesOfEdge(it.position,min(3,minimumDistanceBetweenStartingLocations),tileMap)}
|
||||||
.toMutableList()
|
.toMutableList()
|
||||||
|
|
||||||
val startingLocations = ArrayList<TileInfo>()
|
val startingLocations = ArrayList<TileInfo>()
|
||||||
for(player in 0..numberOfPlayers){
|
for(player in 0..numberOfPlayers){
|
||||||
if(freeTiles.isEmpty()) break // we failed to get all the starting locations with this minimum distance
|
if(freeTiles.isEmpty()) break // we failed to get all the starting locations with this minimum distance
|
||||||
val randomLocation = freeTiles.getRandom()
|
val randomLocation = freeTiles.random()
|
||||||
startingLocations.add(randomLocation)
|
startingLocations.add(randomLocation)
|
||||||
freeTiles.removeAll(tileMap.getTilesInDistance(randomLocation.position,minimumDistanceBetweenStartingLocations))
|
freeTiles.removeAll(tileMap.getTilesInDistance(randomLocation.position,minimumDistanceBetweenStartingLocations))
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@ import com.unciv.logic.civilization.PlayerType
|
|||||||
import com.unciv.logic.map.TileInfo
|
import com.unciv.logic.map.TileInfo
|
||||||
import com.unciv.logic.map.TileMap
|
import com.unciv.logic.map.TileMap
|
||||||
import com.unciv.models.gamebasics.GameBasics
|
import com.unciv.models.gamebasics.GameBasics
|
||||||
import com.unciv.ui.utils.getRandom
|
|
||||||
|
|
||||||
class GameInfo {
|
class GameInfo {
|
||||||
var civilizations = mutableListOf<CivilizationInfo>()
|
var civilizations = mutableListOf<CivilizationInfo>()
|
||||||
@ -89,7 +88,7 @@ class GameInfo {
|
|||||||
.flatMap { it.viewableTiles }.toHashSet()
|
.flatMap { it.viewableTiles }.toHashSet()
|
||||||
val viableTiles = tileMap.values.filterNot { allViewableTiles.contains(it) || it.militaryUnit != null || it.civilianUnit != null }
|
val viableTiles = tileMap.values.filterNot { allViewableTiles.contains(it) || it.militaryUnit != null || it.civilianUnit != null }
|
||||||
if (viableTiles.isEmpty()) return // no place for more barbs =(
|
if (viableTiles.isEmpty()) return // no place for more barbs =(
|
||||||
tile = viableTiles.getRandom()
|
tile = viableTiles.random()
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we don't make this into a separate list then the retain() will happen on the Tech keys,
|
// if we don't make this into a separate list then the retain() will happen on the Tech keys,
|
||||||
@ -101,7 +100,7 @@ class GameInfo {
|
|||||||
val unitList = GameBasics.Units.values.filter { !it.unitType.isCivilian() && it.uniqueTo == null }
|
val unitList = GameBasics.Units.values.filter { !it.unitType.isCivilian() && it.uniqueTo == null }
|
||||||
.filter{ allResearchedTechs.contains(it.requiredTech)
|
.filter{ allResearchedTechs.contains(it.requiredTech)
|
||||||
&& (it.obsoleteTech == null || !allResearchedTechs.contains(it.obsoleteTech!!)) }
|
&& (it.obsoleteTech == null || !allResearchedTechs.contains(it.obsoleteTech!!)) }
|
||||||
val unit = if (unitList.isEmpty()) "Warrior" else unitList.getRandom().name
|
val unit = if (unitList.isEmpty()) "Warrior" else unitList.random().name
|
||||||
|
|
||||||
tileMap.placeUnitNearTile(tile!!.position, unit, getBarbarianCivilization())
|
tileMap.placeUnitNearTile(tile!!.position, unit, getBarbarianCivilization())
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,6 @@ import com.unciv.logic.map.TileInfo
|
|||||||
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.models.stats.Stats
|
import com.unciv.models.stats.Stats
|
||||||
import com.unciv.ui.utils.getRandom
|
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
import kotlin.math.sqrt
|
import kotlin.math.sqrt
|
||||||
|
|
||||||
@ -58,7 +57,7 @@ class Automation {
|
|||||||
chosenUnit = militaryUnits.filter { it.unitType== UnitType.Ranged }.maxBy { it.cost }!!
|
chosenUnit = militaryUnits.filter { it.unitType== UnitType.Ranged }.maxBy { it.cost }!!
|
||||||
|
|
||||||
else{ // randomize type of unit and take the most expensive of its kind
|
else{ // randomize type of unit and take the most expensive of its kind
|
||||||
val chosenUnitType = militaryUnits.map { it.unitType }.distinct().filterNot{it==UnitType.Scout}.getRandom()
|
val chosenUnitType = militaryUnits.map { it.unitType }.distinct().filterNot{it==UnitType.Scout}.random()
|
||||||
chosenUnit = militaryUnits.filter { it.unitType==chosenUnitType }.maxBy { it.cost }!!
|
chosenUnit = militaryUnits.filter { it.unitType==chosenUnitType }.maxBy { it.cost }!!
|
||||||
}
|
}
|
||||||
return chosenUnit.name
|
return chosenUnit.name
|
||||||
@ -141,7 +140,7 @@ class Automation {
|
|||||||
if (buildableWonders.isNotEmpty()) {
|
if (buildableWonders.isNotEmpty()) {
|
||||||
val citiesBuildingWonders = cityInfo.civInfo.cities
|
val citiesBuildingWonders = cityInfo.civInfo.cities
|
||||||
.count { it.cityConstructions.isBuildingWonder() }
|
.count { it.cityConstructions.isBuildingWonder() }
|
||||||
val wonder = buildableWonders.getRandom()
|
val wonder = buildableWonders.random()
|
||||||
relativeCostEffectiveness.add(ConstructionChoice(wonder.name,5f / (citiesBuildingWonders + 1)))
|
relativeCostEffectiveness.add(ConstructionChoice(wonder.name,5f / (citiesBuildingWonders + 1)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,6 @@ import com.unciv.logic.trade.TradeType
|
|||||||
import com.unciv.models.gamebasics.GameBasics
|
import com.unciv.models.gamebasics.GameBasics
|
||||||
import com.unciv.models.gamebasics.tech.Technology
|
import com.unciv.models.gamebasics.tech.Technology
|
||||||
import com.unciv.models.gamebasics.tr
|
import com.unciv.models.gamebasics.tr
|
||||||
import com.unciv.ui.utils.getRandom
|
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
|
|
||||||
class NextTurnAutomation{
|
class NextTurnAutomation{
|
||||||
@ -62,7 +61,7 @@ class NextTurnAutomation{
|
|||||||
&& !tradeLogic.currentTrade.ourOffers.contains(it) }
|
&& !tradeLogic.currentTrade.ourOffers.contains(it) }
|
||||||
|
|
||||||
if (ourOfferList.isNotEmpty()) {
|
if (ourOfferList.isNotEmpty()) {
|
||||||
tradeLogic.currentTrade.ourOffers.add(ourOfferList.getRandom())
|
tradeLogic.currentTrade.ourOffers.add(ourOfferList.random())
|
||||||
tradeLogic.currentTrade.theirOffers.add(theirOffer)
|
tradeLogic.currentTrade.theirOffers.add(theirOffer)
|
||||||
} else {
|
} else {
|
||||||
//try to buy tech with money, not spending more than 1/3 of treasury
|
//try to buy tech with money, not spending more than 1/3 of treasury
|
||||||
@ -96,11 +95,11 @@ class NextTurnAutomation{
|
|||||||
val techsCheapest = techsGroups[costs[0]]!!
|
val techsCheapest = techsGroups[costs[0]]!!
|
||||||
//Do not consider advanced techs if only one tech left in cheapest groupe
|
//Do not consider advanced techs if only one tech left in cheapest groupe
|
||||||
if (techsCheapest.size == 1 || costs.size == 1) {
|
if (techsCheapest.size == 1 || costs.size == 1) {
|
||||||
tech = techsCheapest.getRandom()
|
tech = techsCheapest.random()
|
||||||
} else {
|
} else {
|
||||||
//Choose randomly between cheapest and second cheapest groupe
|
//Choose randomly between cheapest and second cheapest groupe
|
||||||
val techsAdvanced = techsGroups[costs[1]]!!
|
val techsAdvanced = techsGroups[costs[1]]!!
|
||||||
tech = (techsCheapest + techsAdvanced).getRandom()
|
tech = (techsCheapest + techsAdvanced).random()
|
||||||
}
|
}
|
||||||
|
|
||||||
civInfo.tech.techsToResearch.add(tech.name)
|
civInfo.tech.techsToResearch.add(tech.name)
|
||||||
@ -111,7 +110,7 @@ class NextTurnAutomation{
|
|||||||
while (civInfo.policies.canAdoptPolicy()) {
|
while (civInfo.policies.canAdoptPolicy()) {
|
||||||
val adoptablePolicies = GameBasics.PolicyBranches.values.flatMap { it.policies.union(listOf(it)) }
|
val adoptablePolicies = GameBasics.PolicyBranches.values.flatMap { it.policies.union(listOf(it)) }
|
||||||
.filter { civInfo.policies.isAdoptable(it) }
|
.filter { civInfo.policies.isAdoptable(it) }
|
||||||
val policyToAdopt = adoptablePolicies.getRandom()
|
val policyToAdopt = adoptablePolicies.random()
|
||||||
civInfo.policies.adopt(policyToAdopt)
|
civInfo.policies.adopt(policyToAdopt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -213,7 +212,7 @@ class NextTurnAutomation{
|
|||||||
if (unit.promotions.canBePromoted()) {
|
if (unit.promotions.canBePromoted()) {
|
||||||
val availablePromotions = unit.promotions.getAvailablePromotions()
|
val availablePromotions = unit.promotions.getAvailablePromotions()
|
||||||
if (availablePromotions.isNotEmpty())
|
if (availablePromotions.isNotEmpty())
|
||||||
unit.promotions.addPromotion(availablePromotions.getRandom().name)
|
unit.promotions.addPromotion(availablePromotions.random().name)
|
||||||
}
|
}
|
||||||
|
|
||||||
when {
|
when {
|
||||||
|
@ -8,7 +8,6 @@ import com.unciv.logic.civilization.diplomacy.DiplomaticStatus
|
|||||||
import com.unciv.logic.map.MapUnit
|
import com.unciv.logic.map.MapUnit
|
||||||
import com.unciv.logic.map.TileInfo
|
import com.unciv.logic.map.TileInfo
|
||||||
import com.unciv.models.gamebasics.GameBasics
|
import com.unciv.models.gamebasics.GameBasics
|
||||||
import com.unciv.ui.utils.getRandom
|
|
||||||
import com.unciv.ui.worldscreen.unit.UnitAction
|
import com.unciv.ui.worldscreen.unit.UnitAction
|
||||||
import com.unciv.ui.worldscreen.unit.UnitActions
|
import com.unciv.ui.worldscreen.unit.UnitActions
|
||||||
|
|
||||||
@ -417,8 +416,8 @@ class UnitAutomation{
|
|||||||
.filter { unit.canMoveTo(it.key) && unit.movementAlgs().canReach(it.key) }
|
.filter { unit.canMoveTo(it.key) && unit.movementAlgs().canReach(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().random().first)
|
||||||
else if (reachableTiles.any()) unit.moveToTile(reachableTiles.toList().getRandom().first)
|
else if (reachableTiles.any()) unit.moveToTile(reachableTiles.toList().random().first)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun automatedExplore(unit:MapUnit){
|
fun automatedExplore(unit:MapUnit){
|
||||||
@ -435,7 +434,7 @@ class UnitAutomation{
|
|||||||
.filter { unit.canMoveTo(it) && it.position !in unit.civInfo.exploredTiles
|
.filter { unit.canMoveTo(it) && it.position !in unit.civInfo.exploredTiles
|
||||||
&& unit.movementAlgs().canReach(it) }
|
&& unit.movementAlgs().canReach(it) }
|
||||||
if(unexploredTilesAtDistance.isNotEmpty()){
|
if(unexploredTilesAtDistance.isNotEmpty()){
|
||||||
unit.movementAlgs().headTowards(unexploredTilesAtDistance.getRandom())
|
unit.movementAlgs().headTowards(unexploredTilesAtDistance.random())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,6 @@ import com.unciv.models.gamebasics.tile.ResourceType
|
|||||||
import com.unciv.models.gamebasics.tile.TileResource
|
import com.unciv.models.gamebasics.tile.TileResource
|
||||||
import com.unciv.models.gamebasics.tr
|
import com.unciv.models.gamebasics.tr
|
||||||
import com.unciv.models.stats.Stats
|
import com.unciv.models.stats.Stats
|
||||||
import com.unciv.ui.utils.getRandom
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.collections.ArrayList
|
import kotlin.collections.ArrayList
|
||||||
import kotlin.collections.HashMap
|
import kotlin.collections.HashMap
|
||||||
@ -430,7 +429,7 @@ class CivilizationInfo {
|
|||||||
notifications.add(Notification(text, location,color))
|
notifications.add(Notification(text, location,color))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addGreatPerson(greatPerson: String, city:CityInfo = cities.getRandom()) {
|
fun addGreatPerson(greatPerson: String, city:CityInfo = cities.random()) {
|
||||||
placeUnitNearTile(city.location, greatPerson)
|
placeUnitNearTile(city.location, greatPerson)
|
||||||
addNotification("A [$greatPerson] has been born!".tr(), city.location, Color.GOLD)
|
addNotification("A [$greatPerson] has been born!".tr(), city.location, Color.GOLD)
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package com.unciv.logic.civilization
|
|||||||
|
|
||||||
import com.unciv.models.gamebasics.GameBasics
|
import com.unciv.models.gamebasics.GameBasics
|
||||||
import com.unciv.models.gamebasics.Policy
|
import com.unciv.models.gamebasics.Policy
|
||||||
import com.unciv.ui.utils.getRandom
|
|
||||||
|
|
||||||
|
|
||||||
class PolicyManager {
|
class PolicyManager {
|
||||||
@ -75,7 +74,7 @@ class PolicyManager {
|
|||||||
"Free Religion" -> freePolicies++
|
"Free Religion" -> freePolicies++
|
||||||
"Liberty Complete" -> {
|
"Liberty Complete" -> {
|
||||||
if (civInfo.isPlayerCivilization()) civInfo.greatPeople.freeGreatPeople++
|
if (civInfo.isPlayerCivilization()) civInfo.greatPeople.freeGreatPeople++
|
||||||
else civInfo.addGreatPerson(GameBasics.Units.keys.filter { it.startsWith("Great") }.getRandom())
|
else civInfo.addGreatPerson(GameBasics.Units.keys.filter { it.startsWith("Great") }.random())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,6 @@ import com.unciv.models.gamebasics.tech.TechEra
|
|||||||
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 java.util.*
|
||||||
import kotlin.collections.ArrayList
|
import kotlin.collections.ArrayList
|
||||||
@ -419,7 +418,7 @@ class MapUnit {
|
|||||||
currentTile.improvement=null
|
currentTile.improvement=null
|
||||||
val actions: ArrayList<() -> Unit> = ArrayList()
|
val actions: ArrayList<() -> Unit> = ArrayList()
|
||||||
if(civInfo.cities.isNotEmpty()) actions.add {
|
if(civInfo.cities.isNotEmpty()) actions.add {
|
||||||
val city = civInfo.cities.getRandom()
|
val city = civInfo.cities.random()
|
||||||
city.population.population++
|
city.population.population++
|
||||||
city.population.autoAssignPopulation()
|
city.population.autoAssignPopulation()
|
||||||
civInfo.addNotification("We have found survivors the ruins - population added to ["+city.name+"]",currentTile.position, Color.GREEN)
|
civInfo.addNotification("We have found survivors the ruins - population added to ["+city.name+"]",currentTile.position, Color.GREEN)
|
||||||
@ -432,13 +431,13 @@ class MapUnit {
|
|||||||
}
|
}
|
||||||
if(researchableAncientEraTechs.isNotEmpty())
|
if(researchableAncientEraTechs.isNotEmpty())
|
||||||
actions.add {
|
actions.add {
|
||||||
val tech = researchableAncientEraTechs.getRandom().name
|
val tech = researchableAncientEraTechs.random().name
|
||||||
civInfo.tech.addTechnology(tech)
|
civInfo.tech.addTechnology(tech)
|
||||||
civInfo.addNotification("We have discovered the lost technology of [$tech] in the ruins!",currentTile.position, Color.BLUE)
|
civInfo.addNotification("We have discovered the lost technology of [$tech] in the ruins!",currentTile.position, Color.BLUE)
|
||||||
}
|
}
|
||||||
|
|
||||||
actions.add {
|
actions.add {
|
||||||
val chosenUnit = listOf("Settler","Worker","Warrior").getRandom()
|
val chosenUnit = listOf("Settler","Worker","Warrior").random()
|
||||||
civInfo.placeUnitNearTile(currentTile.position,chosenUnit)
|
civInfo.placeUnitNearTile(currentTile.position,chosenUnit)
|
||||||
civInfo.addNotification("A [$chosenUnit] has joined us!",currentTile.position, Color.BROWN)
|
civInfo.addNotification("A [$chosenUnit] has joined us!",currentTile.position, Color.BROWN)
|
||||||
}
|
}
|
||||||
@ -450,12 +449,12 @@ class MapUnit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
actions.add {
|
actions.add {
|
||||||
val amount = listOf(25,60,100).getRandom()
|
val amount = listOf(25,60,100).random()
|
||||||
civInfo.gold+=amount
|
civInfo.gold+=amount
|
||||||
civInfo.addNotification("We have found a stash of [$amount] gold in the ruins!",currentTile.position, Color.GOLD)
|
civInfo.addNotification("We have found a stash of [$amount] gold in the ruins!",currentTile.position, Color.GOLD)
|
||||||
}
|
}
|
||||||
|
|
||||||
(actions.getRandom())()
|
(actions.random())()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun assignOwner(civInfo:CivilizationInfo){
|
fun assignOwner(civInfo:CivilizationInfo){
|
||||||
|
@ -6,7 +6,6 @@ import com.unciv.models.gamebasics.GameBasics
|
|||||||
import com.unciv.models.gamebasics.tile.ResourceType
|
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 java.util.*
|
import java.util.*
|
||||||
import kotlin.collections.HashMap
|
import kotlin.collections.HashMap
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
@ -113,13 +112,13 @@ class CelluarAutomataRandomMapGenerator(): SeedRandomMapGenerator() {
|
|||||||
val tilesInArea = ArrayList<Vector2>()
|
val tilesInArea = ArrayList<Vector2>()
|
||||||
val tilesToCheck = ArrayList<Vector2>()
|
val tilesToCheck = ArrayList<Vector2>()
|
||||||
while (waterTiles.isNotEmpty()) {
|
while (waterTiles.isNotEmpty()) {
|
||||||
val initialWaterTile = waterTiles.getRandom()
|
val initialWaterTile = waterTiles.random()
|
||||||
tilesInArea += initialWaterTile
|
tilesInArea += initialWaterTile
|
||||||
tilesToCheck += initialWaterTile
|
tilesToCheck += initialWaterTile
|
||||||
waterTiles -= initialWaterTile
|
waterTiles -= initialWaterTile
|
||||||
|
|
||||||
while (tilesToCheck.isNotEmpty()) {
|
while (tilesToCheck.isNotEmpty()) {
|
||||||
val tileChecking = tilesToCheck.getRandom()
|
val tileChecking = tilesToCheck.random()
|
||||||
for (vector in HexMath().getVectorsAtDistance(tileChecking,1)
|
for (vector in HexMath().getVectorsAtDistance(tileChecking,1)
|
||||||
.filter { !tilesInArea.contains(it) and waterTiles.contains(it) }) {
|
.filter { !tilesInArea.contains(it) and waterTiles.contains(it) }) {
|
||||||
tilesInArea += vector
|
tilesInArea += vector
|
||||||
@ -175,9 +174,9 @@ class CelluarAutomataRandomMapGenerator(): SeedRandomMapGenerator() {
|
|||||||
val maxLatitude = abs(getLatitude(Vector2(distance.toFloat(), distance.toFloat())))
|
val maxLatitude = abs(getLatitude(Vector2(distance.toFloat(), distance.toFloat())))
|
||||||
|
|
||||||
for (i in 0 until numberOfSeeds) {
|
for (i in 0 until numberOfSeeds) {
|
||||||
var terrain = if (Math.random() > waterPercent) terrains.getRandom().name
|
var terrain = if (Math.random() > waterPercent) terrains.random().name
|
||||||
else "Ocean"
|
else "Ocean"
|
||||||
val tile = emptyTiles.getRandom()
|
val tile = emptyTiles.random()
|
||||||
|
|
||||||
//change grassland to desert or tundra based on y
|
//change grassland to desert or tundra based on y
|
||||||
if (abs(getLatitude(tile.position)) < maxLatitude * 0.1) {
|
if (abs(getLatitude(tile.position)) < maxLatitude * 0.1) {
|
||||||
@ -266,13 +265,13 @@ class AlexanderRandomMapGenerator:RandomMapGenerator(){
|
|||||||
val grassland = "Grassland"
|
val grassland = "Grassland"
|
||||||
val ocean = "Ocean"
|
val ocean = "Ocean"
|
||||||
for(i in 0..distance*distance/6){
|
for(i in 0..distance*distance/6){
|
||||||
val location = map.filter { it.value==null }.map { it.key }.getRandom()
|
val location = map.filter { it.value==null }.map { it.key }.random()
|
||||||
map[location] = TileInfo().apply { baseTerrain= grassland}
|
map[location] = TileInfo().apply { baseTerrain= grassland}
|
||||||
sparkList.add(location)
|
sparkList.add(location)
|
||||||
}
|
}
|
||||||
|
|
||||||
while(sparkList.any()){
|
while(sparkList.any()){
|
||||||
val currentSpark = sparkList.getRandom()
|
val currentSpark = sparkList.random()
|
||||||
val emptyTilesAroundSpark = HexMath().getAdjacentVectors(currentSpark)
|
val emptyTilesAroundSpark = HexMath().getAdjacentVectors(currentSpark)
|
||||||
.filter { map.containsKey(it) && map[it]==null }
|
.filter { map.containsKey(it) && map[it]==null }
|
||||||
if(map[currentSpark]!!.baseTerrain==grassland){
|
if(map[currentSpark]!!.baseTerrain==grassland){
|
||||||
@ -353,10 +352,10 @@ open class SeedRandomMapGenerator : RandomMapGenerator() {
|
|||||||
val numberOfSeeds = ceil(emptyTiles.size / averageTilesPerArea.toFloat()).toInt()
|
val numberOfSeeds = ceil(emptyTiles.size / averageTilesPerArea.toFloat()).toInt()
|
||||||
|
|
||||||
for (i in 0 until numberOfSeeds) {
|
for (i in 0 until numberOfSeeds) {
|
||||||
val terrain = if (Math.random() > waterPercent) terrains.getRandom().name
|
val terrain = if (Math.random() > waterPercent) terrains.random().name
|
||||||
else "Ocean"
|
else "Ocean"
|
||||||
val area = Area(terrain)
|
val area = Area(terrain)
|
||||||
val tile = emptyTiles.getRandom()
|
val tile = emptyTiles.random()
|
||||||
emptyTiles -= tile
|
emptyTiles -= tile
|
||||||
area.addTile(tile)
|
area.addTile(tile)
|
||||||
areas += area
|
areas += area
|
||||||
@ -377,7 +376,7 @@ open class SeedRandomMapGenerator : RandomMapGenerator() {
|
|||||||
fun expandAreas(areas: ArrayList<Area>, map: HashMap<Vector2, TileInfo>) {
|
fun expandAreas(areas: ArrayList<Area>, map: HashMap<Vector2, TileInfo>) {
|
||||||
val expandableAreas = ArrayList<Area>(areas)
|
val expandableAreas = ArrayList<Area>(areas)
|
||||||
while (expandableAreas.isNotEmpty()) {
|
while (expandableAreas.isNotEmpty()) {
|
||||||
val areaToExpand = expandableAreas.getRandom()
|
val areaToExpand = expandableAreas.random()
|
||||||
if(areaToExpand.locations.size>=20){
|
if(areaToExpand.locations.size>=20){
|
||||||
expandableAreas -= areaToExpand
|
expandableAreas -= areaToExpand
|
||||||
continue
|
continue
|
||||||
@ -387,7 +386,7 @@ open class SeedRandomMapGenerator : RandomMapGenerator() {
|
|||||||
.filter { map.containsKey(it) && map[it]!!.baseTerrain=="" }.toList()
|
.filter { map.containsKey(it) && map[it]!!.baseTerrain=="" }.toList()
|
||||||
if (availableExpansionVectors.isEmpty()) expandableAreas -= areaToExpand
|
if (availableExpansionVectors.isEmpty()) expandableAreas -= areaToExpand
|
||||||
else {
|
else {
|
||||||
val expansionVector = availableExpansionVectors.getRandom()
|
val expansionVector = availableExpansionVectors.random()
|
||||||
areaToExpand.addTile(map[expansionVector]!!)
|
areaToExpand.addTile(map[expansionVector]!!)
|
||||||
|
|
||||||
val neighbors = HexMath().getAdjacentVectors(expansionVector)
|
val neighbors = HexMath().getAdjacentVectors(expansionVector)
|
||||||
@ -420,7 +419,7 @@ open class RandomMapGenerator {
|
|||||||
tileInfo.position = position
|
tileInfo.position = position
|
||||||
val terrains = GameBasics.Terrains.values
|
val terrains = GameBasics.Terrains.values
|
||||||
|
|
||||||
val baseTerrain = terrains.filter { it.type === TerrainType.Land && it.name != "Lakes" }.getRandom()
|
val baseTerrain = terrains.filter { it.type === TerrainType.Land && it.name != "Lakes" }.random()
|
||||||
tileInfo.baseTerrain = baseTerrain.name
|
tileInfo.baseTerrain = baseTerrain.name
|
||||||
|
|
||||||
addRandomTerrainFeature(tileInfo)
|
addRandomTerrainFeature(tileInfo)
|
||||||
@ -433,7 +432,7 @@ open class RandomMapGenerator {
|
|||||||
if (tileInfo.getBaseTerrain().canHaveOverlay && Math.random() > 0.7f) {
|
if (tileInfo.getBaseTerrain().canHaveOverlay && Math.random() > 0.7f) {
|
||||||
val secondaryTerrains = GameBasics.Terrains.values
|
val secondaryTerrains = GameBasics.Terrains.values
|
||||||
.filter { it.type === TerrainType.TerrainFeature && it.occursOn!!.contains(tileInfo.baseTerrain) }
|
.filter { it.type === TerrainType.TerrainFeature && it.occursOn!!.contains(tileInfo.baseTerrain) }
|
||||||
if (secondaryTerrains.any()) tileInfo.terrainFeature = secondaryTerrains.getRandom().name
|
if (secondaryTerrains.any()) tileInfo.terrainFeature = secondaryTerrains.random().name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -457,7 +456,7 @@ open class RandomMapGenerator {
|
|||||||
private fun getRandomResource(resources: List<TileResource>, resourceType: ResourceType): TileResource? {
|
private fun getRandomResource(resources: List<TileResource>, resourceType: ResourceType): TileResource? {
|
||||||
val filtered = resources.filter { it.resourceType == resourceType }
|
val filtered = resources.filter { it.resourceType == resourceType }
|
||||||
if (filtered.isEmpty()) return null
|
if (filtered.isEmpty()) return null
|
||||||
else return filtered.getRandom()
|
else return filtered.random()
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun generateMap(distance: Int): HashMap<String, TileInfo> {
|
open fun generateMap(distance: Int): HashMap<String, TileInfo> {
|
||||||
|
@ -6,7 +6,6 @@ import com.unciv.logic.civilization.CivilizationInfo
|
|||||||
import com.unciv.models.gamebasics.tech.Technology
|
import com.unciv.models.gamebasics.tech.Technology
|
||||||
import com.unciv.models.stats.NamedStats
|
import com.unciv.models.stats.NamedStats
|
||||||
import com.unciv.models.stats.Stats
|
import com.unciv.models.stats.Stats
|
||||||
import com.unciv.ui.utils.getRandom
|
|
||||||
|
|
||||||
class Building : NamedStats(), IConstruction{
|
class Building : NamedStats(), IConstruction{
|
||||||
|
|
||||||
@ -292,7 +291,7 @@ class Building : NamedStats(), IConstruction{
|
|||||||
"Free Social Policy" in uniques -> civInfo.policies.freePolicies++
|
"Free Social Policy" in uniques -> civInfo.policies.freePolicies++
|
||||||
"Free Great Person" in uniques -> {
|
"Free Great Person" in uniques -> {
|
||||||
if (civInfo.isPlayerCivilization()) civInfo.greatPeople.freeGreatPeople++
|
if (civInfo.isPlayerCivilization()) civInfo.greatPeople.freeGreatPeople++
|
||||||
else civInfo.addGreatPerson(GameBasics.Units.keys.filter { it.startsWith("Great") }.getRandom())
|
else civInfo.addGreatPerson(GameBasics.Units.keys.filter { it.startsWith("Great") }.random())
|
||||||
}
|
}
|
||||||
"+1 population in each city" in uniques -> {
|
"+1 population in each city" in uniques -> {
|
||||||
for(city in civInfo.cities){
|
for(city in civInfo.cities){
|
||||||
|
@ -77,7 +77,7 @@ class NewGameScreen: PickerScreen(){
|
|||||||
|
|
||||||
addDifficultySelectBox(newGameOptionsTable)
|
addDifficultySelectBox(newGameOptionsTable)
|
||||||
|
|
||||||
val noBarbariansCheckbox = CheckBox("No barbarians",skin)
|
val noBarbariansCheckbox = CheckBox("No barbarians".tr(),skin)
|
||||||
noBarbariansCheckbox.isChecked=newGameParameters.noBarbarians
|
noBarbariansCheckbox.isChecked=newGameParameters.noBarbarians
|
||||||
noBarbariansCheckbox.addListener(object : ChangeListener() {
|
noBarbariansCheckbox.addListener(object : ChangeListener() {
|
||||||
override fun changed(event: ChangeEvent?, actor: Actor?) {
|
override fun changed(event: ChangeEvent?, actor: Actor?) {
|
||||||
|
@ -10,7 +10,6 @@ import com.unciv.logic.GameSaver
|
|||||||
import com.unciv.models.gamebasics.tr
|
import com.unciv.models.gamebasics.tr
|
||||||
import com.unciv.ui.pickerscreens.PickerScreen
|
import com.unciv.ui.pickerscreens.PickerScreen
|
||||||
import com.unciv.ui.utils.enable
|
import com.unciv.ui.utils.enable
|
||||||
import com.unciv.ui.utils.getRandom
|
|
||||||
import com.unciv.ui.utils.onClick
|
import com.unciv.ui.utils.onClick
|
||||||
import com.unciv.ui.utils.toLabel
|
import com.unciv.ui.utils.toLabel
|
||||||
|
|
||||||
@ -41,7 +40,7 @@ class SaveScreen : PickerScreen() {
|
|||||||
"Fluffy","Magical","Invisible")
|
"Fluffy","Magical","Invisible")
|
||||||
val nouns = listOf("Moose","Pigeon","Weasel","Ferret","Onion","Marshmallow","Crocodile","Unicorn",
|
val nouns = listOf("Moose","Pigeon","Weasel","Ferret","Onion","Marshmallow","Crocodile","Unicorn",
|
||||||
"Sandwich","Elephant","Kangaroo","Marmot","Beagle","Dolphin","Fish","Tomato","Duck","Dinosaur")
|
"Sandwich","Elephant","Kangaroo","Marmot","Beagle","Dolphin","Fish","Tomato","Duck","Dinosaur")
|
||||||
val defaultSaveName = adjectives.getRandom()+" "+nouns.getRandom()
|
val defaultSaveName = adjectives.random()+" "+nouns.random()
|
||||||
textField.text = defaultSaveName
|
textField.text = defaultSaveName
|
||||||
|
|
||||||
newSave.add("Saved game name".toLabel()).row()
|
newSave.add("Saved game name".toLabel()).row()
|
||||||
|
@ -98,7 +98,6 @@ fun Button.enable() {
|
|||||||
color = Color.WHITE
|
color = Color.WHITE
|
||||||
touchable = Touchable.enabled
|
touchable = Touchable.enabled
|
||||||
}
|
}
|
||||||
fun <E> List<E>.getRandom(): E = if (size == 0) throw Exception() else get((Math.random() * size).toInt())
|
|
||||||
|
|
||||||
|
|
||||||
fun colorFromRGB(r: Int, g: Int, b: Int): Color {
|
fun colorFromRGB(r: Int, g: Int, b: Int): Color {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user