From b09354a042c16b2a3a50e168d633bde185fbac1e Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Mon, 15 Jan 2024 21:09:46 +0200 Subject: [PATCH] Source object names for users unified --- .../com/unciv/logic/battle/BattleDamage.kt | 4 +-- core/src/com/unciv/logic/city/CityStats.kt | 26 +++++-------------- .../transients/CivInfoStatsForNextTurn.kt | 2 +- .../transients/CivInfoTransientCache.kt | 4 +-- .../com/unciv/models/ruleset/unique/Unique.kt | 13 ++++++++++ 5 files changed, 24 insertions(+), 25 deletions(-) diff --git a/core/src/com/unciv/logic/battle/BattleDamage.kt b/core/src/com/unciv/logic/battle/BattleDamage.kt index 0c68bdbeff..af65bc147a 100644 --- a/core/src/com/unciv/logic/battle/BattleDamage.kt +++ b/core/src/com/unciv/logic/battle/BattleDamage.kt @@ -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 diff --git a/core/src/com/unciv/logic/city/CityStats.kt b/core/src/com/unciv/logic/city/CityStats.kt index ed3b515585..fdafb26c66 100644 --- a/core/src/com/unciv/logic/city/CityStats.kt +++ b/core/src/com/unciv/logic/city/CityStats.kt @@ -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()) ) } diff --git a/core/src/com/unciv/logic/civilization/transients/CivInfoStatsForNextTurn.kt b/core/src/com/unciv/logic/civilization/transients/CivInfoStatsForNextTurn.kt index 272b3d5f85..e3295d5d53 100644 --- a/core/src/com/unciv/logic/civilization/transients/CivInfoStatsForNextTurn.kt +++ b/core/src/com/unciv/logic/civilization/transients/CivInfoStatsForNextTurn.kt @@ -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() diff --git a/core/src/com/unciv/logic/civilization/transients/CivInfoTransientCache.kt b/core/src/com/unciv/logic/civilization/transients/CivInfoTransientCache.kt index 67aff3a008..559494e1ae 100644 --- a/core/src/com/unciv/logic/civilization/transients/CivInfoTransientCache.kt +++ b/core/src/com/unciv/logic/civilization/transients/CivInfoTransientCache.kt @@ -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() ) } diff --git a/core/src/com/unciv/models/ruleset/unique/Unique.kt b/core/src/com/unciv/models/ruleset/unique/Unique.kt index 7a1193c42b..e3fd342285 100644 --- a/core/src/com/unciv/models/ruleset/unique/Unique.kt +++ b/core/src/com/unciv/models/ruleset/unique/Unique.kt @@ -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