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 // Military improvement
{ {
name: "Fort", "name": "Fort",
terrainsCanBeBuiltOn: ["Plains","Grassland","Desert","Hill","Tundra","Snow"], "terrainsCanBeBuiltOn": ["Plains","Grassland","Desert","Hill","Tundra","Snow"],
turnsToBuild: 6, "turnsToBuild": 6,
techRequired: "Engineering", "techRequired": "Engineering",
uniques: ["Gives a defensive bonus of 50%"] "uniques": ["Gives a defensive bonus of [50]%"]
}, },
// Transportation // Transportation
@ -171,7 +171,7 @@
}, },
{ {
"name": "Citadel", "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 // TODO (G&K): adds every tile around it to your territory
}, },
@ -181,7 +181,7 @@
"uniqueTo": "Polynesia", "uniqueTo": "Polynesia",
"culture": 1, "culture": 1,
"turnsToBuild": 4, "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", "techRequired": "Construction",
"improvingTech": "Flight", "improvingTech": "Flight",
"improvingTechStats": {"gold": 1} "improvingTechStats": {"gold": 1}
@ -192,7 +192,7 @@
"terrainsCanBeBuiltOn": ["Hill"], "terrainsCanBeBuiltOn": ["Hill"],
"food": 1, "food": 1,
"turnsToBuild": 7, "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", "techRequired": "Construction",
"improvingTech": "Fertilizer", "improvingTech": "Fertilizer",
"improvingTechStats": {"food":1} "improvingTechStats": {"food":1}

View File

@ -251,10 +251,13 @@ open class TileInfo {
&& observingCiv.hasUnique("Tile yield from Great Improvements +100%")) && observingCiv.hasUnique("Tile yield from Great Improvements +100%"))
stats.add(improvement) // again, for the double effect stats.add(improvement) // again, for the double effect
if (improvement.uniques.contains("+1 additional Culture for each adjacent Moai")) for(unique in improvement.uniqueObjects)
stats.culture += neighbors.count { it.improvement == "Moai" } if (unique.placeholderText == "[] for each adjacent []") {
if (improvement.uniques.contains("+1 food for each adjacent Mountain")) val adjacent = unique.params[1]
stats.food += neighbors.count { it.baseTerrain == Constants.mountain } 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 return stats
} }
@ -370,11 +373,9 @@ open class TileInfo {
var defenceBonus = getDefensiveBonus() var defenceBonus = getDefensiveBonus()
val tileImprovement = getTileImprovement() val tileImprovement = getTileImprovement()
if (tileImprovement != null) { if (tileImprovement != null) {
defenceBonus += when { for (unique in tileImprovement.uniqueObjects)
tileImprovement.hasUnique("Gives a defensive bonus of 50%") -> 0.5f if (unique.placeholderText == "Gives a defensive bonus of []%")
tileImprovement.hasUnique("Gives a defensive bonus of 100%") -> 1.0f defenceBonus += unique.params[0].toFloat() / 100
else -> 0.0f
}
} }
if (defenceBonus != 0.0f) { if (defenceBonus != 0.0f) {
var defencePercentString = (defenceBonus * 100).toInt().toString() + "%" 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.logic.civilization.CivilizationInfo
import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.Ruleset
import com.unciv.models.ruleset.Unique
import com.unciv.models.translations.tr import com.unciv.models.translations.tr
import com.unciv.models.stats.NamedStats import com.unciv.models.stats.NamedStats
import com.unciv.models.stats.Stats import com.unciv.models.stats.Stats
@ -22,6 +23,7 @@ class TileImprovement : NamedStats() {
var improvingTechStats: Stats? = null var improvingTechStats: Stats? = null
var uniqueTo:String? = null var uniqueTo:String? = null
var uniques = ArrayList<String>() var uniques = ArrayList<String>()
val uniqueObjects:List<Unique> by lazy { uniques.map { Unique(it) } }
val turnsToBuild: Int = 0 // This is the base cost. val turnsToBuild: Int = 0 // This is the base cost.