Added "Vegetation" unique so that vegetation spawn is not limited to just jungle and forest (#6569)

This commit is contained in:
Yair Morgenstern 2022-04-19 15:25:33 +03:00 committed by GitHub
parent aa6bd364de
commit 1069b0933e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 14 additions and 10 deletions

View File

@ -178,7 +178,7 @@
"unbuildable": true, "unbuildable": true,
"defenceBonus": 0.25, "defenceBonus": 0.25,
"occursOn": ["Tundra","Plains","Grassland","Hill"], "occursOn": ["Tundra","Plains","Grassland","Hill"],
"uniques": ["Rough terrain", "uniques": ["Rough terrain", "Vegetation",
"Provides a one-time Production bonus to the closest city when cut down", "Provides a one-time Production bonus to the closest city when cut down",
"Blocks line-of-sight from tiles at same elevation", "Blocks line-of-sight from tiles at same elevation",
"[25]% Chance to be destroyed by nukes", "[25]% Chance to be destroyed by nukes",
@ -202,7 +202,7 @@
"defenceBonus": 0.25, "defenceBonus": 0.25,
"occursOn": ["Plains","Grassland"], "occursOn": ["Plains","Grassland"],
"uniques": [ "uniques": [
"Rough terrain", "Rough terrain", "Vegetation",
"Blocks line-of-sight from tiles at same elevation", "Blocks line-of-sight from tiles at same elevation",
"[25]% Chance to be destroyed by nukes", "[25]% Chance to be destroyed by nukes",
"[-1] to Fertility for Map Generation", "[-1] to Fertility for Map Generation",

View File

@ -179,7 +179,7 @@
"defenceBonus": 0.25, "defenceBonus": 0.25,
"occursOn": ["Tundra","Plains","Grassland","Hill"], "occursOn": ["Tundra","Plains","Grassland","Hill"],
"uniques": [ "uniques": [
"Rough terrain", "Rough terrain", "Vegetation",
"Provides a one-time Production bonus to the closest city when cut down", "Provides a one-time Production bonus to the closest city when cut down",
"Blocks line-of-sight from tiles at same elevation", "Blocks line-of-sight from tiles at same elevation",
"[25]% Chance to be destroyed by nukes", "[25]% Chance to be destroyed by nukes",
@ -204,7 +204,7 @@
"defenceBonus": 0.25, "defenceBonus": 0.25,
"occursOn": ["Plains","Grassland"], "occursOn": ["Plains","Grassland"],
"uniques": [ "uniques": [
"Rough terrain", "Rough terrain", "Vegetation",
"Blocks line-of-sight from tiles at same elevation", "Blocks line-of-sight from tiles at same elevation",
"[25]% Chance to be destroyed by nukes", "[25]% Chance to be destroyed by nukes",
"[-1] to Fertility for Map Generation", "[-1] to Fertility for Map Generation",

View File

@ -509,15 +509,17 @@ class MapGenerator(val ruleset: Ruleset) {
*/ */
private fun spawnVegetation(tileMap: TileMap) { private fun spawnVegetation(tileMap: TileMap) {
val vegetationSeed = randomness.RNG.nextInt().toDouble() val vegetationSeed = randomness.RNG.nextInt().toDouble()
val candidateTerrains = Constants.vegetation.mapNotNull { ruleset.terrains[it] }.flatMap{ it.occursOn } val vegetationTerrains = (Constants.vegetation.mapNotNull { ruleset.terrains[it] }
//Checking it.baseTerrain in candidateTerrains to make sure forest does not spawn on desert hill + ruleset.terrains.values.filter { it.hasUnique(UniqueType.Vegetation) }).toHashSet()
val candidateTerrains = vegetationTerrains.flatMap{ it.occursOn }
// Checking it.baseTerrain in candidateTerrains to make sure forest does not spawn on desert hill
for (tile in tileMap.values.asSequence().filter { it.baseTerrain in candidateTerrains for (tile in tileMap.values.asSequence().filter { it.baseTerrain in candidateTerrains
&& it.getLastTerrain().name in candidateTerrains }) { && it.getLastTerrain().name in candidateTerrains }) {
val vegetation = (randomness.getPerlinNoise(tile, vegetationSeed, scale = 3.0, nOctaves = 1) + 1.0) / 2.0 val vegetation = (randomness.getPerlinNoise(tile, vegetationSeed, scale = 3.0, nOctaves = 1) + 1.0) / 2.0
if (vegetation <= tileMap.mapParameters.vegetationRichness) { if (vegetation <= tileMap.mapParameters.vegetationRichness) {
val randomVegetation = Constants.vegetation.filter { ruleset.terrains[it]!!.occursOn.contains(tile.getLastTerrain().name) }.random(randomness.RNG) val randomVegetation = vegetationTerrains.filter { it.occursOn.contains(tile.getLastTerrain().name) }.random(randomness.RNG)
tile.addTerrainFeature(randomVegetation) tile.addTerrainFeature(randomVegetation.name)
} }
} }
} }

View File

@ -522,6 +522,8 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags:
TerrainGrantsPromotion("Grants [promotion] ([comment]) to adjacent [mapUnitFilter] units for the rest of the game", UniqueTarget.Terrain), TerrainGrantsPromotion("Grants [promotion] ([comment]) to adjacent [mapUnitFilter] units for the rest of the game", UniqueTarget.Terrain),
GrantsCityStrength("[amount] Strength for cities built on this terrain", UniqueTarget.Terrain), GrantsCityStrength("[amount] Strength for cities built on this terrain", UniqueTarget.Terrain),
ProductionBonusWhenRemoved("Provides a one-time Production bonus to the closest city when cut down", UniqueTarget.Terrain), ProductionBonusWhenRemoved("Provides a one-time Production bonus to the closest city when cut down", UniqueTarget.Terrain),
Vegetation("Vegetation", UniqueTarget.Terrain, flags = UniqueFlag.setOfHiddenToUsers),
TileProvidesYieldWithoutPopulation("Tile provides yield without assigned population", UniqueTarget.Terrain, UniqueTarget.Improvement), TileProvidesYieldWithoutPopulation("Tile provides yield without assigned population", UniqueTarget.Terrain, UniqueTarget.Improvement),
NullifyYields("Nullifies all other stats this tile provides", UniqueTarget.Terrain), NullifyYields("Nullifies all other stats this tile provides", UniqueTarget.Terrain),

View File

@ -263,10 +263,10 @@ class BattleTable(val worldScreen: WorldScreen): Table() {
} }
worldScreen.stage.addAction(Actions.sequence( worldScreen.stage.addAction(Actions.sequence(
object : FloatAction(0f, 1f, 0.3f, Interpolation.sine) { object : FloatAction(0f, 1f, 0.3f, Interpolation.sine) {
override fun update(percent: Float)=updateRedPercent(percent) override fun update(percent: Float) = updateRedPercent(percent)
}, },
object : FloatAction(0f, 1f, 0.3f, Interpolation.sine) { object : FloatAction(0f, 1f, 0.3f, Interpolation.sine) {
override fun update(percent: Float)=updateRedPercent(1-percent) override fun update(percent: Float) = updateRedPercent(1 - percent)
} }
)) ))
} }