mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-28 06:16:37 -04:00
terrain.occursOn is now an arrayList - helps with definition checking and generally simplifies things
This commit is contained in:
parent
c85b51474c
commit
93aa06bc99
@ -237,21 +237,21 @@ class MapGenerator(val ruleset: Ruleset) {
|
||||
}
|
||||
|
||||
/**
|
||||
* [MapParameters.vegetationOccurrance] is the threshold for vegetation spawn
|
||||
* [MapParameters.vegetationRichness] is the threshold for vegetation spawn
|
||||
*/
|
||||
private fun spawnVegetation(tileMap: TileMap) {
|
||||
val vegetationSeed = randomness.RNG.nextInt().toDouble()
|
||||
val candidateTerrains = Constants.vegetation.flatMap{ ruleset.terrains[it]!!.occursOn!! }
|
||||
val candidateTerrains = Constants.vegetation.flatMap{ ruleset.terrains[it]!!.occursOn }
|
||||
for (tile in tileMap.values.asSequence().filter { it.baseTerrain in candidateTerrains && it.terrainFeature == null
|
||||
&& (!it.isHill() || Constants.hill in candidateTerrains) }) {
|
||||
val vegetation = (randomness.getPerlinNoise(tile, vegetationSeed, scale = 3.0, nOctaves = 1) + 1.0) / 2.0
|
||||
|
||||
if (vegetation <= tileMap.mapParameters.vegetationRichness)
|
||||
tile.terrainFeature = Constants.vegetation.filter { ruleset.terrains[it]!!.occursOn!!.contains(tile.baseTerrain) }.random(randomness.RNG)
|
||||
tile.terrainFeature = Constants.vegetation.filter { ruleset.terrains[it]!!.occursOn.contains(tile.baseTerrain) }.random(randomness.RNG)
|
||||
}
|
||||
}
|
||||
/**
|
||||
* [MapParameters.rareFeaturesProbability] is the probability of spawning a rare feature
|
||||
* [MapParameters.rareFeaturesRichness] is the probability of spawning a rare feature
|
||||
*/
|
||||
private fun spawnRareFeatures(tileMap: TileMap) {
|
||||
val rareFeatures = ruleset.terrains.values.filter {
|
||||
@ -259,8 +259,8 @@ class MapGenerator(val ruleset: Ruleset) {
|
||||
}
|
||||
for (tile in tileMap.values.asSequence().filter { it.terrainFeature == null }) {
|
||||
if (randomness.RNG.nextDouble() <= tileMap.mapParameters.rareFeaturesRichness) {
|
||||
val possibleFeatures = rareFeatures.filter { it.occursOn != null && it.occursOn.contains(tile.baseTerrain)
|
||||
&& (!tile.isHill() || it.occursOn.contains(Constants.hill) )}
|
||||
val possibleFeatures = rareFeatures.filter { it.occursOn.contains(tile.baseTerrain)
|
||||
&& (!tile.isHill() || it.occursOn.contains(Constants.hill)) }
|
||||
if (possibleFeatures.any())
|
||||
tile.terrainFeature = possibleFeatures.random(randomness.RNG).name
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ class NaturalWonderGenerator(val ruleset: Ruleset){
|
||||
private fun spawnBarringerCrater(tileMap: TileMap) {
|
||||
val wonder = ruleset.terrains[Constants.barringerCrater]!!
|
||||
val suitableLocations = tileMap.values.filter { it.resource == null && it.improvement == null
|
||||
&& wonder.occursOn!!.contains(it.getLastTerrain().name)
|
||||
&& wonder.occursOn.contains(it.getLastTerrain().name)
|
||||
&& it.neighbors.none { neighbor -> neighbor.getBaseTerrain().name == Constants.grassland }
|
||||
&& it.neighbors.count{ neighbor -> neighbor.getBaseTerrain().name == Constants.mountain } <= 2
|
||||
&& it.neighbors.count{ neighbor -> neighbor.getBaseTerrain().name == Constants.mountain || neighbor.isHill() } <= 4
|
||||
@ -95,7 +95,7 @@ class NaturalWonderGenerator(val ruleset: Ruleset){
|
||||
private fun spawnMountFuji(tileMap: TileMap) {
|
||||
val wonder = ruleset.terrains[Constants.mountFuji]!!
|
||||
val suitableLocations = tileMap.values.filter { it.resource == null && it.improvement == null
|
||||
&& wonder.occursOn!!.contains(it.getLastTerrain().name)
|
||||
&& wonder.occursOn.contains(it.getLastTerrain().name)
|
||||
&& it.neighbors.none { neighbor -> neighbor.getBaseTerrain().name == Constants.tundra }
|
||||
&& it.neighbors.none { neighbor -> neighbor.getBaseTerrain().name == Constants.desert }
|
||||
&& it.neighbors.none { neighbor -> neighbor.getBaseTerrain().name == Constants.mountain }
|
||||
@ -113,7 +113,7 @@ class NaturalWonderGenerator(val ruleset: Ruleset){
|
||||
private fun spawnGrandMesa(tileMap: TileMap) {
|
||||
val wonder = ruleset.terrains[Constants.grandMesa]!!
|
||||
val suitableLocations = tileMap.values.filter { it.resource == null && it.improvement == null
|
||||
&& wonder.occursOn!!.contains(it.getLastTerrain().name)
|
||||
&& wonder.occursOn.contains(it.getLastTerrain().name)
|
||||
&& it.neighbors.count{ neighbor -> neighbor.isHill() } >= 2
|
||||
&& it.neighbors.none { neighbor -> neighbor.getBaseTerrain().name == Constants.grassland }
|
||||
&& it.neighbors.count { neighbor -> neighbor.getBaseTerrain().name == Constants.mountain } <= 2
|
||||
@ -129,13 +129,13 @@ class NaturalWonderGenerator(val ruleset: Ruleset){
|
||||
private fun spawnGreatBarrierReef(tileMap: TileMap) {
|
||||
val wonder = ruleset.terrains[Constants.greatBarrierReef]!!
|
||||
val suitableLocations = tileMap.values.filter { it.resource == null && it.improvement == null
|
||||
&& wonder.occursOn!!.contains(it.getLastTerrain().name)
|
||||
&& wonder.occursOn.contains(it.getLastTerrain().name)
|
||||
&& abs(it.latitude) > tileMap.maxLatitude * 0.1
|
||||
&& abs(it.latitude) < tileMap.maxLatitude * 0.7
|
||||
&& it.neighbors.all {neighbor -> neighbor.isWater}
|
||||
&& it.neighbors.any {neighbor ->
|
||||
neighbor.resource == null && neighbor.improvement == null
|
||||
&& wonder.occursOn!!.contains(neighbor.getLastTerrain().name)
|
||||
&& wonder.occursOn.contains(neighbor.getLastTerrain().name)
|
||||
&& neighbor.neighbors.all{ it.isWater } }
|
||||
}
|
||||
|
||||
@ -143,7 +143,7 @@ class NaturalWonderGenerator(val ruleset: Ruleset){
|
||||
if (location != null) {
|
||||
val location2 = location.neighbors
|
||||
.filter { it.resource == null && it.improvement == null
|
||||
&& wonder.occursOn!!.contains(it.getLastTerrain().name)
|
||||
&& wonder.occursOn.contains(it.getLastTerrain().name)
|
||||
&& it.neighbors.all{ it.isWater } }
|
||||
.toList().random()
|
||||
|
||||
@ -160,7 +160,7 @@ class NaturalWonderGenerator(val ruleset: Ruleset){
|
||||
private fun spawnKrakatoa(tileMap: TileMap) {
|
||||
val wonder = ruleset.terrains[Constants.krakatoa]!!
|
||||
val suitableLocations = tileMap.values.filter { it.resource == null && it.improvement == null
|
||||
&& wonder.occursOn!!.contains(it.getLastTerrain().name)
|
||||
&& wonder.occursOn.contains(it.getLastTerrain().name)
|
||||
&& it.neighbors.any { neighbor -> neighbor.getBaseTerrain().name == Constants.coast }
|
||||
&& it.neighbors.none { neighbor -> neighbor.getLastTerrain().name == Constants.ice }
|
||||
}
|
||||
@ -186,7 +186,7 @@ class NaturalWonderGenerator(val ruleset: Ruleset){
|
||||
private fun spawnRockOfGibraltar(tileMap: TileMap) {
|
||||
val wonder = ruleset.terrains[Constants.rockOfGibraltar]!!
|
||||
val suitableLocations = tileMap.values.filter { it.resource == null && it.improvement == null
|
||||
&& wonder.occursOn!!.contains(it.getLastTerrain().name)
|
||||
&& wonder.occursOn.contains(it.getLastTerrain().name)
|
||||
&& it.neighbors.any { neighbor -> neighbor.getBaseTerrain().name == Constants.coast }
|
||||
&& it.neighbors.count { neighbor -> neighbor.getBaseTerrain().name == Constants.mountain } == 1
|
||||
}
|
||||
@ -221,7 +221,7 @@ class NaturalWonderGenerator(val ruleset: Ruleset){
|
||||
private fun spawnOldFaithful(tileMap: TileMap) {
|
||||
val wonder = ruleset.terrains[Constants.oldFaithful]!!
|
||||
val suitableLocations = tileMap.values.filter { it.resource == null && it.improvement == null
|
||||
&& wonder.occursOn!!.contains(it.getLastTerrain().name)
|
||||
&& wonder.occursOn.contains(it.getLastTerrain().name)
|
||||
&& it.neighbors.count { neighbor -> neighbor.getBaseTerrain().name == Constants.mountain } <= 4
|
||||
&& it.neighbors.count { neighbor -> neighbor.getBaseTerrain().name == Constants.mountain ||
|
||||
neighbor.isHill()
|
||||
@ -239,7 +239,7 @@ class NaturalWonderGenerator(val ruleset: Ruleset){
|
||||
private fun spawnCerroDePotosi(tileMap: TileMap) {
|
||||
val wonder = ruleset.terrains[Constants.cerroDePotosi]!!
|
||||
val suitableLocations = tileMap.values.filter { it.resource == null && it.improvement == null
|
||||
&& wonder.occursOn!!.contains(it.getLastTerrain().name)
|
||||
&& wonder.occursOn.contains(it.getLastTerrain().name)
|
||||
&& it.neighbors.any { neighbor -> neighbor.isHill() }
|
||||
}
|
||||
|
||||
@ -252,7 +252,7 @@ class NaturalWonderGenerator(val ruleset: Ruleset){
|
||||
private fun spawnElDorado(tileMap: TileMap) {
|
||||
val wonder = ruleset.terrains[Constants.elDorado]!!
|
||||
val suitableLocations = tileMap.values.filter { it.resource == null && it.improvement == null
|
||||
&& wonder.occursOn!!.contains(it.getLastTerrain().name)
|
||||
&& wonder.occursOn.contains(it.getLastTerrain().name)
|
||||
&& it.neighbors.any { neighbor -> neighbor.getLastTerrain().name == Constants.jungle }
|
||||
}
|
||||
|
||||
@ -265,7 +265,7 @@ class NaturalWonderGenerator(val ruleset: Ruleset){
|
||||
private fun spawnFountainOfYouth(tileMap: TileMap) {
|
||||
val wonder = ruleset.terrains[Constants.fountainOfYouth]!!
|
||||
val suitableLocations = tileMap.values.filter { it.resource == null && it.improvement == null
|
||||
&& wonder.occursOn!!.contains(it.getLastTerrain().name) }
|
||||
&& wonder.occursOn.contains(it.getLastTerrain().name) }
|
||||
|
||||
trySpawnOnSuitableLocation(suitableLocations, wonder)
|
||||
}
|
||||
|
@ -258,8 +258,8 @@ class Ruleset {
|
||||
lines += "${resource.name} revealed by tech ${resource.revealedBy} which does not exist!"
|
||||
if (resource.improvement != null && !tileImprovements.containsKey(resource.improvement!!))
|
||||
lines += "${resource.name} improved by improvement ${resource.improvement} which does not exist!"
|
||||
for(terrain in resource.terrainsCanBeFoundOn)
|
||||
if(!terrains.containsKey(terrain))
|
||||
for (terrain in resource.terrainsCanBeFoundOn)
|
||||
if (!terrains.containsKey(terrain))
|
||||
lines += "${resource.name} can be found on terrain $terrain which does not exist!"
|
||||
}
|
||||
|
||||
@ -270,12 +270,12 @@ class Ruleset {
|
||||
if (!terrains.containsKey(terrain))
|
||||
lines += "${improvement.name} can be built on terrain $terrain which does not exist!"
|
||||
}
|
||||
//
|
||||
// for(terrain in terrains.values){
|
||||
// for(baseTerrain in terrain.occursOn)
|
||||
// if (!terrains.containsKey(baseTerrain))
|
||||
// lines += "${improvement.name} can be built on terrain $terrain which does not exist!"
|
||||
// }
|
||||
|
||||
for (terrain in terrains.values) {
|
||||
for (baseTerrain in terrain.occursOn)
|
||||
if (!terrains.containsKey(baseTerrain))
|
||||
lines += "${terrain.name} occurs on terrain $baseTerrain which does not exist!"
|
||||
}
|
||||
|
||||
for (tech in technologies.values) {
|
||||
for (prereq in tech.prerequisites) {
|
||||
|
@ -20,7 +20,7 @@ class Terrain : NamedStats() {
|
||||
var unbuildable = false
|
||||
|
||||
/** For terrain features */
|
||||
val occursOn: Collection<String>? = null
|
||||
val occursOn = ArrayList<String>()
|
||||
|
||||
/** Used by Natural Wonders: it is the baseTerrain on top of which the Natural Wonder is placed */
|
||||
val turnsInto: String? = null
|
||||
@ -48,7 +48,7 @@ class Terrain : NamedStats() {
|
||||
fun getDescription(ruleset: Ruleset): String {
|
||||
val sb = StringBuilder()
|
||||
sb.appendln(this.clone().toString())
|
||||
if (occursOn != null)
|
||||
if (occursOn.isNotEmpty())
|
||||
sb.appendln("Occurs on [${occursOn.joinToString(", ") { it.tr() }}]".tr())
|
||||
|
||||
if (turnsInto != null)
|
||||
|
@ -149,7 +149,7 @@ class CivilopediaScreen(ruleset: Ruleset) : CameraStageBaseScreen() {
|
||||
}
|
||||
TerrainType.TerrainFeature -> {
|
||||
tileInfo.terrainFeature = terrain.name
|
||||
tileInfo.baseTerrain = terrain.occursOn?.last() ?: Constants.grassland
|
||||
tileInfo.baseTerrain = terrain.occursOn.lastOrNull() ?: Constants.grassland
|
||||
}
|
||||
else ->
|
||||
tileInfo.baseTerrain = terrain.name
|
||||
|
@ -359,7 +359,7 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera
|
||||
val terrainObject = ruleset.terrains[terrain]!!
|
||||
if (terrainObject.type == TerrainType.TerrainFeature) {
|
||||
tileInfo.baseTerrain =
|
||||
if (terrainObject.occursOn != null) terrainObject.occursOn.first()
|
||||
if (terrainObject.occursOn.isNotEmpty()) terrainObject.occursOn.first()
|
||||
else "Grassland"
|
||||
tileInfo.terrainFeature = terrain
|
||||
} else tileInfo.baseTerrain = terrain
|
||||
@ -379,7 +379,7 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera
|
||||
val tileInfo = TileInfo()
|
||||
if (terrain.type == TerrainType.TerrainFeature) {
|
||||
tileInfo.baseTerrain = when {
|
||||
terrain.occursOn != null -> terrain.occursOn.first()
|
||||
terrain.occursOn.isNotEmpty() -> terrain.occursOn.first()
|
||||
else -> "Grassland"
|
||||
}
|
||||
tileInfo.terrainFeature = terrain.name
|
||||
@ -493,7 +493,7 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera
|
||||
|
||||
if (tileInfo.terrainFeature != null) {
|
||||
val terrainFeature = tileInfo.getTerrainFeature()!!
|
||||
if(terrainFeature.occursOn!=null && !terrainFeature.occursOn.contains(tileInfo.baseTerrain))
|
||||
if(terrainFeature.occursOn.isNotEmpty() && !terrainFeature.occursOn.contains(tileInfo.baseTerrain))
|
||||
tileInfo.terrainFeature=null
|
||||
}
|
||||
if (tileInfo.resource != null) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user