Add Global Uniques to the Civilopedia (#13910)

* Add Global Uniques to the Civilopedia

* Clean up the text

* Clean up the code

* Move into getCivilopediaTutorials
This commit is contained in:
Rob Loach 2025-09-13 15:30:28 -04:00 committed by GitHub
parent 76e9935d83
commit 311611bee5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
46 changed files with 79 additions and 46 deletions

View File

@ -4800,7 +4800,7 @@ Resource =
# Requires translation!
Ruins =
# Requires translation!
GlobalUniques =
Global Uniques =
# Requires translation!
Speed =
# Requires translation!

View File

@ -4304,7 +4304,7 @@ Resource =
# Requires translation!
Ruins =
# Requires translation!
GlobalUniques =
Global Uniques =
# Requires translation!
Speed =
# Requires translation!

View File

@ -4465,7 +4465,7 @@ Resource =
# Requires translation!
Ruins =
# Requires translation!
GlobalUniques =
Global Uniques =
# Requires translation!
Speed =
# Requires translation!

View File

@ -5034,7 +5034,7 @@ Resource =
# Requires translation!
Ruins =
# Requires translation!
GlobalUniques =
Global Uniques =
# Requires translation!
Speed =
# Requires translation!

View File

@ -2813,7 +2813,7 @@ UnitType = Tipo de Unidade
Promotion = Promoção
Resource = Recursos
Ruins = Ruínas
GlobalUniques = Únicos Globais
Global Uniques = Únicos Globais
Speed = Velocidade
Tutorial = Tutorial
CityState = Cidade-Estado

View File

@ -4079,7 +4079,7 @@ Promotion =
Resource = Ресурс
Ruins = Руини
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = Скорост
# Requires translation!
Tutorial =

View File

@ -2845,7 +2845,7 @@ UnitType = Tipus dunitat
Promotion = Ascens
Resource = Recurs
Ruins = Ruïnes
GlobalUniques = Únics globals
Global Uniques = Únics globals
Speed = Velocitat
Tutorial = Tutorial
CityState = Ciutat-estat

View File

@ -2829,7 +2829,7 @@ UnitType = TipJedinice
Promotion = Promaknuće
Resource = Resurs
Ruins = Ruševine
GlobalUniques = GlobalniUnikati
Global Uniques = Globalni Unikati
Speed = Brzina
Tutorial = Poduka
CityState = GradDržava

View File

@ -3316,7 +3316,7 @@ Resource =
# Requires translation!
Ruins =
# Requires translation!
GlobalUniques =
Global Uniques =
# Requires translation!
Speed =
# Requires translation!

View File

@ -2875,7 +2875,7 @@ Promotion = Promotie
Resource = Hulpbron
Ruins = Ruïnes
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = Snelheid
Tutorial = Tutorial
CityState = StadStaat

View File

@ -5217,7 +5217,7 @@ Resource =
# Requires translation!
Ruins =
# Requires translation!
GlobalUniques =
Global Uniques =
# Requires translation!
Speed =
# Requires translation!

View File

@ -3121,7 +3121,7 @@ Promotion = Promosyon
Resource = Pagkukunan
Ruins = Guho
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = Bilis
Tutorial = Tutoryal
CityState = LungsodEstado

View File

@ -4241,7 +4241,7 @@ Resource =
# Requires translation!
Ruins =
# Requires translation!
GlobalUniques =
Global Uniques =
# Requires translation!
Speed =
# Requires translation!

View File

@ -2812,7 +2812,7 @@ UnitType = Type Unité
Promotion = Promotion
Resource = Ressource
Ruins = Ruines
GlobalUniques = GlobalUniques
Global Uniques = Uniques Mondiales
Speed = Vitesse
Tutorial = Tutoriel
CityState = Cité-État

View File

@ -2819,7 +2819,7 @@ UnitType = Tipo de unidade
Promotion = Promoción
Resource = Recurso
Ruins = Ruínas
GlobalUniques = Únicos globais
Global Uniques = Únicos Globais
Speed = Velocidade
Tutorial = Tuturial
CityState = cidade-estado

View File

@ -2826,7 +2826,7 @@ UnitType = Einheitentyp
Promotion = Beförderung
Resource = Ressource
Ruins = Ruinen
GlobalUniques = Globale Unikate
Global Uniques = Globale Unikate
Speed = Geschwindigkeit
Tutorial = Tutorial
CityState = Stadtstaat

View File

@ -4771,7 +4771,7 @@ Resource =
# Requires translation!
Ruins =
# Requires translation!
GlobalUniques =
Global Uniques =
# Requires translation!
Speed =
# Requires translation!

View File

@ -3030,7 +3030,7 @@ Promotion = Előléptetés
Resource = Erőforrás
Ruins = Romok
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = Sebesség
Tutorial = Bemutató
CityState = Városállam

View File

@ -2812,7 +2812,7 @@ UnitType = JenisUnit
Promotion = Promosi
Resource = SumberDaya
Ruins = Reruntuhan
GlobalUniques = KeunikanGlobal
Global Uniques = Keunikan Global
Speed = Kecepatan
Tutorial = Tutorial
CityState = NegaraKota

View File

@ -2819,7 +2819,7 @@ Promotion = Promozione
Resource = Risorsa
Ruins = Rovine
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = Velocità
Tutorial = Tutorial
CityState = Città-Stato

View File

@ -2835,7 +2835,7 @@ UnitType = ユニットタイプ
Promotion = 昇進
Resource = 資源
Ruins = 遺跡
GlobalUniques = グローバルユニーク
Global Uniques = グローバルユニーク
Speed = スピード
Tutorial = チュートリアル
CityState = 都市国家

View File

@ -2857,7 +2857,7 @@ UnitType = 유닛
Promotion = 승급
Resource = 자원
Ruins = 도시 폐허
GlobalUniques = 전역특성
Global Uniques = 전역특성
Speed = 속도
Tutorial = 튜토리얼
CityState = 도시국가

View File

@ -3035,7 +3035,7 @@ Promotion = Promotio
Resource = Merx
Ruins = Parietinae
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = Celeritas
Tutorial = Praeceptum
CityState = Civitas Urbis

View File

@ -3496,7 +3496,7 @@ Promotion = Paaukštinmas
Resource = Resursas
Ruins = Griuvėsiai
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = Greitis
Tutorial = Apmokymai
CityState = Laisvasis miestas

View File

@ -3999,7 +3999,7 @@ Promotion = Kenaikan Pangkat
Resource = Sumber
Ruins = Runtuhan
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = Kelajuan
# Requires translation!
Tutorial =

View File

@ -3297,7 +3297,7 @@ Promotion = Forfremjing
Resource = Ressurs
Ruins = Ruinar
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = Snøggleik
Tutorial = Rettleiing
CityState = CityState

View File

@ -4620,7 +4620,7 @@ Resource =
# Requires translation!
Ruins =
# Requires translation!
GlobalUniques =
Global Uniques =
# Requires translation!
Speed =
# Requires translation!

View File

@ -4005,7 +4005,7 @@ Resource =
# Requires translation!
Ruins =
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = Sorat
Tutorial = Aamoozesh
# Requires translation!

View File

@ -2872,7 +2872,7 @@ Promotion = Awans
Resource = Surowiec
Ruins = Ruiny
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = Prędkość
Tutorial = Samouczek
CityState = Wolne Miasto

View File

@ -2812,7 +2812,7 @@ UnitType = Tipo de Unidade
Promotion = Promoção
Resource = Recurso
Ruins = Ruínas
GlobalUniques = UnicosGlobaís
Global Uniques = Unicos Globaís
Speed = Velocidade
Tutorial = Tutorial
CityState = Cidade-Estado

View File

@ -3446,7 +3446,7 @@ Promotion =
Resource = Resursă
Ruins = Ruine
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = Viteză
Tutorial = Tutorial
CityState = Oraș-stat

View File

@ -2833,7 +2833,7 @@ UnitType = Тип юнита
Promotion = Повышение
Resource = Ресурс
Ruins = Руины
GlobalUniques = Глобальные редкости
Global Uniques = Глобальные редкости
Speed = Скорость
Tutorial = Обучение
CityState = Город-государство

View File

@ -4446,7 +4446,7 @@ Promotion = Промоція
Resource = Ресурс
Ruins = Розвалениська
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = Скорость
Tutorial = Ошколованя
CityState = Штат-варош

View File

@ -2827,7 +2827,7 @@ UnitType = 单位类别
Promotion = 晋升项
Resource = 资源
Ruins = 遗迹
GlobalUniques = 全局特性
Global Uniques = 全局特性
Speed = 游戏速度
Tutorial = 教程
CityState = 城邦

View File

@ -2821,7 +2821,7 @@ UnitType = Tipo de unidad
Promotion = Promoción
Resource = Recurso
Ruins = Ruinas
GlobalUniques = Únicos globales
Global Uniques = Únicos globales
Speed = Velocidad
Tutorial = Tutorial
CityState = Ciudad-Estado

View File

@ -3506,7 +3506,7 @@ Promotion = Befordran
Resource = Resurs
Ruins = Ruiner
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = Hastighet
Tutorial = Handledning
CityState = CityState

View File

@ -4700,7 +4700,7 @@ Resource =
# Requires translation!
Ruins =
# Requires translation!
GlobalUniques =
Global Uniques =
# Requires translation!
Speed =
# Requires translation!

View File

@ -2864,7 +2864,7 @@ Promotion = 晉升
Resource = 資源
Ruins = 廢墟
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = 速度
Tutorial = 教學
CityState = 城邦

View File

@ -2852,7 +2852,7 @@ Promotion = Terfi
Resource = Kaynak
Ruins = Kalıntılar
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = Hız
Tutorial = Öğretici
CityState = ŞehirDevleti

View File

@ -2824,7 +2824,7 @@ Promotion = Підвищення
Resource = Ресурс
Ruins = Руїни
# Requires translation!
GlobalUniques =
Global Uniques =
Speed = Швидкість
Tutorial = Навчання
CityState = Місто-Держава

View File

@ -2812,7 +2812,7 @@ UnitType = chủngloạiđơnvị
Promotion = Nâng cấp
Resource = Nguồn lực
Ruins = Tàn tích
GlobalUniques = đặcsắcthếgiới
Global Uniques = đặcsắcthếgiới
Speed = Tốc độ
Tutorial = Hướng dẫn
CityState = thànhbang

View File

@ -4681,7 +4681,7 @@ Resource =
# Requires translation!
Ruins =
# Requires translation!
GlobalUniques =
Global Uniques =
# Requires translation!
Speed =
# Requires translation!

View File

@ -1765,6 +1765,7 @@ Search! =
Results =
Revealed by: =
Nothing found! =
Global uniques are ruleset-wide modifiers that apply to all civilizations. =
# Policies

View File

@ -4,15 +4,43 @@ import com.unciv.models.ruleset.unique.IHasUniques
import com.unciv.models.ruleset.unique.Unique
import com.unciv.models.ruleset.unique.UniqueTarget
import com.unciv.models.ruleset.unique.UniqueType
import com.unciv.ui.screens.civilopediascreen.FormattedLine
import yairm210.purity.annotations.Readonly
class GlobalUniques: RulesetObject() {
override var name = "GlobalUniques"
override var name = "Global Uniques"
@Readonly override fun makeLink() = "Tutorial/Global Uniques"
var unitUniques: ArrayList<String> = ArrayList()
override fun makeLink() = "" // No own category on Civilopedia screen
override fun getUniqueTarget() = UniqueTarget.GlobalUniques
/** @return Whether or not there are global uniques that should be displayed to the user. */
@Readonly fun hasUniques(): Boolean =
uniqueObjects.any { !it.isHiddenToUsers() } || unitUniques.isNotEmpty()
override fun getCivilopediaTextLines(ruleset: Ruleset): List<FormattedLine> {
val lines = mutableListOf<FormattedLine>()
lines.add(FormattedLine("Global uniques are ruleset-wide modifiers that apply to all civilizations."))
val visibleUniques = uniqueObjects.filter { !it.isHiddenToUsers() }
if (visibleUniques.isNotEmpty()) {
lines.add(FormattedLine(""))
lines.add(FormattedLine("Global Effect", header=4))
for (unique in visibleUniques) {
lines.add(FormattedLine(unique))
}
}
val visibleUnitUniques = unitUniques.map { Unique(it) }.filter { !it.isHiddenToUsers() }
if (visibleUnitUniques.isNotEmpty()) {
lines.add(FormattedLine(""))
lines.add(FormattedLine("Units", header=4))
for (unique in visibleUnitUniques) {
lines.add(FormattedLine(unique))
}
}
return lines
}
companion object {
@Readonly
fun getUniqueSourceDescription(unique: Unique): String {

View File

@ -86,7 +86,9 @@ class TutorialController(screen: BaseScreen) {
// Todo This is essentially an 'un-private' kludge and the accessor
// in CivilopediaCategories desperately needs independence from TutorialController:
// Move storage to RuleSet someday?
return tutorials.values
return tutorials.values +
// Global Uniques
listOfNotNull(UncivGame.Current.gameInfo?.getGlobalUniques()?.takeIf { it.hasUniques() })
}
}

View File

@ -1,11 +1,13 @@
package com.unciv.ui.screens.civilopediascreen
import com.unciv.UncivGame
import com.badlogic.gdx.scenes.scene2d.Actor
import com.unciv.models.ruleset.Ruleset
import com.unciv.ui.components.input.KeyboardBinding
import com.unciv.ui.screens.basescreen.TutorialController
import com.unciv.models.ruleset.Belief as BaseBelief
import com.unciv.models.ruleset.unit.UnitType as BaseUnitType
import yairm210.purity.annotations.Readonly
/** Enum used as keys for Civilopedia "pages" (categories).
*
@ -126,7 +128,7 @@ enum class CivilopediaCategories (
);
companion object {
fun fromLink(name: String): CivilopediaCategories? =
@Readonly fun fromLink(name: String): CivilopediaCategories? =
values().firstOrNull { it.name == name }
?: values().firstOrNull { it.label == name }
}