From b5a39bbb393d5e1251a477d400d4ecdaccfb61e8 Mon Sep 17 00:00:00 2001 From: SomeTroglodyte <63000004+SomeTroglodyte@users.noreply.github.com> Date: Tue, 5 Mar 2024 22:05:41 +0100 Subject: [PATCH] Centralize infinity symbol (#11257) --- .../unciv/logic/civilization/managers/TechManager.kt | 3 ++- core/src/com/unciv/ui/components/fonts/Fonts.kt | 1 + .../com/unciv/ui/components/tilegroups/CityButton.kt | 6 +++--- .../ui/screens/cityscreen/CityConstructionsTable.kt | 3 ++- .../worldscreen/topbar/WorldScreenTopBarStats.kt | 12 +++++++----- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/core/src/com/unciv/logic/civilization/managers/TechManager.kt b/core/src/com/unciv/logic/civilization/managers/TechManager.kt index c42dd95676..4e963c0786 100644 --- a/core/src/com/unciv/logic/civilization/managers/TechManager.kt +++ b/core/src/com/unciv/logic/civilization/managers/TechManager.kt @@ -25,6 +25,7 @@ import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.ruleset.unit.BaseUnit import com.unciv.ui.components.MayaCalendar import com.unciv.ui.components.extensions.withItem +import com.unciv.ui.components.fonts.Fonts import kotlin.math.ceil import kotlin.math.max import kotlin.math.min @@ -148,7 +149,7 @@ class TechManager : IsPartOfGameInfoSerialization { val remainingCost = remainingScienceToTech(techName).toDouble() return when { remainingCost <= 0f -> "0" - civInfo.stats.statsForNextTurn.science <= 0f -> "∞" + civInfo.stats.statsForNextTurn.science <= 0f -> Fonts.infinity.toString() else -> max(1, ceil(remainingCost / civInfo.stats.statsForNextTurn.science).toInt()).toString() } } diff --git a/core/src/com/unciv/ui/components/fonts/Fonts.kt b/core/src/com/unciv/ui/components/fonts/Fonts.kt index 6c91f5b87a..e490e9f86f 100644 --- a/core/src/com/unciv/ui/components/fonts/Fonts.kt +++ b/core/src/com/unciv/ui/components/fonts/Fonts.kt @@ -122,6 +122,7 @@ object Fonts { const val greatScientist = '⚛' // U+269B 'atom' const val death = '☠' // U+2620 'skull and crossbones' const val automate = '⛏' // U+26CF 'pick' + const val infinity = '∞' // U+221E - not in `allSymbols`, taken as-is from system font val allSymbols = mapOf( turn to "EmojiIcons/Turn", diff --git a/core/src/com/unciv/ui/components/tilegroups/CityButton.kt b/core/src/com/unciv/ui/components/tilegroups/CityButton.kt index d790b1044e..dee01430a6 100644 --- a/core/src/com/unciv/ui/components/tilegroups/CityButton.kt +++ b/core/src/com/unciv/ui/components/tilegroups/CityButton.kt @@ -274,11 +274,11 @@ private class CityTable(city: City, forPopup: Boolean = false) : BorderedTable( val turnLabelText = when { city.isGrowing() -> { val turnsToGrowth = city.population.getNumTurnsToNewPopulation() - if (turnsToGrowth != null && turnsToGrowth < 100) turnsToGrowth.toString() else "∞" + if (turnsToGrowth != null && turnsToGrowth < 100) turnsToGrowth.toString() else Fonts.infinity.toString() } city.isStarving() -> { val turnsToStarvation = city.population.getNumTurnsToStarvation() - if (turnsToStarvation != null && turnsToStarvation < 100) turnsToStarvation.toString() else "∞" + if (turnsToStarvation != null && turnsToStarvation < 100) turnsToStarvation.toString() else Fonts.infinity.toString() } else -> "-" } @@ -360,7 +360,7 @@ private class CityTable(city: City, forPopup: Boolean = false) : BorderedTable( if (nextTurnPercentage > 1f) nextTurnPercentage = 1f if (nextTurnPercentage < 0f) nextTurnPercentage = 0f } else { - turns = "∞" + turns = Fonts.infinity.toString() } icon = ImageGetter.getConstructionPortrait(cityCurrentConstruction.name, 24f) } diff --git a/core/src/com/unciv/ui/screens/cityscreen/CityConstructionsTable.kt b/core/src/com/unciv/ui/screens/cityscreen/CityConstructionsTable.kt index 871882a822..59e04f531a 100644 --- a/core/src/com/unciv/ui/screens/cityscreen/CityConstructionsTable.kt +++ b/core/src/com/unciv/ui/screens/cityscreen/CityConstructionsTable.kt @@ -39,6 +39,7 @@ import com.unciv.ui.components.extensions.packIfNeeded import com.unciv.ui.components.extensions.surroundWithCircle import com.unciv.ui.components.extensions.toLabel import com.unciv.ui.components.extensions.toTextButton +import com.unciv.ui.components.fonts.Fonts import com.unciv.ui.components.input.KeyboardBinding import com.unciv.ui.components.input.keyShortcuts import com.unciv.ui.components.input.onActivation @@ -327,7 +328,7 @@ class CityConstructionsTable(private val cityScreen: CityScreen) { val isFirstConstructionOfItsKind = cityConstructions.isFirstConstructionOfItsKind(constructionQueueIndex, constructionName) var text = constructionName.tr(true) + - if (constructionName in PerpetualConstruction.perpetualConstructionsMap) "\n∞" + if (constructionName in PerpetualConstruction.perpetualConstructionsMap) "\n" + Fonts.infinity else cityConstructions.getTurnsToConstructionString(construction, isFirstConstructionOfItsKind) val constructionResource = if (construction is BaseUnit) diff --git a/core/src/com/unciv/ui/screens/worldscreen/topbar/WorldScreenTopBarStats.kt b/core/src/com/unciv/ui/screens/worldscreen/topbar/WorldScreenTopBarStats.kt index 8a7dfa78bf..8a86e7f199 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/topbar/WorldScreenTopBarStats.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/topbar/WorldScreenTopBarStats.kt @@ -9,6 +9,7 @@ import com.unciv.ui.components.extensions.colorFromRGB import com.unciv.ui.components.extensions.setFontColor import com.unciv.ui.components.extensions.toLabel import com.unciv.ui.components.extensions.toStringSigned +import com.unciv.ui.components.fonts.Fonts import com.unciv.ui.components.input.onClick import com.unciv.ui.components.widgets.ScalingTableWrapper import com.unciv.ui.images.ImageGetter @@ -124,12 +125,13 @@ internal class WorldScreenTopBarStats(topbar: WorldScreenTopBar) : ScalingTableW private fun getCultureText(civInfo: Civilization, nextTurnStats: Stats): String { var cultureString = rateLabel(nextTurnStats.culture) - //if (nextTurnStats.culture == 0f) return cultureString // when you start the game, you're not producing any culture - + // kotlin Float division by Zero produces `Float.POSITIVE_INFINITY`, not an exception val turnsToNextPolicy = (civInfo.policies.getCultureNeededForNextPolicy() - civInfo.policies.storedCulture) / nextTurnStats.culture - cultureString += if (turnsToNextPolicy <= 0f) " (!)" - else if (nextTurnStats.culture <= 0) " (∞)" - else " (" + ceil(turnsToNextPolicy).toInt() + ")" + cultureString += when { + turnsToNextPolicy <= 0f -> " (!)" // Can choose policy right now + nextTurnStats.culture <= 0 -> " (${Fonts.infinity})" // when you start the game, you're not producing any culture + else -> " (" + ceil(turnsToNextPolicy).toInt() + ")" + } return cultureString }