mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-23 06:08:46 +07:00
Tile Improvements get parametrized Uniques!
This commit is contained in:
@ -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}
|
||||
|
@ -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() + "%"
|
||||
|
@ -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.
|
||||
|
||||
|
Reference in New Issue
Block a user