diff --git a/core/src/com/unciv/ui/cityscreen/ConstructionsTable.kt b/core/src/com/unciv/ui/cityscreen/ConstructionsTable.kt
index fb238909fc..6e42fa5c38 100644
--- a/core/src/com/unciv/ui/cityscreen/ConstructionsTable.kt
+++ b/core/src/com/unciv/ui/cityscreen/ConstructionsTable.kt
@@ -1,5 +1,6 @@
package com.unciv.ui.cityscreen
+import com.badlogic.gdx.Gdx
import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.scenes.scene2d.Touchable
import com.badlogic.gdx.scenes.scene2d.ui.Table
@@ -16,6 +17,7 @@ import com.unciv.models.stats.Stat
import com.unciv.models.translations.tr
import com.unciv.ui.cityscreen.ConstructionInfoTable.Companion.turnOrTurns
import com.unciv.ui.utils.*
+import kotlin.concurrent.thread
import com.unciv.ui.utils.AutoScrollPane as ScrollPane
class ConstructionsTable(val cityScreen: CityScreen) : Table(CameraStageBaseScreen.skin) {
@@ -54,17 +56,10 @@ class ConstructionsTable(val cityScreen: CityScreen) : Table(CameraStageBaseScre
}
fun update(selectedConstruction: IConstruction?) {
-
updateButtons(selectedConstruction)
-
updateConstructionQueue()
-
- // Need to pack before computing space left for bottom panel
- pack()
-
-
+ pack() // Need to pack before computing space left for bottom panel
updateAvailableConstructions()
-
pack()
}
@@ -160,43 +155,54 @@ class ConstructionsTable(val cityScreen: CityScreen) : Table(CameraStageBaseScre
private fun updateAvailableConstructions() {
val constrScrollY = availableConstructionsScrollPane.scrollY
- val usedHeight = showCityInfoTableButton.height + constructionsQueueScrollPane.height + buttons.height + 3f * pad + 10f
- availableConstructionsTable.clear()
+ if(!availableConstructionsTable.hasChildren()) { //
+ availableConstructionsTable.add("Loading...".toLabel()).pad(10f)
+ }
val units = ArrayList
()
val buildableWonders = ArrayList()
val buildableNationalWonders = ArrayList()
val buildableBuildings = ArrayList()
val specialConstructions = ArrayList()
- val constructionButtonDTOList = getConstructionButtonDTOs()
+ thread {
+ val constructionButtonDTOList = getConstructionButtonDTOs() // Since this can be a heavy operation and leads to many ANRs on older phones...
- for (dto in constructionButtonDTOList) {
- val constructionButton = getConstructionButton(dto)
- when (dto.construction) {
- is BaseUnit -> units.add(constructionButton)
- is Building -> {
- when {
- dto.construction.isWonder -> buildableWonders += constructionButton
- dto.construction.isNationalWonder -> buildableNationalWonders += constructionButton
- else -> buildableBuildings += constructionButton
+ Gdx.app.postRunnable {
+ availableConstructionsTable.clear()
+
+ for (dto in constructionButtonDTOList) {
+ val constructionButton = getConstructionButton(dto)
+ when (dto.construction) {
+ is BaseUnit -> units.add(constructionButton)
+ is Building -> {
+ when {
+ dto.construction.isWonder -> buildableWonders += constructionButton
+ dto.construction.isNationalWonder -> buildableNationalWonders += constructionButton
+ else -> buildableBuildings += constructionButton
+ }
+ }
+ is PerpetualConstruction -> specialConstructions.add(constructionButton)
}
}
- is PerpetualConstruction -> specialConstructions.add(constructionButton)
+
+ availableConstructionsTable.addCategory("Units", units, constructionsQueueTable.width)
+ availableConstructionsTable.addCategory("Wonders", buildableWonders, constructionsQueueTable.width)
+ availableConstructionsTable.addCategory("National Wonders", buildableNationalWonders, constructionsQueueTable.width)
+ availableConstructionsTable.addCategory("Buildings", buildableBuildings, constructionsQueueTable.width)
+ availableConstructionsTable.addCategory("Other", specialConstructions, constructionsQueueTable.width)
+
+
+ availableConstructionsScrollPane.layout()
+ availableConstructionsScrollPane.scrollY = constrScrollY
+ availableConstructionsScrollPane.updateVisualScroll()
+ val usedHeight = showCityInfoTableButton.height + constructionsQueueScrollPane.height + buttons.height + 3f * pad + 10f
+ getCell(availableConstructionsScrollPane).maxHeight(stage.height - usedHeight)
+ pack()
+
+ setPosition(5f, stage.height - 5f, Align.topLeft)
}
}
-
- availableConstructionsTable.addCategory("Units", units, constructionsQueueTable.width)
- availableConstructionsTable.addCategory("Wonders", buildableWonders, constructionsQueueTable.width)
- availableConstructionsTable.addCategory("National Wonders", buildableNationalWonders, constructionsQueueTable.width)
- availableConstructionsTable.addCategory("Buildings", buildableBuildings, constructionsQueueTable.width)
- availableConstructionsTable.addCategory("Other", specialConstructions, constructionsQueueTable.width)
-
-
- availableConstructionsScrollPane.layout()
- availableConstructionsScrollPane.scrollY = constrScrollY
- availableConstructionsScrollPane.updateVisualScroll()
- getCell(availableConstructionsScrollPane).maxHeight(stage.height - usedHeight)
}
private fun getQueueEntry(constructionQueueIndex: Int, name: String): Table {