Add unique for increasing price every time it's built (#11100)

* Add unique for increasing price every time it's built

* Update name to be more accurate

* whoops
This commit is contained in:
SeventhM 2024-02-09 02:19:42 -08:00 committed by GitHub
parent 0be8fa8e39
commit 09413a3182
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 17 additions and 1 deletions

View File

@ -345,6 +345,7 @@ class CityConstructions : IsPartOfGameInfoSerialization {
city.civ.addNotification("No space available to place [${construction.name}] near [${city.name}]",
city.location, NotificationCategory.Production, construction.name)
}
city.civ.civConstructions.builtItemsWithIncreasingCost[construction.name] += 1
}
}
}

View File

@ -21,6 +21,9 @@ class CivConstructions : IsPartOfGameInfoSerialization {
/** Maps construction names to the amount of times bought */
val boughtItemsWithIncreasingPrice: Counter<String> = Counter()
/** Maps construction names to the amount of times built */
val builtItemsWithIncreasingCost: Counter<String> = Counter()
/** Maps cities by id to a set of all free buildings by name they contain.
* The building name is the Nation-specific equivalent if available.
* Sources: [UniqueType.FreeStatBuildings] **and** [UniqueType.FreeSpecificBuildings]
@ -51,6 +54,7 @@ class CivConstructions : IsPartOfGameInfoSerialization {
toReturn.freeStatBuildingsProvided.putAll(freeStatBuildingsProvided)
toReturn.freeSpecificBuildingsProvided.putAll(freeSpecificBuildingsProvided)
toReturn.boughtItemsWithIncreasingPrice.add(boughtItemsWithIncreasingPrice) // add copies
toReturn.builtItemsWithIncreasingCost.add(builtItemsWithIncreasingCost)
return toReturn
}

View File

@ -105,6 +105,9 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction {
override fun getProductionCost(civInfo: Civilization): Int {
var productionCost = cost.toFloat()
for (unique in getMatchingUniques(UniqueType.CostIncreasesWhenBuilt, StateForConditionals(civInfo)))
productionCost += civInfo.civConstructions.builtItemsWithIncreasingCost[name] * unique.params[0].toInt()
for (unique in getMatchingUniques(UniqueType.CostIncreasesPerCity, StateForConditionals(civInfo)))
productionCost += civInfo.cities.size * unique.params[0].toInt()

View File

@ -280,7 +280,8 @@ enum class UniqueType(
///////////////////////////////////////// region 03 BUILDING UNIQUES /////////////////////////////////////////
CostIncreasesPerCity("Cost increases by [amount] per owned city", UniqueTarget.Building),
CostIncreasesPerCity("Cost increases by [amount] per owned city", UniqueTarget.Building, UniqueTarget.Unit),
CostIncreasesWhenBuilt("Cost increases by [amount] when built", UniqueTarget.Building, UniqueTarget.Unit),
RequiresBuildingInAllCities("Requires a [buildingFilter] in all cities", UniqueTarget.Building),
RequiresBuildingInSomeCities("Requires a [buildingFilter] in at least [amount] cities", UniqueTarget.Building),

View File

@ -11,6 +11,13 @@ class BaseUnitCost(val baseUnit: BaseUnit) {
fun getProductionCost(civInfo: Civilization): Int {
var productionCost = baseUnit.cost.toFloat()
for (unique in baseUnit.getMatchingUniques(UniqueType.CostIncreasesPerCity, StateForConditionals(civInfo)))
productionCost += civInfo.cities.size * unique.params[0].toInt()
for (unique in baseUnit.getMatchingUniques(UniqueType.CostIncreasesWhenBuilt, StateForConditionals(civInfo)))
productionCost += civInfo.civConstructions.builtItemsWithIncreasingCost[baseUnit.name] * unique.params[0].toInt()
if (civInfo.isCityState())
productionCost *= 1.5f
productionCost *= if (civInfo.isHuman())