mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-27 13:55:54 -04:00
More performance
- Shoved TextureRegionDrawables into a hashmap for faster searching and more unified access (not everyone has to create a Drawable for the Region now) - getLanguages() now does the minimum amount of work without saving intermediates Unified ImageGetter.getTableBackground() (helper, not performance)
This commit is contained in:
parent
de30382536
commit
23178836cf
@ -42,7 +42,11 @@ class Translations : HashMap<String, TranslationEntry>(){
|
|||||||
|
|
||||||
fun getLanguages(): List<String> {
|
fun getLanguages(): List<String> {
|
||||||
val toReturn = mutableListOf<String>()
|
val toReturn = mutableListOf<String>()
|
||||||
toReturn.addAll(values.flatMap { it.keys }.distinct())
|
|
||||||
|
for(value in values)
|
||||||
|
for(key in keys)
|
||||||
|
if(!toReturn.contains(key)) toReturn.add(key)
|
||||||
|
|
||||||
toReturn.remove("Japanese") // These were for tests but were never actually seriously translated
|
toReturn.remove("Japanese") // These were for tests but were never actually seriously translated
|
||||||
toReturn.remove("Thai")
|
toReturn.remove("Thai")
|
||||||
return toReturn
|
return toReturn
|
||||||
|
@ -404,24 +404,25 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){
|
|||||||
companion object {
|
companion object {
|
||||||
fun getCivGroup(civ: CivilizationInfo, afterCivNameText:String,currentPlayer:CivilizationInfo): Table {
|
fun getCivGroup(civ: CivilizationInfo, afterCivNameText:String,currentPlayer:CivilizationInfo): Table {
|
||||||
val civGroup = Table()
|
val civGroup = Table()
|
||||||
val civGroupBackground = ImageGetter.getDrawable("OtherIcons/civTableBackground")
|
|
||||||
|
|
||||||
var labelText = civ.civName.tr()+afterCivNameText
|
var labelText = civ.civName.tr()+afterCivNameText
|
||||||
var labelColor=Color.WHITE
|
var labelColor=Color.WHITE
|
||||||
|
val backgroundColor:Color
|
||||||
|
|
||||||
if (civ.isDefeated()) {
|
if (civ.isDefeated()) {
|
||||||
civGroup.add(ImageGetter.getImage("OtherIcons/DisbandUnit")).size(30f)
|
civGroup.add(ImageGetter.getImage("OtherIcons/DisbandUnit")).size(30f)
|
||||||
civGroup.background = civGroupBackground.tint(Color.LIGHT_GRAY)
|
backgroundColor = Color.LIGHT_GRAY
|
||||||
labelColor = Color.BLACK
|
labelColor = Color.BLACK
|
||||||
} else if (currentPlayer==civ || UnCivGame.Current.viewEntireMapForDebug || currentPlayer.knows(civ)) {
|
} else if (currentPlayer==civ || UnCivGame.Current.viewEntireMapForDebug || currentPlayer.knows(civ)) {
|
||||||
civGroup.add(ImageGetter.getNationIndicator(civ.nation, 30f))
|
civGroup.add(ImageGetter.getNationIndicator(civ.nation, 30f))
|
||||||
civGroup.background = civGroupBackground.tint(civ.nation.getOuterColor())
|
backgroundColor = civ.nation.getOuterColor()
|
||||||
labelColor = civ.nation.getInnerColor()
|
labelColor = civ.nation.getInnerColor()
|
||||||
} else {
|
} else {
|
||||||
civGroup.background = civGroupBackground.tint(Color.DARK_GRAY)
|
backgroundColor = Color.DARK_GRAY
|
||||||
labelText = "???"
|
labelText = "???"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
civGroup.background = ImageGetter.getTableBackground(backgroundColor)
|
||||||
val label = labelText.toLabel(labelColor)
|
val label = labelText.toLabel(labelColor)
|
||||||
label.setAlignment(Align.center)
|
label.setAlignment(Align.center)
|
||||||
|
|
||||||
|
@ -1,10 +1,15 @@
|
|||||||
package com.unciv.ui.cityscreen
|
package com.unciv.ui.cityscreen
|
||||||
|
|
||||||
import com.badlogic.gdx.graphics.Color
|
import com.badlogic.gdx.graphics.Color
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.*
|
import com.badlogic.gdx.scenes.scene2d.ui.Table
|
||||||
|
import com.badlogic.gdx.scenes.scene2d.ui.TextButton
|
||||||
|
import com.badlogic.gdx.scenes.scene2d.ui.TextField
|
||||||
import com.badlogic.gdx.utils.Align
|
import com.badlogic.gdx.utils.Align
|
||||||
import com.unciv.models.gamebasics.tr
|
import com.unciv.models.gamebasics.tr
|
||||||
import com.unciv.ui.utils.*
|
import com.unciv.ui.utils.CameraStageBaseScreen
|
||||||
|
import com.unciv.ui.utils.ImageGetter
|
||||||
|
import com.unciv.ui.utils.onClick
|
||||||
|
import com.unciv.ui.utils.toLabel
|
||||||
import com.unciv.ui.worldscreen.optionstable.PopupTable
|
import com.unciv.ui.worldscreen.optionstable.PopupTable
|
||||||
|
|
||||||
class CityScreenCityPickerTable(val cityScreen: CityScreen) : Table(){
|
class CityScreenCityPickerTable(val cityScreen: CityScreen) : Table(){
|
||||||
@ -31,12 +36,12 @@ class CityScreenCityPickerTable(val cityScreen: CityScreen) : Table(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(city.isCapital()){
|
if(city.isCapital()){
|
||||||
val starImage = Image(ImageGetter.getDrawable("OtherIcons/Star").tint(Color.LIGHT_GRAY))
|
val starImage = ImageGetter.getImage("OtherIcons/Star").apply { color= Color.LIGHT_GRAY }
|
||||||
cityNameTable.add(starImage).size(20f).padRight(5f)
|
cityNameTable.add(starImage).size(20f).padRight(5f)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(city.isPuppet){
|
if(city.isPuppet){
|
||||||
val starImage = Image(ImageGetter.getDrawable("OtherIcons/Puppet").tint(Color.LIGHT_GRAY))
|
val starImage = ImageGetter.getImage("OtherIcons/Puppet").apply { color= Color.LIGHT_GRAY }
|
||||||
cityNameTable.add(starImage).size(20f).padRight(5f)
|
cityNameTable.add(starImage).size(20f).padRight(5f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ class TechButton(techName:String, val techManager: TechManager, isWorldScreen: B
|
|||||||
init {
|
init {
|
||||||
touchable = Touchable.enabled
|
touchable = Touchable.enabled
|
||||||
defaults().pad(10f)
|
defaults().pad(10f)
|
||||||
background = ImageGetter.getDrawable("OtherIcons/civTableBackground")
|
background = ImageGetter.getTableBackground()
|
||||||
if (ImageGetter.techIconExists(techName))
|
if (ImageGetter.techIconExists(techName))
|
||||||
add(ImageGetter.getTechIconGroup(techName, 60f))
|
add(ImageGetter.getTechIconGroup(techName, 60f))
|
||||||
|
|
||||||
|
@ -47,8 +47,7 @@ class CityButton(val city: CityInfo, internal val tileGroup: WorldTileGroup, ski
|
|||||||
if (tileGroup.tileInfo.airUnits.isEmpty()) return
|
if (tileGroup.tileInfo.airUnits.isEmpty()) return
|
||||||
val secondarycolor = city.civInfo.nation.getInnerColor()
|
val secondarycolor = city.civInfo.nation.getInnerColor()
|
||||||
val airUnitTable = Table().apply { defaults().pad(5f) }
|
val airUnitTable = Table().apply { defaults().pad(5f) }
|
||||||
airUnitTable.background = ImageGetter.getDrawable("OtherIcons/civTableBackground")
|
airUnitTable.background = ImageGetter.getTableBackground(city.civInfo.nation.getOuterColor())
|
||||||
.tint(city.civInfo.nation.getOuterColor())
|
|
||||||
val aircraftImage = ImageGetter.getImage("OtherIcons/Aircraft")
|
val aircraftImage = ImageGetter.getImage("OtherIcons/Aircraft")
|
||||||
aircraftImage.color = secondarycolor
|
aircraftImage.color = secondarycolor
|
||||||
airUnitTable.add(aircraftImage).size(15f)
|
airUnitTable.add(aircraftImage).size(15f)
|
||||||
@ -93,8 +92,7 @@ class CityButton(val city: CityInfo, internal val tileGroup: WorldTileGroup, ski
|
|||||||
val secondaryColor = city.civInfo.nation.getInnerColor()
|
val secondaryColor = city.civInfo.nation.getInnerColor()
|
||||||
val iconTable = Table()
|
val iconTable = Table()
|
||||||
iconTable.touchable=Touchable.enabled
|
iconTable.touchable=Touchable.enabled
|
||||||
iconTable.background = ImageGetter.getDrawable("OtherIcons/civTableBackground")
|
iconTable.background = ImageGetter.getTableBackground(city.civInfo.nation.getOuterColor())
|
||||||
.tint(city.civInfo.nation.getOuterColor())
|
|
||||||
|
|
||||||
if (city.resistanceCounter > 0) {
|
if (city.resistanceCounter > 0) {
|
||||||
val resistanceImage = ImageGetter.getImage("StatIcons/Resistance")
|
val resistanceImage = ImageGetter.getImage("StatIcons/Resistance")
|
||||||
|
@ -24,6 +24,29 @@ object ImageGetter {
|
|||||||
// So, we now use TexturePacker in the DesktopLauncher class to pack all the different images into single images,
|
// So, we now use TexturePacker in the DesktopLauncher class to pack all the different images into single images,
|
||||||
// and the atlas is what tells us what was packed where.
|
// and the atlas is what tells us what was packed where.
|
||||||
var atlas = TextureAtlas("game.atlas")
|
var atlas = TextureAtlas("game.atlas")
|
||||||
|
|
||||||
|
// We then shove all the drawables into a hashmap, because the atlas specifically tells us
|
||||||
|
// that the search on it is inefficient
|
||||||
|
val textureRegionDrawables = HashMap<String,TextureRegionDrawable>()
|
||||||
|
|
||||||
|
init{
|
||||||
|
setTextureRegionDrawables()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setTextureRegionDrawables(){
|
||||||
|
textureRegionDrawables.clear()
|
||||||
|
for(region in atlas.regions){
|
||||||
|
val drawable =TextureRegionDrawable(region)
|
||||||
|
textureRegionDrawables[region.name] = drawable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun refreshAltas() {
|
||||||
|
atlas.dispose() // To avoid OutOfMemory exceptions
|
||||||
|
atlas = TextureAtlas("game.atlas")
|
||||||
|
setTextureRegionDrawables()
|
||||||
|
}
|
||||||
|
|
||||||
fun getWhiteDot() = getImage(whiteDotLocation)
|
fun getWhiteDot() = getImage(whiteDotLocation)
|
||||||
fun getDot(dotColor: Color) = getWhiteDot().apply { color = dotColor}
|
fun getDot(dotColor: Color) = getWhiteDot().apply { color = dotColor}
|
||||||
|
|
||||||
@ -32,29 +55,24 @@ object ImageGetter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun getImage(fileName: String): Image {
|
fun getImage(fileName: String): Image {
|
||||||
return Image(getTextureRegion(fileName))
|
return Image(getDrawable(fileName))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getDrawable(fileName: String): TextureRegionDrawable {
|
private fun getDrawable(fileName: String): TextureRegionDrawable {
|
||||||
val drawable = TextureRegionDrawable(getTextureRegion(fileName))
|
if(textureRegionDrawables.containsKey(fileName)) return textureRegionDrawables[fileName]!!
|
||||||
drawable.minHeight = 0f
|
else return textureRegionDrawables[whiteDotLocation]!!
|
||||||
drawable.minWidth = 0f
|
|
||||||
return drawable
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getTextureRegion(fileName: String): TextureRegion {
|
fun getTableBackground(tintColor: Color?=null): Drawable? {
|
||||||
try {
|
val drawable = getDrawable("OtherIcons/civTableBackground")
|
||||||
val region = atlas.findRegion(fileName)
|
drawable.minHeight=0f
|
||||||
|
drawable.minWidth=0f
|
||||||
if(region==null)
|
if(tintColor==null) return drawable
|
||||||
throw Exception("Could not find $fileName")
|
return drawable.tint(tintColor)
|
||||||
return region
|
|
||||||
} catch (ex: Exception) {
|
|
||||||
return getTextureRegion(whiteDotLocation)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun imageExists(fileName:String) = atlas.findRegion(fileName)!=null
|
|
||||||
|
fun imageExists(fileName:String) = textureRegionDrawables.containsKey(fileName)
|
||||||
fun techIconExists(techName:String) = imageExists("TechIcons/$techName")
|
fun techIconExists(techName:String) = imageExists("TechIcons/$techName")
|
||||||
|
|
||||||
fun getStatIcon(statName: String): Image {
|
fun getStatIcon(statName: String): Image {
|
||||||
@ -153,10 +171,6 @@ object ImageGetter {
|
|||||||
return getDrawable(whiteDotLocation).tint(color)
|
return getDrawable(whiteDotLocation).tint(color)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun refreshAltas() {
|
|
||||||
atlas.dispose() // To avoid OutOfMemory exceptions
|
|
||||||
atlas = TextureAtlas("game.atlas")
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getResourceImage(resourceName: String, size:Float): Actor {
|
fun getResourceImage(resourceName: String, size:Float): Actor {
|
||||||
val iconGroup = getImage("ResourceIcons/$resourceName").surroundWithCircle(size)
|
val iconGroup = getImage("ResourceIcons/$resourceName").surroundWithCircle(size)
|
||||||
|
@ -35,7 +35,7 @@ class NotificationsScroll(internal val worldScreen: WorldScreen) : ScrollPane(nu
|
|||||||
|
|
||||||
listItem.add(ImageGetter.getCircle()
|
listItem.add(ImageGetter.getCircle()
|
||||||
.apply { color=notification.color }).size(10f).pad(5f)
|
.apply { color=notification.color }).size(10f).pad(5f)
|
||||||
listItem.background(ImageGetter.getDrawable("OtherIcons/civTableBackground"))
|
listItem.background = ImageGetter.getTableBackground()
|
||||||
listItem.add(label).pad(5f).padRight(10f)
|
listItem.add(label).pad(5f).padRight(10f)
|
||||||
|
|
||||||
// using a large click area with no gap in between each message item.
|
// using a large click area with no gap in between each message item.
|
||||||
|
@ -260,8 +260,7 @@ class WorldScreen(val viewingCiv:CivilizationInfo) : CameraStageBaseScreen() {
|
|||||||
|
|
||||||
if (viewingCiv.tech.currentTechnology() == null) {
|
if (viewingCiv.tech.currentTechnology() == null) {
|
||||||
val buttonPic = Table()
|
val buttonPic = Table()
|
||||||
buttonPic.background = ImageGetter.getDrawable("OtherIcons/civTableBackground")
|
buttonPic.background = ImageGetter.getTableBackground(colorFromRGB(7, 46, 43))
|
||||||
.tint(colorFromRGB(7, 46, 43))
|
|
||||||
buttonPic.defaults().pad(20f)
|
buttonPic.defaults().pad(20f)
|
||||||
buttonPic.add("{Pick a tech}!".toLabel(Color.WHITE,30))
|
buttonPic.add("{Pick a tech}!".toLabel(Color.WHITE,30))
|
||||||
techButtonHolder.add(buttonPic)
|
techButtonHolder.add(buttonPic)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user