diff --git a/core/src/com/unciv/logic/civilization/Notification.kt b/core/src/com/unciv/logic/civilization/Notification.kt index d32147dcc1..2423e159bb 100644 --- a/core/src/com/unciv/logic/civilization/Notification.kt +++ b/core/src/com/unciv/logic/civilization/Notification.kt @@ -57,7 +57,7 @@ class Notification() : IsPartOfGameInfoSerialization, Json.Serializable { companion object { fun safeValueOf(name: String): NotificationCategory? = - values().firstOrNull { it.name == name } + entries.firstOrNull { it.name == name } } } @@ -74,7 +74,7 @@ class Notification() : IsPartOfGameInfoSerialization, Json.Serializable { ruleset.nations.containsKey(icon) -> ImageGetter.getNationPortrait(ruleset.nations[icon]!!, iconSize) ruleset.units.containsKey(icon) -> - ImageGetter.getUnitIcon(icon) + ImageGetter.getUnitIcon(ruleset.units[icon]!!) else -> ImageGetter.getImage(icon) } diff --git a/core/src/com/unciv/ui/components/widgets/UnitIconGroup.kt b/core/src/com/unciv/ui/components/widgets/UnitIconGroup.kt index 7bcd466503..8add5c9cd0 100644 --- a/core/src/com/unciv/ui/components/widgets/UnitIconGroup.kt +++ b/core/src/com/unciv/ui/components/widgets/UnitIconGroup.kt @@ -81,7 +81,7 @@ private class FlagBackground(drawable: TextureRegionDrawable, size: Float) : Ima class UnitIconGroup(val unit: MapUnit, val size: Float) : Group() { var actionGroup: Group? = null - private val flagIcon = ImageGetter.getUnitIcon(unit.name, unit.civ.nation.getInnerColor()) + private val flagIcon = ImageGetter.getUnitIcon(unit.baseUnit, unit.civ.nation.getInnerColor()) private var flagBg: FlagBackground = FlagBackground(getBackgroundDrawableForUnit(), size) private var flagSelection: Image = getBackgroundSelectionForUnit() private var flagMask: Image? = getBackgroundMaskForUnit() diff --git a/core/src/com/unciv/ui/images/ImageGetter.kt b/core/src/com/unciv/ui/images/ImageGetter.kt index 6ae4501ef2..f5f877fe13 100644 --- a/core/src/com/unciv/ui/images/ImageGetter.kt +++ b/core/src/com/unciv/ui/images/ImageGetter.kt @@ -22,6 +22,7 @@ import com.unciv.json.json import com.unciv.models.ruleset.PerpetualConstruction import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.nation.Nation +import com.unciv.models.ruleset.unit.BaseUnit import com.unciv.models.skins.SkinCache import com.unciv.models.tilesets.TileSetCache import com.unciv.ui.components.extensions.center @@ -249,10 +250,10 @@ object ImageGetter { fun getRandomNationPortrait(size: Float): Portrait = PortraitNation(Constants.random, size) - fun getUnitIcon(unitName: String, color: Color = Color.BLACK): Image = - if (imageExists("UnitIcons/$unitName")) - getImage("UnitIcons/$unitName").apply { this.color = color } - else getImage("UnitTypeIcons/$unitName").apply { this.color = color } + fun getUnitIcon(unit: BaseUnit, color: Color = Color.BLACK): Image = + if (imageExists("UnitIcons/${unit.name}")) + getImage("UnitIcons/${unit.name}").apply { this.color = color } + else getImage("UnitTypeIcons/${unit.type}").apply { this.color = color } fun getConstructionPortrait(construction: String, size: Float): Group { if (ruleset.buildings.containsKey(construction)) { diff --git a/core/src/com/unciv/ui/screens/cityscreen/CityStatsTable.kt b/core/src/com/unciv/ui/screens/cityscreen/CityStatsTable.kt index 68ed1140e6..adb2476ca1 100644 --- a/core/src/com/unciv/ui/screens/cityscreen/CityStatsTable.kt +++ b/core/src/com/unciv/ui/screens/cityscreen/CityStatsTable.kt @@ -7,25 +7,14 @@ import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.utils.Align import com.unciv.Constants -import com.unciv.UncivGame -import com.unciv.logic.city.City -import com.unciv.logic.city.CityFlags -import com.unciv.logic.city.CityFocus -import com.unciv.logic.city.CityResources -import com.unciv.logic.city.GreatPersonPointsBreakdown +import com.unciv.logic.city.* import com.unciv.models.Counter import com.unciv.models.ruleset.Building import com.unciv.models.ruleset.tile.TileResource import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.stats.Stat import com.unciv.models.translations.tr -import com.unciv.ui.components.extensions.addSeparator -import com.unciv.ui.components.extensions.center -import com.unciv.ui.components.extensions.colorFromRGB -import com.unciv.ui.components.extensions.surroundWithCircle -import com.unciv.ui.components.extensions.toGroup -import com.unciv.ui.components.extensions.toLabel -import com.unciv.ui.components.extensions.toTextButton +import com.unciv.ui.components.extensions.* import com.unciv.ui.components.fonts.Fonts import com.unciv.ui.components.input.KeyboardBinding import com.unciv.ui.components.input.onActivation @@ -33,7 +22,6 @@ import com.unciv.ui.components.input.onClick import com.unciv.ui.components.widgets.ExpanderTab import com.unciv.ui.images.ImageGetter import com.unciv.ui.screens.basescreen.BaseScreen -import com.unciv.ui.screens.civilopediascreen.CivilopediaScreen import kotlin.math.ceil import kotlin.math.round import com.unciv.ui.components.widgets.AutoScrollPane as ScrollPane @@ -364,7 +352,8 @@ class CityStatsTable(private val cityScreen: CityScreen) : Table() { val info = Table() - info.add(ImageGetter.getUnitIcon(greatPersonName, Color.GOLD).toGroup(20f)) + val greatPerson = city.getRuleset().units[greatPersonName] ?: continue + info.add(ImageGetter.getUnitIcon(greatPerson, Color.GOLD).toGroup(20f)) .left().padBottom(4f).padRight(5f) info.add("{$greatPersonName} (+$gppPerTurn)".toLabel(hideIcons = true)).left().padBottom(4f).expandX().row() diff --git a/core/src/com/unciv/ui/screens/cityscreen/SpecialistAllocationTable.kt b/core/src/com/unciv/ui/screens/cityscreen/SpecialistAllocationTable.kt index 4551f90471..83c121d714 100644 --- a/core/src/com/unciv/ui/screens/cityscreen/SpecialistAllocationTable.kt +++ b/core/src/com/unciv/ui/screens/cityscreen/SpecialistAllocationTable.kt @@ -137,7 +137,8 @@ class SpecialistAllocationTable(private val cityScreen: CityScreen) : Table(Base // greatPersonPoints is a Counter so iteration order is potentially random: // Sort by unit name without collator to ensure consistency in those rare mods where one Specialist gives points to several GP counters for ((gpName, gpPoints) in specialist.greatPersonPoints.asSequence().sortedBy { it.key }) { - addWrapping(gpPoints, Color.GOLD, ImageGetter.getUnitIcon(gpName, Color.GOLD)) + val greatPerson = city.getRuleset().units[gpName] ?: continue + addWrapping(gpPoints, Color.GOLD, ImageGetter.getUnitIcon(greatPerson, Color.GOLD)) } // This uses Stats.iterator() which ensures consistent Stat order and returns no zero value diff --git a/core/src/com/unciv/ui/screens/overviewscreen/CityOverviewTabColumn.kt b/core/src/com/unciv/ui/screens/overviewscreen/CityOverviewTabColumn.kt index 8c74717461..cea6d6f9c0 100644 --- a/core/src/com/unciv/ui/screens/overviewscreen/CityOverviewTabColumn.kt +++ b/core/src/com/unciv/ui/screens/overviewscreen/CityOverviewTabColumn.kt @@ -38,7 +38,7 @@ enum class CityOverviewTabColumn : ISortableGridContentProvider(collator) { it.name.tr(hideIcons = true) } override fun getHeaderActor(iconSize: Float) = - ImageGetter.getUnitIcon("Settler") + ImageGetter.getImage("UnitIcons/Settler").apply { color = Color.BLACK } .surroundWithCircle(iconSize) override fun getEntryValue(item: City) = 0 // make sure that `stat!!` in the super isn't used override fun getEntryActor(item: City, iconSize: Float, actionContext: EmpireOverviewScreen) = diff --git a/core/src/com/unciv/ui/screens/overviewscreen/UnitOverviewTabHelpers.kt b/core/src/com/unciv/ui/screens/overviewscreen/UnitOverviewTabHelpers.kt index 339fe60802..bf6f51f01e 100644 --- a/core/src/com/unciv/ui/screens/overviewscreen/UnitOverviewTabHelpers.kt +++ b/core/src/com/unciv/ui/screens/overviewscreen/UnitOverviewTabHelpers.kt @@ -73,7 +73,7 @@ open class UnitOverviewTabHelpers { val enable = canEnable && unitAction.action != null val unitToUpgradeTo = (unitAction as UpgradeUnitAction).unitToUpgradeTo val selectKey = getUnitIdentifier(unit, unitToUpgradeTo) - val upgradeIcon = ImageGetter.getUnitIcon(unitToUpgradeTo.name, + val upgradeIcon = ImageGetter.getUnitIcon(unitToUpgradeTo, if (enable) Color.GREEN else Color.GREEN.darken(0.5f)) upgradeIcon.onClick { UnitUpgradeMenu(actionContext.overviewScreen.stage, upgradeIcon, unit, unitAction, enable) { diff --git a/core/src/com/unciv/ui/screens/pickerscreens/GreatPersonPickerScreen.kt b/core/src/com/unciv/ui/screens/pickerscreens/GreatPersonPickerScreen.kt index 3ac745e38c..828dbcbe7b 100644 --- a/core/src/com/unciv/ui/screens/pickerscreens/GreatPersonPickerScreen.kt +++ b/core/src/com/unciv/ui/screens/pickerscreens/GreatPersonPickerScreen.kt @@ -24,7 +24,7 @@ class GreatPersonPickerScreen(val worldScreen: WorldScreen, val civInfo: Civiliz for (unit in greatPersonUnits) { val button = - PickerPane.getPickerOptionButton(ImageGetter.getUnitIcon(unit.name), unit.name) + PickerPane.getPickerOptionButton(ImageGetter.getUnitIcon(unit), unit.name) button.pack() button.isEnabled = !useMayaLongCount || unit.name in civInfo.greatPeople.longCountGPPool if (button.isEnabled) { diff --git a/core/src/com/unciv/ui/screens/pickerscreens/UnitRenamePopup.kt b/core/src/com/unciv/ui/screens/pickerscreens/UnitRenamePopup.kt index 20a25c46f6..e370501f90 100644 --- a/core/src/com/unciv/ui/screens/pickerscreens/UnitRenamePopup.kt +++ b/core/src/com/unciv/ui/screens/pickerscreens/UnitRenamePopup.kt @@ -12,7 +12,7 @@ class UnitRenamePopup(val screen: BaseScreen, val unit: MapUnit, val actionOnClo AskTextPopup( screen, label = "Choose name for [${unit.baseUnit.name}]", - icon = ImageGetter.getUnitIcon(unit.name).surroundWithCircle(80f), + icon = ImageGetter.getUnitIcon(unit.baseUnit).surroundWithCircle(80f), defaultText = unit.instanceName ?: unit.baseUnit.name.tr(hideIcons = true), validate = { it != unit.name }, actionOnOk = { userInput ->