Source object names for users unified

This commit is contained in:
Yair Morgenstern
2024-01-15 21:09:46 +02:00
parent 7f3be9dce2
commit b09354a042
5 changed files with 24 additions and 25 deletions

View File

@ -22,7 +22,7 @@ object BattleDamage {
UniqueTarget.Unit -> "Unit ability"
UniqueTarget.Nation -> "National ability"
UniqueTarget.Global -> GlobalUniques.getUniqueSourceDescription(unique)
else -> "[${unique.sourceObjectName}] ([${unique.sourceObjectType?.name}])"
else -> "[${unique.sourceObjectName}] ([${unique.getSourceNameForUser()}])"
}.tr()
if (unique.conditionals.isEmpty()) return source
@ -91,7 +91,7 @@ object BattleDamage {
// https://steamcommunity.com/sharedfiles/filedetails/?id=326411722#464287
val effect = unique.params[0].toInt() - 3 * distance
if (effect > 0)
modifiers.add("${unique.sourceObjectName} (${unique.sourceObjectType})", effect)
modifiers.add("${unique.sourceObjectName} (${unique.getSourceNameForUser()})", effect)
}
//https://www.carlsguides.com/strategy/civilization5/war/combatbonuses.php

View File

@ -1,10 +1,8 @@
package com.unciv.logic.city
import com.unciv.Constants
import com.unciv.logic.map.tile.RoadStatus
import com.unciv.models.Counter
import com.unciv.models.ruleset.Building
import com.unciv.models.ruleset.GlobalUniques
import com.unciv.models.ruleset.IConstruction
import com.unciv.models.ruleset.INonPerpetualConstruction
import com.unciv.models.ruleset.ModOptionsConstants
@ -168,7 +166,7 @@ class CityStats(val city: City) {
if (!city.matchesFilter(unique.params[1])) continue
growthSources.add(
getSourceNameForUnique(unique),
unique.getSourceNameForUser(),
Stats(food = unique.params[0].toFloat() / 100f * totalFood)
)
}
@ -212,7 +210,7 @@ class CityStats(val city: City) {
if (unique.sourceObjectType==UniqueTarget.CityState)
for (multiplierUnique in cityStateStatsMultipliers)
stats[Stat.valueOf(multiplierUnique.params[1])] *= multiplierUnique.params[0].toPercent()
sourceToStats.addStats(stats, getSourceNameForUnique(unique), unique.sourceObjectName ?: "")
sourceToStats.addStats(stats, unique.getSourceNameForUser(), unique.sourceObjectName ?: "")
}
for (unique in city.getMatchingUniques(UniqueType.StatsPerCity))
@ -223,7 +221,7 @@ class CityStats(val city: City) {
for (unique in city.getMatchingUniques(UniqueType.StatsPerPopulation))
if (city.matchesFilter(unique.params[2])) {
val amountOfEffects = (city.population.population / unique.params[1].toInt()).toFloat()
sourceToStats.addStats(unique.stats.times(amountOfEffects), getSourceNameForUnique(unique), unique.sourceObjectName ?: "")
sourceToStats.addStats(unique.stats.times(amountOfEffects), unique.getSourceNameForUser(), unique.sourceObjectName ?: "")
}
for (unique in city.getMatchingUniques(UniqueType.StatsFromCitiesOnSpecificTiles))
@ -235,18 +233,6 @@ class CityStats(val city: City) {
return sourceToStats
}
private fun getSourceNameForUnique(unique: Unique): String {
return when (unique.sourceObjectType) {
null -> ""
UniqueTarget.Global -> GlobalUniques.getUniqueSourceDescription(unique)
UniqueTarget.Wonder -> "Wonders"
UniqueTarget.Building -> "Buildings"
UniqueTarget.Policy -> "Policies"
UniqueTarget.CityState -> Constants.cityStates
else -> unique.sourceObjectType.name
}
}
private fun getStatPercentBonusesFromGoldenAge(isGoldenAge: Boolean): Stats {
val stats = Stats()
if (isGoldenAge) {
@ -260,7 +246,7 @@ class CityStats(val city: City) {
val sourceToStats = StatTreeNode()
fun addUniqueStats(unique:Unique, stat:Stat, amount:Float) {
sourceToStats.addStats(Stats().add(stat, amount), getSourceNameForUnique(unique), unique.sourceObjectName ?: "")
sourceToStats.addStats(Stats().add(stat, amount), unique.getSourceNameForUser(), unique.sourceObjectName ?: "")
}
for (unique in city.getMatchingUniques(UniqueType.StatPercentBonus)) {
@ -554,7 +540,7 @@ class CityStats(val city: City) {
val removedAmount = newFinalStatList.values.sumOf { it[statToBeRemoved].toDouble() }
newFinalStatList.add(
getSourceNameForUnique(unique),
unique.getSourceNameForUser(),
Stats().apply { this[statToBeRemoved] = -removedAmount.toFloat() }
)
}
@ -605,7 +591,7 @@ class CityStats(val city: City) {
// Note that negative food will also be nullified. Pretty sure that's conform civ V, but haven't checked.
val amountToRemove = -newFinalStatList.values.sumOf { it[Stat.Food].toDouble() }
newFinalStatList.add(
getSourceNameForUnique(growthNullifyingUnique),
growthNullifyingUnique.getSourceNameForUser(),
Stats(food = amountToRemove.toFloat())
)
}

View File

@ -309,7 +309,7 @@ class CivInfoStatsForNextTurn(val civInfo: Civilization) {
for (unique in civInfo.getMatchingUniques(UniqueType.Stats))
if (unique.sourceObjectType != UniqueTarget.Building && unique.sourceObjectType != UniqueTarget.Wonder)
statMap.add(unique.sourceObjectType!!.name, unique.stats)
statMap.add(unique.getSourceNameForUser(), unique.stats)
for (unique in civInfo.getMatchingUniques(UniqueType.StatsPerStat)) {
val amount = civInfo.getStatReserve(Stat.valueOf(unique.params[2])) / unique.params[1].toInt()

View File

@ -292,7 +292,7 @@ class CivInfoTransientCache(val civInfo: Civilization) {
resourceBonusPercentage += unique.params[0].toFloat() / 100
for (cityStateAlly in civInfo.getKnownCivs().filter { it.getAllyCiv() == civInfo.civName }) {
for (resourceSupply in cityStateAlly.cityStateFunctions.getCityStateResourcesForAlly()) {
if (resourceSupply.resource.hasUnique(UniqueType.CannotBeTraded, StateForConditionals(civInfo))) continue
if (resourceSupply.resource.hasUnique(UniqueType.CannotBeTraded, StateForConditionals(cityStateAlly))) continue
val newAmount = (resourceSupply.amount * resourceBonusPercentage).toInt()
cityStateProvidedResources.add(resourceSupply.copy(amount = newAmount))
}
@ -306,7 +306,7 @@ class CivInfoTransientCache(val civInfo: Civilization) {
val resource = civInfo.gameInfo.ruleset.tileResources[unique.params[1]]!!
newDetailedCivResources.add(
resource,
unique.sourceObjectType?.name ?: "",
unique.getSourceNameForUser(),
(unique.params[0].toFloat() * civInfo.getResourceModifier(resource)).toInt()
)
}

View File

@ -7,6 +7,7 @@ import com.unciv.logic.battle.MapUnitCombatant
import com.unciv.logic.city.City
import com.unciv.logic.civilization.Civilization
import com.unciv.logic.civilization.managers.ReligionState
import com.unciv.models.ruleset.GlobalUniques
import com.unciv.models.ruleset.Ruleset
import com.unciv.models.ruleset.validation.UniqueValidator
import com.unciv.models.stats.Stat
@ -72,6 +73,18 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s
fun getDeprecationAnnotation(): Deprecated? = type?.getDeprecationAnnotation()
fun getSourceNameForUser(): String {
return when (sourceObjectType) {
null -> ""
UniqueTarget.Global -> GlobalUniques.getUniqueSourceDescription(this)
UniqueTarget.Wonder -> "Wonders"
UniqueTarget.Building -> "Buildings"
UniqueTarget.Policy -> "Policies"
UniqueTarget.CityState -> Constants.cityStates
else -> sourceObjectType.name
}
}
fun getReplacementText(ruleset: Ruleset): String {
val deprecationAnnotation = getDeprecationAnnotation() ?: return ""
val replacementUniqueText = deprecationAnnotation.replaceWith.expression