mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-22 22:00:24 +07:00
Source object names for users unified
This commit is contained in:
@ -22,7 +22,7 @@ object BattleDamage {
|
|||||||
UniqueTarget.Unit -> "Unit ability"
|
UniqueTarget.Unit -> "Unit ability"
|
||||||
UniqueTarget.Nation -> "National ability"
|
UniqueTarget.Nation -> "National ability"
|
||||||
UniqueTarget.Global -> GlobalUniques.getUniqueSourceDescription(unique)
|
UniqueTarget.Global -> GlobalUniques.getUniqueSourceDescription(unique)
|
||||||
else -> "[${unique.sourceObjectName}] ([${unique.sourceObjectType?.name}])"
|
else -> "[${unique.sourceObjectName}] ([${unique.getSourceNameForUser()}])"
|
||||||
}.tr()
|
}.tr()
|
||||||
if (unique.conditionals.isEmpty()) return source
|
if (unique.conditionals.isEmpty()) return source
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ object BattleDamage {
|
|||||||
// https://steamcommunity.com/sharedfiles/filedetails/?id=326411722#464287
|
// https://steamcommunity.com/sharedfiles/filedetails/?id=326411722#464287
|
||||||
val effect = unique.params[0].toInt() - 3 * distance
|
val effect = unique.params[0].toInt() - 3 * distance
|
||||||
if (effect > 0)
|
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
|
//https://www.carlsguides.com/strategy/civilization5/war/combatbonuses.php
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
package com.unciv.logic.city
|
package com.unciv.logic.city
|
||||||
|
|
||||||
import com.unciv.Constants
|
|
||||||
import com.unciv.logic.map.tile.RoadStatus
|
import com.unciv.logic.map.tile.RoadStatus
|
||||||
import com.unciv.models.Counter
|
import com.unciv.models.Counter
|
||||||
import com.unciv.models.ruleset.Building
|
import com.unciv.models.ruleset.Building
|
||||||
import com.unciv.models.ruleset.GlobalUniques
|
|
||||||
import com.unciv.models.ruleset.IConstruction
|
import com.unciv.models.ruleset.IConstruction
|
||||||
import com.unciv.models.ruleset.INonPerpetualConstruction
|
import com.unciv.models.ruleset.INonPerpetualConstruction
|
||||||
import com.unciv.models.ruleset.ModOptionsConstants
|
import com.unciv.models.ruleset.ModOptionsConstants
|
||||||
@ -168,7 +166,7 @@ class CityStats(val city: City) {
|
|||||||
if (!city.matchesFilter(unique.params[1])) continue
|
if (!city.matchesFilter(unique.params[1])) continue
|
||||||
|
|
||||||
growthSources.add(
|
growthSources.add(
|
||||||
getSourceNameForUnique(unique),
|
unique.getSourceNameForUser(),
|
||||||
Stats(food = unique.params[0].toFloat() / 100f * totalFood)
|
Stats(food = unique.params[0].toFloat() / 100f * totalFood)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -212,7 +210,7 @@ class CityStats(val city: City) {
|
|||||||
if (unique.sourceObjectType==UniqueTarget.CityState)
|
if (unique.sourceObjectType==UniqueTarget.CityState)
|
||||||
for (multiplierUnique in cityStateStatsMultipliers)
|
for (multiplierUnique in cityStateStatsMultipliers)
|
||||||
stats[Stat.valueOf(multiplierUnique.params[1])] *= multiplierUnique.params[0].toPercent()
|
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))
|
for (unique in city.getMatchingUniques(UniqueType.StatsPerCity))
|
||||||
@ -223,7 +221,7 @@ class CityStats(val city: City) {
|
|||||||
for (unique in city.getMatchingUniques(UniqueType.StatsPerPopulation))
|
for (unique in city.getMatchingUniques(UniqueType.StatsPerPopulation))
|
||||||
if (city.matchesFilter(unique.params[2])) {
|
if (city.matchesFilter(unique.params[2])) {
|
||||||
val amountOfEffects = (city.population.population / unique.params[1].toInt()).toFloat()
|
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))
|
for (unique in city.getMatchingUniques(UniqueType.StatsFromCitiesOnSpecificTiles))
|
||||||
@ -235,18 +233,6 @@ class CityStats(val city: City) {
|
|||||||
return sourceToStats
|
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 {
|
private fun getStatPercentBonusesFromGoldenAge(isGoldenAge: Boolean): Stats {
|
||||||
val stats = Stats()
|
val stats = Stats()
|
||||||
if (isGoldenAge) {
|
if (isGoldenAge) {
|
||||||
@ -260,7 +246,7 @@ class CityStats(val city: City) {
|
|||||||
val sourceToStats = StatTreeNode()
|
val sourceToStats = StatTreeNode()
|
||||||
|
|
||||||
fun addUniqueStats(unique:Unique, stat:Stat, amount:Float) {
|
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)) {
|
for (unique in city.getMatchingUniques(UniqueType.StatPercentBonus)) {
|
||||||
@ -554,7 +540,7 @@ class CityStats(val city: City) {
|
|||||||
val removedAmount = newFinalStatList.values.sumOf { it[statToBeRemoved].toDouble() }
|
val removedAmount = newFinalStatList.values.sumOf { it[statToBeRemoved].toDouble() }
|
||||||
|
|
||||||
newFinalStatList.add(
|
newFinalStatList.add(
|
||||||
getSourceNameForUnique(unique),
|
unique.getSourceNameForUser(),
|
||||||
Stats().apply { this[statToBeRemoved] = -removedAmount.toFloat() }
|
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.
|
// 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() }
|
val amountToRemove = -newFinalStatList.values.sumOf { it[Stat.Food].toDouble() }
|
||||||
newFinalStatList.add(
|
newFinalStatList.add(
|
||||||
getSourceNameForUnique(growthNullifyingUnique),
|
growthNullifyingUnique.getSourceNameForUser(),
|
||||||
Stats(food = amountToRemove.toFloat())
|
Stats(food = amountToRemove.toFloat())
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -309,7 +309,7 @@ class CivInfoStatsForNextTurn(val civInfo: Civilization) {
|
|||||||
|
|
||||||
for (unique in civInfo.getMatchingUniques(UniqueType.Stats))
|
for (unique in civInfo.getMatchingUniques(UniqueType.Stats))
|
||||||
if (unique.sourceObjectType != UniqueTarget.Building && unique.sourceObjectType != UniqueTarget.Wonder)
|
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)) {
|
for (unique in civInfo.getMatchingUniques(UniqueType.StatsPerStat)) {
|
||||||
val amount = civInfo.getStatReserve(Stat.valueOf(unique.params[2])) / unique.params[1].toInt()
|
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
|
resourceBonusPercentage += unique.params[0].toFloat() / 100
|
||||||
for (cityStateAlly in civInfo.getKnownCivs().filter { it.getAllyCiv() == civInfo.civName }) {
|
for (cityStateAlly in civInfo.getKnownCivs().filter { it.getAllyCiv() == civInfo.civName }) {
|
||||||
for (resourceSupply in cityStateAlly.cityStateFunctions.getCityStateResourcesForAlly()) {
|
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()
|
val newAmount = (resourceSupply.amount * resourceBonusPercentage).toInt()
|
||||||
cityStateProvidedResources.add(resourceSupply.copy(amount = newAmount))
|
cityStateProvidedResources.add(resourceSupply.copy(amount = newAmount))
|
||||||
}
|
}
|
||||||
@ -306,7 +306,7 @@ class CivInfoTransientCache(val civInfo: Civilization) {
|
|||||||
val resource = civInfo.gameInfo.ruleset.tileResources[unique.params[1]]!!
|
val resource = civInfo.gameInfo.ruleset.tileResources[unique.params[1]]!!
|
||||||
newDetailedCivResources.add(
|
newDetailedCivResources.add(
|
||||||
resource,
|
resource,
|
||||||
unique.sourceObjectType?.name ?: "",
|
unique.getSourceNameForUser(),
|
||||||
(unique.params[0].toFloat() * civInfo.getResourceModifier(resource)).toInt()
|
(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.city.City
|
||||||
import com.unciv.logic.civilization.Civilization
|
import com.unciv.logic.civilization.Civilization
|
||||||
import com.unciv.logic.civilization.managers.ReligionState
|
import com.unciv.logic.civilization.managers.ReligionState
|
||||||
|
import com.unciv.models.ruleset.GlobalUniques
|
||||||
import com.unciv.models.ruleset.Ruleset
|
import com.unciv.models.ruleset.Ruleset
|
||||||
import com.unciv.models.ruleset.validation.UniqueValidator
|
import com.unciv.models.ruleset.validation.UniqueValidator
|
||||||
import com.unciv.models.stats.Stat
|
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 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 {
|
fun getReplacementText(ruleset: Ruleset): String {
|
||||||
val deprecationAnnotation = getDeprecationAnnotation() ?: return ""
|
val deprecationAnnotation = getDeprecationAnnotation() ?: return ""
|
||||||
val replacementUniqueText = deprecationAnnotation.replaceWith.expression
|
val replacementUniqueText = deprecationAnnotation.replaceWith.expression
|
||||||
|
Reference in New Issue
Block a user