Resolved #1493 - Added Nation information to Civilopedia

This commit is contained in:
Yair Morgenstern 2019-12-21 20:06:58 +02:00
parent 7d746df5a2
commit 09c8cf221f
4 changed files with 93 additions and 98 deletions

View File

@ -66,7 +66,6 @@ class UncivGame(val version: String) : Game() {
thread { thread {
ruleset = Ruleset(true) ruleset = Ruleset(true)
settings.hasCrashedRecently=true // for test
if(rewriteTranslationFiles) { // Yes, also when running from the Jar. Sue me. if(rewriteTranslationFiles) { // Yes, also when running from the Jar. Sue me.
translations.readAllLanguagesTranslation() translations.readAllLanguagesTranslation()

View File

@ -3,6 +3,8 @@ package com.unciv.models.ruleset
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.unciv.logic.civilization.CityStateType import com.unciv.logic.civilization.CityStateType
import com.unciv.models.stats.INamed import com.unciv.models.stats.INamed
import com.unciv.models.translations.Translations
import com.unciv.models.translations.tr
import com.unciv.ui.utils.colorFromRGB import com.unciv.ui.utils.colorFromRGB
enum class VictoryType{ enum class VictoryType{
@ -75,4 +77,87 @@ class Nation : INamed {
} }
lateinit var cities: List<String> lateinit var cities: List<String>
fun getUniqueString(ruleset: Ruleset): String {
val textList = ArrayList<String>()
if (unique != null) {
textList += unique!!.tr()
textList += ""
}
addUniqueBuildingsText(textList,ruleset)
addUniqueUnitsText(textList,ruleset)
addUniqueImprovementsText(textList,ruleset)
return textList.joinToString("\n").tr().trim()
}
private fun addUniqueBuildingsText(textList: ArrayList<String>, ruleset: Ruleset) {
for (building in ruleset.Buildings.values
.filter { it.uniqueTo == name }) {
val originalBuilding = ruleset.Buildings[building.replaces!!]!!
textList += building.name.tr() + " - {replaces} " + originalBuilding.name.tr()
val originalBuildingStatMap = originalBuilding.toHashMap()
for (stat in building.toHashMap())
if (stat.value != originalBuildingStatMap[stat.key])
textList += " " + stat.key.toString().tr() + " " + stat.value.toInt() + " vs " + originalBuildingStatMap[stat.key]!!.toInt()
for (unique in building.uniques.filter { it !in originalBuilding.uniques })
textList += " " + unique.tr()
if (building.maintenance != originalBuilding.maintenance)
textList += " {Maintenance} " + building.maintenance + " vs " + originalBuilding.maintenance
if (building.cost != originalBuilding.cost)
textList += " {Cost} " + building.cost + " vs " + originalBuilding.cost
if (building.cityStrength != originalBuilding.cityStrength)
textList += " {City strength} " + building.cityStrength + " vs " + originalBuilding.cityStrength
if (building.cityHealth != originalBuilding.cityHealth)
textList += " {City health} " + building.cityHealth + " vs " + originalBuilding.cityHealth
textList += ""
}
}
private fun addUniqueUnitsText(textList: ArrayList<String>, ruleset: Ruleset) {
for (unit in ruleset.Units.values
.filter { it.uniqueTo == name }) {
val originalUnit = ruleset.Units[unit.replaces!!]!!
textList += unit.name.tr() + " - {replaces} " + originalUnit.name.tr()
if (unit.cost != originalUnit.cost)
textList += " {Cost} " + unit.cost + " vs " + originalUnit.cost
if (unit.strength != originalUnit.strength)
textList += " {Strength} " + unit.strength + " vs " + originalUnit.strength
if (unit.rangedStrength != originalUnit.rangedStrength)
textList += " {Ranged strength} " + unit.rangedStrength + " vs " + originalUnit.rangedStrength
if (unit.range != originalUnit.range)
textList += " {Range} " + unit.range + " vs " + originalUnit.range
if (unit.movement != originalUnit.movement)
textList += " {Movement} " + unit.movement + " vs " + originalUnit.movement
if (originalUnit.requiredResource != null && unit.requiredResource == null)
textList += " " + "[${originalUnit.requiredResource}] not required".tr()
for (unique in unit.uniques.filterNot { it in originalUnit.uniques })
textList += " " + Translations.translateBonusOrPenalty(unique)
for (unique in originalUnit.uniques.filterNot { it in unit.uniques })
textList += " " + "Lost ability".tr() + "(vs " + originalUnit.name.tr() + "): " + Translations.translateBonusOrPenalty(unique)
for (promotion in unit.promotions.filter { it !in originalUnit.promotions })
textList += " " + promotion.tr() + " (" + Translations.translateBonusOrPenalty(ruleset.UnitPromotions[promotion]!!.effect) + ")"
textList += ""
}
}
private fun addUniqueImprovementsText(textList: ArrayList<String>, ruleset: Ruleset) {
for (improvement in ruleset.TileImprovements.values
.filter { it.uniqueTo == name }) {
textList += improvement.name.tr()
textList += " "+improvement.clone().toString()
for(unique in improvement.uniques)
textList += " "+unique.tr()
}
}
} }

View File

@ -9,19 +9,7 @@ import com.unciv.ui.utils.*
import java.util.* import java.util.*
class CivilopediaScreen(ruleset: Ruleset) : CameraStageBaseScreen() { class CivilopediaScreen(ruleset: Ruleset) : CameraStageBaseScreen() {
class CivilopediaEntry { class CivilopediaEntry(var name: String, var description: String, var image: Actor? = null)
var name: String
var description: String
var image: Actor?=null
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<String, Collection<CivilopediaEntry>>() val categoryToEntries = LinkedHashMap<String, Collection<CivilopediaEntry>>()
val categoryToButtons = LinkedHashMap<String, Button>() val categoryToButtons = LinkedHashMap<String, Button>()
@ -84,6 +72,10 @@ class CivilopediaScreen(ruleset: Ruleset) : CameraStageBaseScreen() {
categoryToEntries["Units"] = ruleset.Units.values categoryToEntries["Units"] = ruleset.Units.values
.map { CivilopediaEntry(it.name,it.getDescription(false), .map { CivilopediaEntry(it.name,it.getDescription(false),
ImageGetter.getConstructionImage(it.name)) } ImageGetter.getConstructionImage(it.name)) }
categoryToEntries["Nations"] = ruleset.Nations.values
.filter { it.isMajorCiv() }
.map { CivilopediaEntry(it.name,it.getUniqueString(ruleset),
ImageGetter.getNationIndicator(it,50f)) }
categoryToEntries["Technologies"] = ruleset.Technologies.values categoryToEntries["Technologies"] = ruleset.Technologies.values
.map { CivilopediaEntry(it.name,it.getDescription(ruleset), .map { CivilopediaEntry(it.name,it.getDescription(ruleset),
ImageGetter.getTechIconGroup(it.name,50f)) } ImageGetter.getTechIconGroup(it.name,50f)) }

View File

@ -1,12 +1,9 @@
package com.unciv.ui.newgamescreen package com.unciv.ui.newgamescreen
import com.badlogic.gdx.scenes.scene2d.Touchable import com.badlogic.gdx.scenes.scene2d.Touchable
import com.badlogic.gdx.scenes.scene2d.ui.Label
import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.unciv.models.ruleset.Nation import com.unciv.models.ruleset.Nation
import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.Ruleset
import com.unciv.models.translations.Translations
import com.unciv.models.translations.tr
import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.ImageGetter import com.unciv.ui.utils.ImageGetter
import com.unciv.ui.utils.toLabel import com.unciv.ui.utils.toLabel
@ -30,90 +27,12 @@ class NationTable(val nation: Nation, width:Float, ruleset: Ruleset)
} }
else titleTable.add(leaderDisplayLabel) else titleTable.add(leaderDisplayLabel)
innerTable.add(titleTable).row() innerTable.add(titleTable).row()
val nationUniqueLabel =nation.getUniqueString(ruleset).toLabel(nation.getInnerColor())
innerTable.add(getUniqueLabel(nation,ruleset).apply { setWrap(true) }).width(width) nationUniqueLabel.setWrap(true)
innerTable.add(nationUniqueLabel).width(width)
touchable = Touchable.enabled touchable = Touchable.enabled
add(innerTable) add(innerTable)
} }
private fun getUniqueLabel(nation: Nation, ruleset: Ruleset): Label {
val textList = ArrayList<String>()
if (nation.unique != null) {
textList += nation.unique!!.tr()
textList += ""
}
addUniqueBuildingsText(nation, textList,ruleset)
addUniqueUnitsText(nation, textList,ruleset)
addUniqueImprovementsText(nation, textList,ruleset)
return textList.joinToString("\n").tr().trim().toLabel(nation.getInnerColor())
}
private fun addUniqueBuildingsText(nation: Nation, textList: ArrayList<String>, ruleset: Ruleset) {
for (building in ruleset.Buildings.values
.filter { it.uniqueTo == nation.name }) {
val originalBuilding = ruleset.Buildings[building.replaces!!]!!
textList += building.name.tr() + " - {replaces} " + originalBuilding.name.tr()
val originalBuildingStatMap = originalBuilding.toHashMap()
for (stat in building.toHashMap())
if (stat.value != originalBuildingStatMap[stat.key])
textList += " " + stat.key.toString().tr() + " " + stat.value.toInt() + " vs " + originalBuildingStatMap[stat.key]!!.toInt()
for (unique in building.uniques.filter { it !in originalBuilding.uniques })
textList += " " + unique.tr()
if (building.maintenance != originalBuilding.maintenance)
textList += " {Maintenance} " + building.maintenance + " vs " + originalBuilding.maintenance
if (building.cost != originalBuilding.cost)
textList += " {Cost} " + building.cost + " vs " + originalBuilding.cost
if (building.cityStrength != originalBuilding.cityStrength)
textList += " {City strength} " + building.cityStrength + " vs " + originalBuilding.cityStrength
if (building.cityHealth != originalBuilding.cityHealth)
textList += " {City health} " + building.cityHealth + " vs " + originalBuilding.cityHealth
textList += ""
}
}
private fun addUniqueUnitsText(nation: Nation, textList: ArrayList<String>, ruleset: Ruleset) {
for (unit in ruleset.Units.values
.filter { it.uniqueTo == nation.name }) {
val originalUnit = ruleset.Units[unit.replaces!!]!!
textList += unit.name.tr() + " - {replaces} " + originalUnit.name.tr()
if (unit.cost != originalUnit.cost)
textList += " {Cost} " + unit.cost + " vs " + originalUnit.cost
if (unit.strength != originalUnit.strength)
textList += " {Strength} " + unit.strength + " vs " + originalUnit.strength
if (unit.rangedStrength != originalUnit.rangedStrength)
textList += " {Ranged strength} " + unit.rangedStrength + " vs " + originalUnit.rangedStrength
if (unit.range != originalUnit.range)
textList += " {Range} " + unit.range + " vs " + originalUnit.range
if (unit.movement != originalUnit.movement)
textList += " {Movement} " + unit.movement + " vs " + originalUnit.movement
if (originalUnit.requiredResource != null && unit.requiredResource == null)
textList += " " + "[${originalUnit.requiredResource}] not required".tr()
for (unique in unit.uniques.filterNot { it in originalUnit.uniques })
textList += " " + Translations.translateBonusOrPenalty(unique)
for (unique in originalUnit.uniques.filterNot { it in unit.uniques })
textList += " " + "Lost ability".tr() + "(vs " + originalUnit.name.tr() + "): " + Translations.translateBonusOrPenalty(unique)
for (promotion in unit.promotions.filter { it !in originalUnit.promotions })
textList += " " + promotion.tr() + " (" + Translations.translateBonusOrPenalty(ruleset.UnitPromotions[promotion]!!.effect) + ")"
textList += ""
}
}
private fun addUniqueImprovementsText(nation: Nation, textList: ArrayList<String>, ruleset: Ruleset) {
for (improvement in ruleset.TileImprovements.values
.filter { it.uniqueTo == nation.name }) {
textList += improvement.name.tr()
textList += " "+improvement.clone().toString()
for(unique in improvement.uniques)
textList += " "+unique.tr()
}
}
} }