diff --git a/android/assets/jsons/translations/template.properties b/android/assets/jsons/translations/template.properties index 2112a3141b..7e2131583e 100644 --- a/android/assets/jsons/translations/template.properties +++ b/android/assets/jsons/translations/template.properties @@ -87,6 +87,7 @@ Requires a [buildingName] in all cities = Requires a [buildingName] in this city = Cannot be built with [buildingName] = Consumes [amount] [resource] = +Need [amount] more [resource] = [amount] available = Required tech: [requiredTech] = Requires [PolicyOrNationalWonder] = diff --git a/core/src/com/unciv/models/ruleset/Building.kt b/core/src/com/unciv/models/ruleset/Building.kt index 239d5737d0..06de4ae184 100644 --- a/core/src/com/unciv/models/ruleset/Building.kt +++ b/core/src/com/unciv/models/ruleset/Building.kt @@ -24,6 +24,7 @@ import com.unciv.models.translations.tr import com.unciv.ui.civilopedia.FormattedLine import com.unciv.ui.utils.Fonts import com.unciv.ui.utils.extensions.getConsumesAmountString +import com.unciv.ui.utils.extensions.getNeedMoreAmountString import com.unciv.ui.utils.extensions.toPercent import kotlin.math.pow @@ -613,10 +614,12 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction { rejectionReasons.add(RejectionReason.RequiresBuildingInThisCity.toInstance("Requires a [${civInfo.getEquivalentBuilding(requiredBuilding!!)}] in this city")) } - for ((resource, amount) in getResourceRequirements()) - if (civInfo.getCivResourcesByName()[resource]!! < amount) { - rejectionReasons.add(RejectionReason.ConsumesResources.toInstance(resource.getConsumesAmountString(amount))) + for ((resource, requiredAmount) in getResourceRequirements()) { + val availableAmount = civInfo.getCivResourcesByName()[resource]!! + if (availableAmount < requiredAmount) { + rejectionReasons.add(RejectionReason.ConsumesResources.toInstance(resource.getNeedMoreAmountString(requiredAmount - availableAmount))) } + } if (requiredNearbyImprovedResources != null) { val containsResourceWithImprovement = cityConstructions.cityInfo.getWorkableTiles() diff --git a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt index 5842ccc2b8..a4a1e9db8f 100644 --- a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt +++ b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt @@ -19,6 +19,7 @@ import com.unciv.ui.civilopedia.FormattedLine import com.unciv.ui.utils.Fonts import com.unciv.ui.utils.extensions.filterAndLogic import com.unciv.ui.utils.extensions.getConsumesAmountString +import com.unciv.ui.utils.extensions.getNeedMoreAmountString import com.unciv.ui.utils.extensions.toPercent import kotlin.math.pow @@ -417,10 +418,12 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction { } if (!civInfo.isBarbarian()) { // Barbarians don't need resources - for ((resource, amount) in getResourceRequirements()) - if (civInfo.getCivResourcesByName()[resource]!! < amount) { - rejectionReasons.add(RejectionReason.ConsumesResources.toInstance(resource.getConsumesAmountString(amount))) + for ((resource, requiredAmount) in getResourceRequirements()) { + val availableAmount = civInfo.getCivResourcesByName()[resource]!! + if (availableAmount < requiredAmount) { + rejectionReasons.add(RejectionReason.ConsumesResources.toInstance(resource.getNeedMoreAmountString(requiredAmount - availableAmount))) } + } } for (unique in civInfo.getMatchingUniques(UniqueType.CannotBuildUnits)) diff --git a/core/src/com/unciv/ui/utils/extensions/FormattingExtensions.kt b/core/src/com/unciv/ui/utils/extensions/FormattingExtensions.kt index f743c7da22..a67446e03a 100644 --- a/core/src/com/unciv/ui/utils/extensions/FormattingExtensions.kt +++ b/core/src/com/unciv/ui/utils/extensions/FormattingExtensions.kt @@ -19,6 +19,9 @@ fun Float.toPercent() = 1 + this/100 /** Convert a [resource name][this] into "Consumes [amount] $resource" string (untranslated) */ fun String.getConsumesAmountString(amount: Int) = "Consumes [$amount] [$this]" +/** Convert a [resource name][this] into "Need [amount] more $resource" string (untranslated) */ +fun String.getNeedMoreAmountString(amount: Int) = "Need [$amount] more [$this]" + /** Formats the [Duration] into a translated string */ fun Duration.format(): String { val sb = StringBuilder()