From 87dfe2e2bf7bf7d78f45fd7e982542aedfe7a7b8 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sun, 22 Jan 2023 12:31:07 +0200 Subject: [PATCH] Notifications for stat gain unique --- .../jsons/translations/template.properties | 1 + .../unciv/logic/civilization/Civilization.kt | 5 +++ .../ruleset/unique/UniqueTriggerActivation.kt | 36 +++++++++++-------- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/android/assets/jsons/translations/template.properties b/android/assets/jsons/translations/template.properties index ce4627d86b..3929acc269 100644 --- a/android/assets/jsons/translations/template.properties +++ b/android/assets/jsons/translations/template.properties @@ -910,6 +910,7 @@ An unknown civilization has liberated [civ] = ## Trigger effects Gained [amount] [unitName] unit(s) = +Gained [stats] = You may choose a free Policy = You may choose [amount] free Policies = You enter a Golden Age = diff --git a/core/src/com/unciv/logic/civilization/Civilization.kt b/core/src/com/unciv/logic/civilization/Civilization.kt index 0bcde02b35..143176a378 100644 --- a/core/src/com/unciv/logic/civilization/Civilization.kt +++ b/core/src/com/unciv/logic/civilization/Civilization.kt @@ -48,6 +48,7 @@ import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.ruleset.unique.getMatchingUniques import com.unciv.models.ruleset.unit.BaseUnit import com.unciv.models.stats.Stat +import com.unciv.models.stats.Stats import com.unciv.models.translations.tr import com.unciv.ui.utils.extensions.toPercent import com.unciv.ui.victoryscreen.RankingType @@ -694,6 +695,10 @@ class Civilization : IsPartOfGameInfoSerialization { } } + fun addStats(stats: Stats){ + for ((stat, amount) in stats) addStat(stat, amount.toInt()) + } + fun addStat(stat: Stat, amount: Int) { when (stat) { Stat.Culture -> { policies.addCulture(amount) diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt index e5eb0aee87..0a8ddcc650 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt @@ -15,6 +15,7 @@ import com.unciv.logic.map.tile.Tile import com.unciv.models.ruleset.BeliefType import com.unciv.models.ruleset.Victory import com.unciv.models.stats.Stat +import com.unciv.models.stats.Stats import com.unciv.models.translations.fillPlaceholders import com.unciv.models.translations.hasPlaceholderParameters import com.unciv.ui.utils.MayaCalendar @@ -356,9 +357,14 @@ object UniqueTriggerActivation { || unique.params[0].toIntOrNull() == null ) return false - civInfo.addStat(stat, unique.params[0].toInt()) - if (notification != null) - civInfo.addNotification(notification, LocationAction(tile?.position), NotificationCategory.General, stat.notificationIcon) + val stats = Stats().add(stat, unique.params[0].toFloat()) + civInfo.addStats(stats) + + val notificationText = if (notification != null) notification + else if (triggerNotificationText != null) "{Gained [$stats]}{ }{$triggerNotificationText}" + else return true + + civInfo.addNotification(notificationText, LocationAction(tile?.position), NotificationCategory.General, stat.notificationIcon) return true } UniqueType.OneTimeGainStatRange -> { @@ -369,23 +375,23 @@ object UniqueTriggerActivation { || unique.params[1].toIntOrNull() == null ) return false - val foundStatAmount = + val finalStatAmount = (tileBasedRandom.nextInt(unique.params[0].toInt(), unique.params[1].toInt()) * civInfo.gameInfo.speed.statCostModifiers[stat]!! - ).toInt() + ).toFloat() - civInfo.addStat( - Stat.valueOf(unique.params[2]), - foundStatAmount - ) + val stats = Stats().add(stat, finalStatAmount) + civInfo.addStats(stats) - if (notification != null) { - val notificationText = - if (notification.hasPlaceholderParameters()) { - notification.fillPlaceholders(foundStatAmount.toString()) - } else notification - civInfo.addNotification(notificationText, LocationAction(tile?.position), NotificationCategory.General, stat.notificationIcon) + val notificationText = if (notification != null) { + if (notification.hasPlaceholderParameters()) { + notification.fillPlaceholders(finalStatAmount.toString()) + } else notification } + else if (triggerNotificationText != null) "{Gained [$stats]}{ }{$triggerNotificationText}" + else return true + + civInfo.addNotification(notificationText, LocationAction(tile?.position), NotificationCategory.General, stat.notificationIcon) return true }