mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-31 23:29:53 +07:00
Resolved #8350 - unit icons no longer overlap unit action images, improved render time for unit images
This commit is contained in:
@ -1,6 +1,5 @@
|
||||
package com.unciv.ui.cityscreen
|
||||
|
||||
import com.badlogic.gdx.Gdx
|
||||
import com.badlogic.gdx.graphics.Color
|
||||
import com.badlogic.gdx.utils.Align
|
||||
import com.unciv.UncivGame
|
||||
@ -24,7 +23,6 @@ class CityTileGroup(private val city: CityInfo, tileInfo: TileInfo, tileSetStrin
|
||||
icons.addPopulationIcon(ImageGetter.getImage("OtherIcons/Star"))
|
||||
}
|
||||
unitLayerGroup.isVisible = false
|
||||
unitImageLayerGroup.isVisible = false
|
||||
}
|
||||
|
||||
fun update() {
|
||||
|
@ -7,8 +7,9 @@ import com.badlogic.gdx.scenes.scene2d.Group
|
||||
import com.badlogic.gdx.utils.Align
|
||||
import com.unciv.ui.utils.extensions.center
|
||||
|
||||
class IconCircleGroup(size: Float, val actor: Actor, resizeActor: Boolean = true, color: Color = Color.WHITE): Group(){
|
||||
val circle = ImageGetter.getCircle().apply {
|
||||
class IconCircleGroup(size: Float, val actor: Actor, resizeActor: Boolean = true,
|
||||
color: Color = Color.WHITE, circleImage:String = "OtherIcons/Circle"): Group(){
|
||||
val circle = ImageGetter.getImage(circleImage).apply {
|
||||
setSize(size, size)
|
||||
setColor(color)
|
||||
}
|
||||
|
@ -113,7 +113,6 @@ class TileGroupMap<T: TileGroup>(
|
||||
val pixelUnitLayers = ArrayList<ActionlessGroup>()
|
||||
val circleFogCrosshairLayers = ArrayList<ActionlessGroup>()
|
||||
val unitLayers = ArrayList<Group>()
|
||||
val unitImageLayers = ArrayList<ActionlessGroup>()
|
||||
val cityButtonLayers = ArrayList<Group>()
|
||||
|
||||
// Apparently the sortedByDescending is kinda memory-intensive because it needs to sort ALL the tiles
|
||||
@ -127,7 +126,6 @@ class TileGroupMap<T: TileGroup>(
|
||||
pixelUnitLayers.add(group.pixelCivilianUnitGroup.apply { setPosition(group.x,group.y) })
|
||||
circleFogCrosshairLayers.add(group.highlightFogCrosshairLayerGroup.apply { setPosition(group.x,group.y) })
|
||||
unitLayers.add(group.unitLayerGroup.apply { setPosition(group.x,group.y) })
|
||||
unitImageLayers.add(group.unitImageLayerGroup.apply { setPosition(group.x,group.y) })
|
||||
cityButtonLayers.add(group.cityButtonLayerGroup.apply { setPosition(group.x,group.y) })
|
||||
|
||||
if (worldWrap) {
|
||||
@ -140,7 +138,6 @@ class TileGroupMap<T: TileGroup>(
|
||||
pixelUnitLayers.add(mirrorTile.pixelCivilianUnitGroup.apply { setPosition(mirrorTile.x,mirrorTile.y) })
|
||||
circleFogCrosshairLayers.add(mirrorTile.highlightFogCrosshairLayerGroup.apply { setPosition(mirrorTile.x,mirrorTile.y) })
|
||||
unitLayers.add(mirrorTile.unitLayerGroup.apply { setPosition(mirrorTile.x,mirrorTile.y) })
|
||||
unitImageLayers.add(mirrorTile.unitImageLayerGroup.apply { setPosition(mirrorTile.x,mirrorTile.y) })
|
||||
cityButtonLayers.add(mirrorTile.cityButtonLayerGroup.apply { setPosition(mirrorTile.x,mirrorTile.y) })
|
||||
}
|
||||
}
|
||||
@ -159,7 +156,6 @@ class TileGroupMap<T: TileGroup>(
|
||||
}
|
||||
}
|
||||
for (group in unitLayers) addActor(group) // Aaand units above everything else.
|
||||
for (group in unitImageLayers) addActor(group) // This is so the individual textures for the units are rendered together
|
||||
for (group in cityButtonLayers) addActor(group) // city buttons + clickability
|
||||
|
||||
// there are tiles "below the zero",
|
||||
|
@ -113,15 +113,8 @@ open class TileGroup(
|
||||
}
|
||||
}
|
||||
|
||||
class UnitImageLayerGroupClass(groupSize: Float) : ActionlessGroup(groupSize) {
|
||||
override fun draw(batch: Batch?, parentAlpha: Float) = super.draw(batch, parentAlpha)
|
||||
init {
|
||||
touchable = Touchable.disabled
|
||||
}
|
||||
}
|
||||
// We separate the units from the units' backgrounds, because all the background elements are in the same texture, and the units' aren't
|
||||
val unitLayerGroup = UnitLayerGroupClass(groupSize)
|
||||
val unitImageLayerGroup = UnitImageLayerGroupClass(groupSize)
|
||||
|
||||
class CityButtonLayerGroupClass(val tileInfo: TileInfo, groupSize: Float) : Group() {
|
||||
override fun draw(batch: Batch?, parentAlpha: Float) {
|
||||
|
@ -72,11 +72,6 @@ class TileGroupIcons(val tileGroup: TileGroup) {
|
||||
newImage.center(tileGroup)
|
||||
newImage.y += yFromCenter
|
||||
|
||||
// We "steal" the unit image so that all backgrounds are rendered next to each other
|
||||
// to save texture swapping and improve framerate
|
||||
tileGroup.unitImageLayerGroup.addActor(newImage.unitBaseImage)
|
||||
newImage.unitBaseImage.center(tileGroup)
|
||||
newImage.unitBaseImage.y += yFromCenter
|
||||
|
||||
// Display number of carried air units
|
||||
if (unit.getTile().airUnits.any { unit.isTransportTypeOf(it) } && !unit.getTile().isCityCenter()) {
|
||||
|
@ -12,6 +12,8 @@ import com.unciv.ui.images.ImageGetter
|
||||
import com.unciv.ui.utils.extensions.center
|
||||
import com.unciv.ui.utils.extensions.surroundWithCircle
|
||||
|
||||
val unitCircleLocation = "UnitIcons/Circle"
|
||||
|
||||
class UnitGroup(val unit: MapUnit, val size: Float): Group() {
|
||||
var actionGroup :Group? = null
|
||||
val unitBaseImage = ImageGetter.getUnitIcon(unit.name, unit.civInfo.nation.getInnerColor())
|
||||
@ -70,8 +72,8 @@ class UnitGroup(val unit: MapUnit, val size: Float): Group() {
|
||||
|
||||
val actionImage = getActionImage()
|
||||
if (actionImage != null) {
|
||||
val actionCircle = actionImage.surroundWithCircle(size / 2 * 0.9f)
|
||||
.surroundWithCircle(size / 2, false, Color.BLACK)
|
||||
val actionCircle = actionImage.surroundWithCircle(size / 2 * 0.9f, circleImageLocation = unitCircleLocation)
|
||||
.surroundWithCircle(size / 2, false, Color.BLACK, circleImageLocation = unitCircleLocation)
|
||||
actionCircle.setPosition(size / 2, 0f)
|
||||
addActor(actionCircle)
|
||||
actionGroup = actionCircle
|
||||
|
@ -309,7 +309,8 @@ fun Actor.onChange(function: (event: ChangeListener.ChangeEvent?) -> Unit): Acto
|
||||
return this
|
||||
}
|
||||
|
||||
fun Actor.surroundWithCircle(size: Float, resizeActor: Boolean = true, color: Color = Color.WHITE): IconCircleGroup {
|
||||
fun Actor.surroundWithCircle(size: Float, resizeActor: Boolean = true,
|
||||
color: Color = Color.WHITE, circleImageLocation:String = "OtherIcons/Circle"): IconCircleGroup {
|
||||
return IconCircleGroup(size, this, resizeActor, color)
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user