mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-13 09:18:43 +07:00
Source object names for users unified
This commit is contained in:
@ -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
|
||||
|
@ -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())
|
||||
)
|
||||
}
|
||||
|
@ -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()
|
||||
|
@ -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()
|
||||
)
|
||||
}
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user