Tile Improvements get parametrized Uniques!

This commit is contained in:
Yair Morgenstern
2020-08-07 14:48:14 +03:00
parent 9a2ec028af
commit 376079100d
3 changed files with 20 additions and 17 deletions

View File

@ -84,11 +84,11 @@
// Military improvement
{
name: "Fort",
terrainsCanBeBuiltOn: ["Plains","Grassland","Desert","Hill","Tundra","Snow"],
turnsToBuild: 6,
techRequired: "Engineering",
uniques: ["Gives a defensive bonus of 50%"]
"name": "Fort",
"terrainsCanBeBuiltOn": ["Plains","Grassland","Desert","Hill","Tundra","Snow"],
"turnsToBuild": 6,
"techRequired": "Engineering",
"uniques": ["Gives a defensive bonus of [50]%"]
},
// Transportation
@ -171,7 +171,7 @@
},
{
"name": "Citadel",
"uniques": ["Gives a defensive bonus of 100%", "Deal 30 damage to adjacent enemy units", "Great Improvement"]
"uniques": ["Gives a defensive bonus of [100]%", "Deal 30 damage to adjacent enemy units", "Great Improvement"]
// TODO (G&K): adds every tile around it to your territory
},
@ -181,7 +181,7 @@
"uniqueTo": "Polynesia",
"culture": 1,
"turnsToBuild": 4,
"uniques": ["+1 additional Culture for each adjacent Moai","Can only be built on Coastal tiles"],
"uniques": ["[+1 Culture] for each adjacent [Moai]", "Can only be built on Coastal tiles"],
"techRequired": "Construction",
"improvingTech": "Flight",
"improvingTechStats": {"gold": 1}
@ -192,7 +192,7 @@
"terrainsCanBeBuiltOn": ["Hill"],
"food": 1,
"turnsToBuild": 7,
"uniques": ["+1 food for each adjacent Mountain", "Cannot be built on bonus resource"],
"uniques": ["[+1 Food] for each adjacent [Mountain]", "Cannot be built on bonus resource"],
"techRequired": "Construction",
"improvingTech": "Fertilizer",
"improvingTechStats": {"food":1}

View File

@ -251,10 +251,13 @@ open class TileInfo {
&& observingCiv.hasUnique("Tile yield from Great Improvements +100%"))
stats.add(improvement) // again, for the double effect
if (improvement.uniques.contains("+1 additional Culture for each adjacent Moai"))
stats.culture += neighbors.count { it.improvement == "Moai" }
if (improvement.uniques.contains("+1 food for each adjacent Mountain"))
stats.food += neighbors.count { it.baseTerrain == Constants.mountain }
for(unique in improvement.uniqueObjects)
if (unique.placeholderText == "[] for each adjacent []") {
val adjacent = unique.params[1]
val numberOfBonuses = neighbors.count { it.improvement == adjacent
|| it.baseTerrain==adjacent || it.terrainFeature==adjacent }
stats.add(Stats.parse(unique.params[0]).times(numberOfBonuses.toFloat()))
}
return stats
}
@ -370,11 +373,9 @@ open class TileInfo {
var defenceBonus = getDefensiveBonus()
val tileImprovement = getTileImprovement()
if (tileImprovement != null) {
defenceBonus += when {
tileImprovement.hasUnique("Gives a defensive bonus of 50%") -> 0.5f
tileImprovement.hasUnique("Gives a defensive bonus of 100%") -> 1.0f
else -> 0.0f
}
for (unique in tileImprovement.uniqueObjects)
if (unique.placeholderText == "Gives a defensive bonus of []%")
defenceBonus += unique.params[0].toFloat() / 100
}
if (defenceBonus != 0.0f) {
var defencePercentString = (defenceBonus * 100).toInt().toString() + "%"

View File

@ -2,6 +2,7 @@ package com.unciv.models.ruleset.tile
import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.models.ruleset.Ruleset
import com.unciv.models.ruleset.Unique
import com.unciv.models.translations.tr
import com.unciv.models.stats.NamedStats
import com.unciv.models.stats.Stats
@ -22,6 +23,7 @@ class TileImprovement : NamedStats() {
var improvingTechStats: Stats? = null
var uniqueTo:String? = null
var uniques = ArrayList<String>()
val uniqueObjects:List<Unique> by lazy { uniques.map { Unique(it) } }
val turnsToBuild: Int = 0 // This is the base cost.