diff --git a/android/Images/BuildingIcons/Mughal Fort.png b/android/Images/BuildingIcons/Mughal Fort.png index fba93cf762..25e4f29940 100644 Binary files a/android/Images/BuildingIcons/Mughal Fort.png and b/android/Images/BuildingIcons/Mughal Fort.png differ diff --git a/android/assets/game.png b/android/assets/game.png index 347f0340d6..d2d71a53d4 100644 Binary files a/android/assets/game.png and b/android/assets/game.png differ diff --git a/core/src/com/unciv/logic/city/IConstruction.kt b/core/src/com/unciv/logic/city/IConstruction.kt index c69612b708..eef6a187b6 100644 --- a/core/src/com/unciv/logic/city/IConstruction.kt +++ b/core/src/com/unciv/logic/city/IConstruction.kt @@ -1,10 +1,9 @@ package com.unciv.logic.city import com.unciv.logic.civilization.CivilizationInfo -import com.unciv.models.gamebasics.ICivilopedia import com.unciv.models.stats.INamed -interface IConstruction : INamed, ICivilopedia { +interface IConstruction : INamed { fun getProductionCost(civInfo: CivilizationInfo): Int fun getGoldCost(civInfo: CivilizationInfo): Int fun isBuildable(construction: CityConstructions): Boolean @@ -15,7 +14,7 @@ interface IConstruction : INamed, ICivilopedia { -open class SpecialConstruction(override var name: String, override val description: String) : IConstruction{ +open class SpecialConstruction(override var name: String, val description: String) : IConstruction{ override fun shouldBeDisplayed(construction: CityConstructions): Boolean { return isBuildable(construction) } diff --git a/core/src/com/unciv/models/gamebasics/Building.kt b/core/src/com/unciv/models/gamebasics/Building.kt index d942590c18..8e28ea0ad4 100644 --- a/core/src/com/unciv/models/gamebasics/Building.kt +++ b/core/src/com/unciv/models/gamebasics/Building.kt @@ -12,9 +12,6 @@ import kotlin.math.pow class Building : NamedStats(), IConstruction{ - override val description: String - get() = getDescription(false, null) - var requiredTech: String? = null var cost: Int = 0 diff --git a/core/src/com/unciv/models/gamebasics/tech/Technology.kt b/core/src/com/unciv/models/gamebasics/tech/Technology.kt index 72db1b76cc..d51e91301a 100644 --- a/core/src/com/unciv/models/gamebasics/tech/Technology.kt +++ b/core/src/com/unciv/models/gamebasics/tech/Technology.kt @@ -2,11 +2,10 @@ package com.unciv.models.gamebasics.tech import com.unciv.UnCivGame import com.unciv.models.gamebasics.GameBasics -import com.unciv.models.gamebasics.ICivilopedia import com.unciv.models.gamebasics.tr import java.util.* -class Technology : ICivilopedia { +class Technology { lateinit var name: String @@ -18,61 +17,60 @@ class Technology : ICivilopedia { var row: Int = 0 var quote="" - override val description: String - get() { - val lineList = ArrayList() // more readable than StringBuilder, with same performance for our use-case - for (unique in uniques) lineList += unique.tr() + fun getDescription(): String { + val lineList = ArrayList() // more readable than StringBuilder, with same performance for our use-case + for (unique in uniques) lineList += unique.tr() - val improvedImprovements = GameBasics.TileImprovements.values - .filter { it.improvingTech == name }.groupBy { it.improvingTechStats.toString() } - for (improvement in improvedImprovements) { - val impimpString = improvement.value.joinToString { it.name.tr() } + - " {provide" + (if (improvement.value.size == 1) "s" else "") + "} " + improvement.key - lineList += impimpString.tr() - } - - val viewingCiv = UnCivGame.Current.worldScreen.viewingCiv - var enabledUnits = GameBasics.Units.values.filter { - it.requiredTech == name && - (it.uniqueTo == null || it.uniqueTo == viewingCiv.civName) - } - val replacedUnits = enabledUnits.mapNotNull { it.replaces } - enabledUnits = enabledUnits.filter { it.name !in replacedUnits } - if (enabledUnits.isNotEmpty()) { - lineList += "{Units enabled}: " - for (unit in enabledUnits) - lineList += " * " + unit.name.tr() + " (" + unit.getShortDescription() + ")" - } - - var enabledBuildings = GameBasics.Buildings.values.filter { - it.requiredTech == name && - (it.uniqueTo == null || it.uniqueTo == viewingCiv.civName) - } - val replacedBuildings = enabledBuildings.mapNotNull { it.replaces } - enabledBuildings = enabledBuildings.filter { it.name !in replacedBuildings } - val regularBuildings = enabledBuildings.filter { !it.isWonder && !it.isNationalWonder } - if (regularBuildings.isNotEmpty()) { - lineList += "{Buildings enabled}: " - for (building in regularBuildings) - lineList += "* " + building.name.tr() + " (" + building.getShortDescription() + ")" - } - val wonders = enabledBuildings.filter { it.isWonder || it.isNationalWonder } - if (wonders.isNotEmpty()) { - lineList += "{Wonders enabled}: " - for (wonder in wonders) - lineList += " * " + wonder.name.tr() + " (" + wonder.getShortDescription() + ")" - } - - val revealedResource = GameBasics.TileResources.values.filter { it.revealedBy == name }.map { it.name }.firstOrNull() // can only be one - if (revealedResource != null) lineList += "Reveals [$revealedResource] on the map".tr() - - val tileImprovements = GameBasics.TileImprovements.values.filter { it.techRequired == name } - if (tileImprovements.isNotEmpty()) - lineList += "{Tile improvements enabled}: " + tileImprovements.joinToString { it.name.tr() } - - return lineList.joinToString("\n") { it.tr() } + val improvedImprovements = GameBasics.TileImprovements.values + .filter { it.improvingTech == name }.groupBy { it.improvingTechStats.toString() } + for (improvement in improvedImprovements) { + val impimpString = improvement.value.joinToString { it.name.tr() } + + " {provide" + (if (improvement.value.size == 1) "s" else "") + "} " + improvement.key + lineList += impimpString.tr() } + val viewingCiv = UnCivGame.Current.worldScreen.viewingCiv + var enabledUnits = GameBasics.Units.values.filter { + it.requiredTech == name && + (it.uniqueTo == null || it.uniqueTo == viewingCiv.civName) + } + val replacedUnits = enabledUnits.mapNotNull { it.replaces } + enabledUnits = enabledUnits.filter { it.name !in replacedUnits } + if (enabledUnits.isNotEmpty()) { + lineList += "{Units enabled}: " + for (unit in enabledUnits) + lineList += " * " + unit.name.tr() + " (" + unit.getShortDescription() + ")" + } + + var enabledBuildings = GameBasics.Buildings.values.filter { + it.requiredTech == name && + (it.uniqueTo == null || it.uniqueTo == viewingCiv.civName) + } + val replacedBuildings = enabledBuildings.mapNotNull { it.replaces } + enabledBuildings = enabledBuildings.filter { it.name !in replacedBuildings } + val regularBuildings = enabledBuildings.filter { !it.isWonder && !it.isNationalWonder } + if (regularBuildings.isNotEmpty()) { + lineList += "{Buildings enabled}: " + for (building in regularBuildings) + lineList += "* " + building.name.tr() + " (" + building.getShortDescription() + ")" + } + val wonders = enabledBuildings.filter { it.isWonder || it.isNationalWonder } + if (wonders.isNotEmpty()) { + lineList += "{Wonders enabled}: " + for (wonder in wonders) + lineList += " * " + wonder.name.tr() + " (" + wonder.getShortDescription() + ")" + } + + val revealedResource = GameBasics.TileResources.values.filter { it.revealedBy == name }.map { it.name }.firstOrNull() // can only be one + if (revealedResource != null) lineList += "Reveals [$revealedResource] on the map".tr() + + val tileImprovements = GameBasics.TileImprovements.values.filter { it.techRequired == name } + if (tileImprovements.isNotEmpty()) + lineList += "{Tile improvements enabled}: " + tileImprovements.joinToString { it.name.tr() } + + return lineList.joinToString("\n") { it.tr() } + } + override fun toString(): String { return name } diff --git a/core/src/com/unciv/models/gamebasics/tile/Terrain.kt b/core/src/com/unciv/models/gamebasics/tile/Terrain.kt index afbe6b541a..9611b5b4e1 100644 --- a/core/src/com/unciv/models/gamebasics/tile/Terrain.kt +++ b/core/src/com/unciv/models/gamebasics/tile/Terrain.kt @@ -2,42 +2,31 @@ package com.unciv.models.gamebasics.tile import com.badlogic.gdx.graphics.Color import com.unciv.models.gamebasics.GameBasics -import com.unciv.models.gamebasics.ICivilopedia import com.unciv.models.gamebasics.tr import com.unciv.models.stats.NamedStats import com.unciv.ui.utils.colorFromRGB -import com.unciv.models.gamebasics.tr -class Terrain : NamedStats(), ICivilopedia { - override val description: String - get(){ - val sb = StringBuilder() - sb.appendln(this.clone().toString()) - val terrainsCanBeBuiltOnString:ArrayList = arrayListOf() - if(occursOn!=null) { - occursOn.forEach { - terrainsCanBeBuiltOnString.add(it.tr()) - } - sb.appendln("Occurs on [${terrainsCanBeBuiltOnString!!.joinToString(", ")}]".tr()) - } - val resourcesFoundString:ArrayList = arrayListOf() - val resourcesFound = GameBasics.TileResources.values.filter { it.terrainsCanBeFoundOn.contains(name)} - if(resourcesFound.isNotEmpty()) { - for (i in resourcesFound) { - resourcesFoundString.add(i.toString().tr()) - } - sb.appendln("May contain [${resourcesFoundString!!.joinToString(", ")}]".tr()) - } - sb.appendln("{Movement cost}: $movementCost".tr()) - if(defenceBonus!=0f){ - sb.appendln("{Defence bonus}: ".tr()+(defenceBonus*100).toInt()+"%") - } - - if(rough) - sb.appendln("Rough Terrain".tr()) - - return sb.toString() +class Terrain : NamedStats() { + fun getDescription(): String { + val sb = StringBuilder() + sb.appendln(this.clone().toString()) + if (occursOn != null) { + sb.appendln("Occurs on [${occursOn.joinToString(", ")}]".tr()) } + val resourcesFound = GameBasics.TileResources.values.filter { it.terrainsCanBeFoundOn.contains(name) } + if (resourcesFound.isNotEmpty()) { + sb.appendln("May contain [${resourcesFound.joinToString(", ") { it.name.tr() }}]".tr()) + } + sb.appendln("{Movement cost}: $movementCost".tr()) + if (defenceBonus != 0f) { + sb.appendln("{Defence bonus}: ".tr() + (defenceBonus * 100).toInt() + "%") + } + + if (rough) sb.appendln("Rough Terrain".tr()) + + return sb.toString() + } + lateinit var type: TerrainType var overrideStats = false diff --git a/core/src/com/unciv/models/gamebasics/tile/TileImprovement.kt b/core/src/com/unciv/models/gamebasics/tile/TileImprovement.kt index eaeec558c2..83b2254db1 100644 --- a/core/src/com/unciv/models/gamebasics/tile/TileImprovement.kt +++ b/core/src/com/unciv/models/gamebasics/tile/TileImprovement.kt @@ -2,13 +2,12 @@ package com.unciv.models.gamebasics.tile import com.unciv.logic.civilization.CivilizationInfo import com.unciv.models.gamebasics.GameBasics -import com.unciv.models.gamebasics.ICivilopedia import com.unciv.models.gamebasics.tr import com.unciv.models.stats.NamedStats import com.unciv.models.stats.Stats import java.util.* -class TileImprovement : NamedStats(), ICivilopedia { +class TileImprovement : NamedStats() { var terrainsCanBeBuiltOn: Collection = ArrayList() var techRequired: String? = null @@ -30,31 +29,30 @@ class TileImprovement : NamedStats(), ICivilopedia { return Math.round(realTurnsToBuild) } - override val description: String - get() { - val stringBuilder = StringBuilder() - if (this.clone().toString().isNotEmpty()) stringBuilder.appendln(this.clone().toString()) - if (!terrainsCanBeBuiltOn.isEmpty()) { - val terrainsCanBeBuiltOnString:ArrayList = arrayListOf() - for (i in terrainsCanBeBuiltOn) { - terrainsCanBeBuiltOnString.add(i.tr()) - } - stringBuilder.appendln("Can be built on ".tr() + terrainsCanBeBuiltOnString.joinToString(", "))//language can be changed when setting changes. + fun getDescription(): String { + val stringBuilder = StringBuilder() + if (this.clone().toString().isNotEmpty()) stringBuilder.appendln(this.clone().toString()) + if (!terrainsCanBeBuiltOn.isEmpty()) { + val terrainsCanBeBuiltOnString: ArrayList = arrayListOf() + for (i in terrainsCanBeBuiltOn) { + terrainsCanBeBuiltOnString.add(i.tr()) } - val statsToResourceNames = HashMap>() - for (tr: TileResource in GameBasics.TileResources.values.filter { it.improvement == name }) { - val statsString = tr.improvementStats.toString() - if (!statsToResourceNames.containsKey(statsString)) - statsToResourceNames[statsString] = ArrayList() - statsToResourceNames[statsString]!!.add(tr.name.tr()) - } - statsToResourceNames.forEach { - stringBuilder.appendln(it.key + " for ".tr() + it.value.joinToString(", ")) - } - - if (techRequired != null) stringBuilder.appendln("Required tech: [$techRequired]".tr()) - - return stringBuilder.toString() + stringBuilder.appendln("Can be built on ".tr() + terrainsCanBeBuiltOnString.joinToString(", "))//language can be changed when setting changes. } + val statsToResourceNames = HashMap>() + for (tr: TileResource in GameBasics.TileResources.values.filter { it.improvement == name }) { + val statsString = tr.improvementStats.toString() + if (!statsToResourceNames.containsKey(statsString)) + statsToResourceNames[statsString] = ArrayList() + statsToResourceNames[statsString]!!.add(tr.name.tr()) + } + statsToResourceNames.forEach { + stringBuilder.appendln(it.key + " for ".tr() + it.value.joinToString(", ")) + } + + if (techRequired != null) stringBuilder.appendln("Required tech: [$techRequired]".tr()) + + return stringBuilder.toString() + } } diff --git a/core/src/com/unciv/models/gamebasics/tile/TileResource.kt b/core/src/com/unciv/models/gamebasics/tile/TileResource.kt index 027874b0da..04c361d815 100644 --- a/core/src/com/unciv/models/gamebasics/tile/TileResource.kt +++ b/core/src/com/unciv/models/gamebasics/tile/TileResource.kt @@ -2,15 +2,13 @@ package com.unciv.models.gamebasics.tile import com.unciv.models.gamebasics.Building import com.unciv.models.gamebasics.GameBasics -import com.unciv.models.gamebasics.ICivilopedia import com.unciv.models.gamebasics.tr import com.unciv.models.stats.NamedStats import com.unciv.models.stats.Stats import java.util.* -class TileResource : NamedStats(), ICivilopedia { - override val description: String - get(){ +class TileResource : NamedStats() { + fun getDescription(): String { val stringBuilder = StringBuilder() stringBuilder.appendln(this.clone().toString()) val terrainsCanBeBuiltOnString:ArrayList = arrayListOf() diff --git a/core/src/com/unciv/models/gamebasics/unit/BaseUnit.kt b/core/src/com/unciv/models/gamebasics/unit/BaseUnit.kt index d41616f660..0d3d0fce38 100644 --- a/core/src/com/unciv/models/gamebasics/unit/BaseUnit.kt +++ b/core/src/com/unciv/models/gamebasics/unit/BaseUnit.kt @@ -6,7 +6,6 @@ import com.unciv.logic.city.IConstruction import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.map.MapUnit import com.unciv.models.gamebasics.GameBasics -import com.unciv.models.gamebasics.ICivilopedia import com.unciv.models.gamebasics.Translations import com.unciv.models.gamebasics.tr import com.unciv.models.stats.INamed @@ -15,7 +14,7 @@ import com.unciv.models.stats.INamed /** This is the basic info of the units, as specified in Units.json, in contrast to MapUnit, which is a specific unit of a certain type that appears on the map */ -class BaseUnit : INamed, IConstruction, ICivilopedia { +class BaseUnit : INamed, IConstruction { override lateinit var name: String var cost: Int = 0 @@ -37,12 +36,6 @@ class BaseUnit : INamed, IConstruction, ICivilopedia { var uniqueTo:String?=null var attackSound:String?=null - override val description: String - get(){ - return getDescription(false) - } - - fun getShortDescription(): String { val infoList= mutableListOf() diff --git a/core/src/com/unciv/ui/CivilopediaScreen.kt b/core/src/com/unciv/ui/CivilopediaScreen.kt index 5fcb8a8df5..714556f2c3 100644 --- a/core/src/com/unciv/ui/CivilopediaScreen.kt +++ b/core/src/com/unciv/ui/CivilopediaScreen.kt @@ -1,44 +1,48 @@ package com.unciv.ui import com.badlogic.gdx.Gdx -import com.badlogic.gdx.graphics.Color +import com.badlogic.gdx.scenes.scene2d.Actor import com.badlogic.gdx.scenes.scene2d.ui.* -import com.badlogic.gdx.scenes.scene2d.ui.List -import com.badlogic.gdx.utils.Array import com.unciv.UnCivGame -import com.unciv.models.gamebasics.BasicHelp import com.unciv.models.gamebasics.GameBasics -import com.unciv.models.gamebasics.ICivilopedia import com.unciv.models.gamebasics.tr -import com.unciv.ui.utils.CameraStageBaseScreen -import com.unciv.ui.utils.Tutorials -import com.unciv.ui.utils.onClick -import com.unciv.ui.utils.toLabel +import com.unciv.ui.utils.* import java.util.* -import kotlin.math.max class CivilopediaScreen : CameraStageBaseScreen() { + class CivilopediaEntry { + var name: String + var description: String + var image: Actor?=null - val categoryToInfos = LinkedHashMap>() + constructor(name: String, description: String, image: Actor?=null) { + this.name = name + this.description = description + this.image = image + } + + constructor() : this("","") // Needed for GameBAsics json deserializing + } + + val categoryToEntries = LinkedHashMap>() val categoryToButtons = LinkedHashMap() - val civPediaEntries = Array() - val nameList = List(skin) + val entrySelectTable = Table().apply { defaults().pad(5f) } val description = "".toLabel() - fun select(category: String, entry: String? = null) { - val nameItems=Array() - civPediaEntries.clear() - for (civilopediaEntry in categoryToInfos[category]!!.sortedBy { it.toString().tr() }){ // Alphabetical order of localized names - civPediaEntries.add(civilopediaEntry) - nameItems.add(civilopediaEntry.toString().tr()) + fun select(category: String) { + entrySelectTable.clear() + for (entry in categoryToEntries[category]!! + .sortedBy { it.name.tr() }){ // Alphabetical order of localized names + val entryButton = Button(skin) + if(entry.image!=null) + entryButton.add(entry.image).size(50f).padRight(10f) + entryButton.add(entry.name.toLabel()) + entryButton.onClick { + description.setText(entry.description) + } + entrySelectTable.add(entryButton).row() } - nameList.setItems(nameItems) - val index = max(0, nameList.items.indexOf(entry?.tr())) - nameList.selected = nameList.items.get(index) - description.setText(civPediaEntries.get(index).description) - for (btn in categoryToButtons.values) btn.isChecked = false - categoryToButtons[category]?.isChecked = true } init { @@ -67,39 +71,41 @@ class CivilopediaScreen : CameraStageBaseScreen() { val basicHelpFileName = if(Gdx.files.internal("jsons/BasicHelp/BasicHelp_$language.json").exists())"BasicHelp/BasicHelp_$language" else "BasicHelp/BasicHelp" - categoryToInfos["Basics"] = GameBasics.getFromJson(kotlin.Array::class.java, basicHelpFileName).toList() - categoryToInfos["Buildings"] = GameBasics.Buildings.values - categoryToInfos["Resources"] = GameBasics.TileResources.values - categoryToInfos["Terrains"] = GameBasics.Terrains.values - categoryToInfos["Tile Improvements"] = GameBasics.TileImprovements.values - categoryToInfos["Units"] = GameBasics.Units.values - categoryToInfos["Technologies"] = GameBasics.Technologies.values - class Tutorial(var name:String, override var description:String):ICivilopedia{ - override fun toString() = name - } - categoryToInfos["Tutorials"] = Tutorials().getTutorialsOfLanguage("English").keys + categoryToEntries["Basics"] = GameBasics.getFromJson(kotlin.Array::class.java, basicHelpFileName).toList() + categoryToEntries["Buildings"] = GameBasics.Buildings.values + .map { CivilopediaEntry(it.name,it.getDescription(false, null), + ImageGetter.getConstructionImage(it.name)) } + categoryToEntries["Resources"] = GameBasics.TileResources.values + .map { CivilopediaEntry(it.name,it.getDescription(), + ImageGetter.getResourceImage(it.name,50f)) } + categoryToEntries["Terrains"] = GameBasics.Terrains.values + .map { CivilopediaEntry(it.name,it.getDescription()) } + categoryToEntries["Tile Improvements"] = GameBasics.TileImprovements.values + .map { CivilopediaEntry(it.name,it.getDescription(), + ImageGetter.getImprovementIcon(it.name,50f)) } + categoryToEntries["Units"] = GameBasics.Units.values + .map { CivilopediaEntry(it.name,it.getDescription(false), + ImageGetter.getConstructionImage(it.name)) } + categoryToEntries["Technologies"] = GameBasics.Technologies.values + .map { CivilopediaEntry(it.name,it.getDescription(), + ImageGetter.getTechIconGroup(it.name,50f)) } + + categoryToEntries["Tutorials"] = Tutorials().getTutorialsOfLanguage("English").keys .filter { !it.startsWith("_") } - .map { Tutorial(it.replace("_"," "), - Tutorials().getTutorials(it, UnCivGame.Current.settings.language).joinToString("\n\n")) } + .map { CivilopediaEntry(it.replace("_"," "), + Tutorials().getTutorials(it, UnCivGame.Current.settings.language) + .joinToString("\n\n")) } - nameList.onClick { - if(nameList.selected!=null) description.setText(civPediaEntries.get(nameList.selectedIndex).description) - } - nameList.style = List.ListStyle(nameList.style) - nameList.style.fontColorSelected = Color.BLACK - - for (category in categoryToInfos.keys) { + for (category in categoryToEntries.keys) { val button = TextButton(category.tr(), skin) button.style = TextButton.TextButtonStyle(button.style) - button.style.checkedFontColor = Color.YELLOW categoryToButtons[category] = button button.onClick { select(category) } buttonTable.add(button) } select("Basics") - - val sp = ScrollPane(nameList) + val sp = ScrollPane(entrySelectTable) sp.setupOverscroll(5f, 1f, 200f) entryTable.add(sp).width(Value.percentWidth(0.25f, entryTable)).height(Value.percentHeight(0.7f, entryTable)) .pad(Value.percentWidth(0.02f, entryTable)) diff --git a/core/src/com/unciv/ui/cityscreen/ConstructionsTable.kt b/core/src/com/unciv/ui/cityscreen/ConstructionsTable.kt index b1f3c1ad2d..86bc45fbf1 100644 --- a/core/src/com/unciv/ui/cityscreen/ConstructionsTable.kt +++ b/core/src/com/unciv/ui/cityscreen/ConstructionsTable.kt @@ -199,7 +199,9 @@ class ConstructionsTable(val cityScreen: CityScreen) : Table(CameraStageBaseScre description = construction.getDescription(true) else if (construction is Building) description = construction.getDescription(true, city.civInfo) - else description = construction.description.tr() + else if(construction is SpecialConstruction) + description = construction.description.tr() + else description="" // Should never happen val descriptionLabel = description.toLabel() descriptionLabel.setWrap(true) diff --git a/core/src/com/unciv/ui/pickerscreens/ImprovementPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/ImprovementPickerScreen.kt index bccadd8379..9f677554da 100644 --- a/core/src/com/unciv/ui/pickerscreens/ImprovementPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/ImprovementPickerScreen.kt @@ -1,6 +1,5 @@ package com.unciv.ui.pickerscreens -import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.scenes.scene2d.Touchable import com.badlogic.gdx.scenes.scene2d.ui.Button import com.badlogic.gdx.scenes.scene2d.ui.Table @@ -10,7 +9,10 @@ import com.unciv.logic.map.TileInfo import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.tile.TileImprovement import com.unciv.models.gamebasics.tr -import com.unciv.ui.utils.* +import com.unciv.ui.utils.ImageGetter +import com.unciv.ui.utils.addSeparatorVertical +import com.unciv.ui.utils.onClick +import com.unciv.ui.utils.toLabel class ImprovementPickerScreen(tileInfo: TileInfo, onAccept: ()->Unit) : PickerScreen() { private var selectedImprovement: TileImprovement? = null @@ -44,10 +46,7 @@ class ImprovementPickerScreen(tileInfo: TileInfo, onAccept: ()->Unit) : PickerSc val group = Table() - val image = if(improvement.name.startsWith("Remove")) - ImageGetter.getImage("OtherIcons/Stop") - else - ImageGetter.getImprovementIcon(improvement.name,30f) + val image = ImageGetter.getImprovementIcon(improvement.name,30f) group.add(image).size(30f).pad(10f) @@ -64,7 +63,7 @@ class ImprovementPickerScreen(tileInfo: TileInfo, onAccept: ()->Unit) : PickerSc group.onClick { selectedImprovement = improvement pick(improvement.name.tr()) - descriptionLabel.setText(improvement.description) + descriptionLabel.setText(improvement.getDescription()) } val pickNow = "Pick now!".toLabel() diff --git a/core/src/com/unciv/ui/pickerscreens/PromotionPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/PromotionPickerScreen.kt index 2a35617a65..f31c22511b 100644 --- a/core/src/com/unciv/ui/pickerscreens/PromotionPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/PromotionPickerScreen.kt @@ -48,13 +48,11 @@ class PromotionPickerScreen(val mapUnit: MapUnit) : PickerScreen() { val isPromotionAvailable = promotion in unitAvailablePromotions val unitHasPromotion = mapUnit.promotions.promotions.contains(promotion.name) - val group = Table() - - group.add(ImageGetter.getPromotionIcon(promotion.name)).size(30f).pad(10f) - group.add(promotion.name.toLabel()).pad(10f).padRight(20f) - - group.touchable = Touchable.enabled - group.onClick { + val selectPromotionButton = Button(skin) + selectPromotionButton.add(ImageGetter.getPromotionIcon(promotion.name)).size(30f).pad(10f) + selectPromotionButton.add(promotion.name.toLabel()).pad(10f).padRight(20f) + selectPromotionButton.touchable = Touchable.enabled + selectPromotionButton.onClick { selectedPromotion = promotion rightSideButton.setText(promotion.name.tr()) if(isPromotionAvailable && !unitHasPromotion) rightSideButton.enable() @@ -73,26 +71,22 @@ class PromotionPickerScreen(val mapUnit: MapUnit) : PickerScreen() { descriptionLabel.setText(descriptionText) } - val pickNow = "Pick now!".toLabel() - pickNow.setAlignment(Align.center) - pickNow.onClick { - acceptPromotion(promotion) - } + val promotionTable = Table() + promotionTable.add(selectPromotionButton) - val promotionButton = Button(skin) - promotionButton.add(group).fillY() - if(isPromotionAvailable) { - promotionButton.addSeparatorVertical() - promotionButton.add(pickNow).padLeft(10f).fillY() + val pickNow = "Pick now!".toLabel() + pickNow.setAlignment(Align.center) + pickNow.onClick { + acceptPromotion(promotion) + } + promotionTable.add(pickNow).padLeft(10f).fillY() } - else promotionButton.color= Color.GRAY - - if(unitHasPromotion) promotionButton.color = Color.GREEN - availablePromotionsGroup.addActor(promotionButton) - + else if(unitHasPromotion) selectPromotionButton.color= Color.GREEN + else selectPromotionButton.color= Color.GRAY + availablePromotionsGroup.addActor(promotionTable) } topTable.add(availablePromotionsGroup) } diff --git a/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt index 5801d2a87d..3b41149f92 100644 --- a/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt @@ -142,7 +142,7 @@ class TechPickerScreen(internal val civInfo: CivilizationInfo, switchfromWorldSc private fun selectTechnology(tech: Technology?, center: Boolean = false, switchfromWorldScreen: Boolean = true) { selectedTech = tech - descriptionLabel.setText(tech?.description) + descriptionLabel.setText(tech?.getDescription()) if (!switchfromWorldScreen) return diff --git a/core/src/com/unciv/ui/utils/ImageGetter.kt b/core/src/com/unciv/ui/utils/ImageGetter.kt index 55f6341fbd..ce57aba1eb 100644 --- a/core/src/com/unciv/ui/utils/ImageGetter.kt +++ b/core/src/com/unciv/ui/utils/ImageGetter.kt @@ -106,6 +106,8 @@ object ImageGetter { val productionCircleColor = Color.BROWN.cpy().lerp(Color.WHITE,0.5f)!! val goldCircleColor = Color.GOLD.cpy().lerp(Color.WHITE,0.5f)!! fun getImprovementIcon(improvementName:String, size:Float=20f):Actor{ + if(improvementName.startsWith("Remove")) + return getImage("OtherIcons/Stop") if(improvementName.startsWith("StartingLocation ")){ val nationName = improvementName.removePrefix("StartingLocation ") val nation = GameBasics.Nations[nationName]!! diff --git a/core/src/com/unciv/ui/worldscreen/AlertPopup.kt b/core/src/com/unciv/ui/worldscreen/AlertPopup.kt index f6d8e280b5..2c25776e3d 100644 --- a/core/src/com/unciv/ui/worldscreen/AlertPopup.kt +++ b/core/src/com/unciv/ui/worldscreen/AlertPopup.kt @@ -167,7 +167,7 @@ class AlertPopup(val worldScreen: WorldScreen, val popupAlert: PopupAlert): Popu val centerTable = Table() centerTable.add(tech.quote.toLabel().apply { setWrap(true) }).width(worldScreen.stage.width/3) centerTable.add(ImageGetter.getTechIconGroup(tech.name,100f)).pad(20f) - centerTable.add(tech.description.toLabel().apply { setWrap(true) }).width(worldScreen.stage.width/3) + centerTable.add(tech.getDescription().toLabel().apply { setWrap(true) }).width(worldScreen.stage.width/3) add(centerTable).row() add(getCloseButton("Close")) } diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitTable.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitTable.kt index 812a0e11d0..0fb77ee139 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitTable.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitTable.kt @@ -6,13 +6,11 @@ import com.badlogic.gdx.scenes.scene2d.ui.Image import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup -import com.unciv.UnCivGame import com.unciv.logic.battle.CityCombatant import com.unciv.logic.city.CityInfo import com.unciv.logic.map.MapUnit import com.unciv.logic.map.TileInfo import com.unciv.models.gamebasics.tr -import com.unciv.ui.CivilopediaScreen import com.unciv.ui.utils.* import com.unciv.ui.worldscreen.WorldScreen @@ -46,19 +44,6 @@ class UnitTable(val worldScreen: WorldScreen) : Table(){ deselectUnitButton.touchable = Touchable.enabled deselectUnitButton.onClick { selectedUnit=null; selectedCity=null; worldScreen.shouldUpdate=true;this@UnitTable.isVisible=false } addActor(deselectUnitButton) - - helpUnitButton.add(Label("?",CameraStageBaseScreen.skin)).pad(10f) - helpUnitButton.pack() - helpUnitButton.touchable = Touchable.enabled - helpUnitButton.onClick { - val pedia = CivilopediaScreen() - if (selectedUnit != null) { - pedia.select("Units", selectedUnit?.name) - } - UnCivGame.Current.setScreen(pedia) - } - addActor(helpUnitButton) - }).left() add(Table().apply {