Start preference Avoid shown with red X (#5253)

This commit is contained in:
SomeTroglodyte 2021-09-18 22:05:14 +02:00 committed by GitHub
parent f02675c5b0
commit 8cff3fda49
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 45 additions and 31 deletions

View File

@ -230,7 +230,8 @@ class Nation : INamed, ICivilopediaText, IHasUniques {
textList += FormattedLine(
(if (it.index == 0) "[Start bias:] " else "") + it.value.tr(), // extra tr because tr cannot nest {[]}
link = "Terrain/$link",
indent = if (it.index == 0) 0 else 1)
indent = if (it.index == 0) 0 else 1,
iconCrossed = it.value.startsWith("Avoid "))
}
textList += FormattedLine()
}

View File

@ -3,6 +3,7 @@ package com.unciv.ui.civilopedia
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.scenes.scene2d.Actor
import com.badlogic.gdx.scenes.scene2d.Group
import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.badlogic.gdx.utils.Align
import com.unciv.UncivGame
@ -64,7 +65,9 @@ class FormattedLine (
/** Decorates text with a star icon - if set, it receives the [color] instead of the text. */
val starred: Boolean = false,
/** Centers the line (and turns off wrap) */
val centered: Boolean = false
val centered: Boolean = false,
/** Paint a red X over the [icon] or [link] image */
val iconCrossed: Boolean = false
) {
// Note: This gets directly deserialized by Json - please keep all attributes meant to be read
// from json in the primary constructor parameters above. Everything else should be a fun(),
@ -305,7 +308,20 @@ class FormattedLine (
val category = CivilopediaCategories.fromLink(parts[0]) ?: return 0
val image = category.getImage?.invoke(parts[1], iconSize) ?: return 0
table.add(image).size(iconSize).padRight(iconPad)
if (iconCrossed) {
val cross = ImageGetter.getRedCross(iconSize * 0.7f, 0.7f)
val group = Group().apply {
isTransform = false
setSize(iconSize, iconSize)
image.center(this)
addActor(image)
cross.center(this)
addActor(cross)
}
table.add(group).size(iconSize).padRight(iconPad)
} else {
table.add(image).size(iconSize).padRight(iconPad)
}
return 1
}

View File

@ -4,7 +4,6 @@ import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.scenes.scene2d.Actor
import com.badlogic.gdx.scenes.scene2d.Group
import com.badlogic.gdx.scenes.scene2d.Touchable
import com.badlogic.gdx.scenes.scene2d.ui.Slider
import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.unciv.Constants
import com.unciv.UncivGame
@ -12,7 +11,6 @@ import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.map.MapUnit
import com.unciv.logic.map.RoadStatus
import com.unciv.logic.map.TileInfo
import com.unciv.logic.map.TileMap
import com.unciv.models.metadata.Player
import com.unciv.models.ruleset.Nation
import com.unciv.models.ruleset.tile.TerrainType
@ -82,7 +80,7 @@ class MapEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(CameraS
val baseTerrainTable = Table().apply { defaults().pad(20f) }
val terrainFeaturesTable = Table().apply { defaults().pad(20f) }
terrainFeaturesTable.add(getHex(getRedCross(50f, 0.6f)).apply {
terrainFeaturesTable.add(getHex(ImageGetter.getRedCross(50f, 0.6f)).apply {
onClick {
tileAction = {
it.terrainFeatures.clear()
@ -91,7 +89,7 @@ class MapEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(CameraS
it.hasBottomLeftRiver = false
it.hasBottomRightRiver = false
}
setCurrentHex(getHex(getRedCross(40f, 0.6f)), "Clear terrain features")
setCurrentHex(getHex(ImageGetter.getRedCross(40f, 0.6f)), "Clear terrain features")
}
}).row()
@ -125,10 +123,10 @@ class MapEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(CameraS
editorPickTable.clear()
val improvementsTable = Table()
improvementsTable.add(getHex(getRedCross(40f, 0.6f)).apply {
improvementsTable.add(getHex(ImageGetter.getRedCross(40f, 0.6f)).apply {
onClick {
tileAction = { it.improvement = null; it.roadStatus = RoadStatus.None }
setCurrentHex(getHex(getRedCross(40f, 0.6f)), "Clear improvements")
setCurrentHex(getHex(ImageGetter.getRedCross(40f, 0.6f)), "Clear improvements")
}
}).row()
@ -269,20 +267,13 @@ class MapEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(CameraS
}
private fun getCrossedIcon(): Actor {
return getRedCross(20f, 0.6f)
return ImageGetter.getRedCross(20f, 0.6f)
.surroundWithCircle(40f, false)
.apply { circle.color = Color.WHITE }
}
private fun getRedCross(size: Float, alpha: Float): Actor {
val redCross = ImageGetter.getImage("OtherIcons/Close")
redCross.setSize(size, size)
redCross.color = Color.RED.cpy().apply { a = alpha }
return redCross
}
private fun getCrossedResource(): Actor {
val redCross = getRedCross(45f, 0.5f)
val redCross = ImageGetter.getRedCross(45f, 0.5f)
val group = IconCircleGroup(40f, redCross, false)
group.circle.color = ImageGetter.foodCircleColor
return group

View File

@ -151,9 +151,7 @@ class ImprovementPickerScreen(val tileInfo: TileInfo, unit: MapUnit, val onAccep
// icon for removing the resource by replacing improvement
if (removeImprovement && tileInfo.hasViewableResource(currentPlayerCiv) && tileInfo.getTileResource().improvement == tileInfo.improvement) {
val crossedResource = Group()
val cross = ImageGetter.getImage("OtherIcons/Close")
cross.setSize(30f, 30f)
cross.color = Color.RED
val cross = ImageGetter.getRedCross(30f, 0.8f)
val resourceIcon = ImageGetter.getResourceImage(tileInfo.resource.toString(), 30f)
crossedResource.addActor(resourceIcon)
crossedResource.addActor(cross)

View File

@ -59,9 +59,7 @@ class TechButton(techName:String, private val techManager: TechManager, isWorldS
for (building in tech.getObsoletedBuildings(techManager.civInfo))
techEnabledIcons.add(ImageGetter.getConstructionImage(building.name).surroundWithCircle(techIconSize).apply {
val closeImage = ImageGetter.getImage("OtherIcons/Close")
closeImage.setSize(techIconSize / 2, techIconSize / 2)
closeImage.color = Color.RED
val closeImage = ImageGetter.getRedCross(techIconSize / 2, 1f)
closeImage.center(this)
addActor(closeImage)
})

View File

@ -5,13 +5,17 @@ import com.badlogic.gdx.scenes.scene2d.Actor
import com.badlogic.gdx.scenes.scene2d.Group
class IconCircleGroup(size: Float, val actor: Actor, resizeActor: Boolean = true, color: Color = Color.WHITE): Group(){
val circle = ImageGetter.getCircle().apply { setSize(size, size); setColor(color) }
val circle = ImageGetter.getCircle().apply {
setSize(size, size)
setColor(color)
}
init {
isTransform=false // performance helper - nothing here is rotated or scaled
isTransform = false // performance helper - nothing here is rotated or scaled
setSize(size, size)
addActor(circle)
if(resizeActor) actor.setSize(size * 0.75f, size * 0.75f)
if (resizeActor) actor.setSize(size * 0.75f, size * 0.75f)
actor.center(this)
addActor(actor)
}
}
}

View File

@ -227,7 +227,7 @@ object ImageGetter {
} else getCircle().apply { color = nation.getOuterColor() }
.surroundWithCircle(size).apply { circle.color = nation.getInnerColor() }
}
fun getRandomNationIndicator(size: Float): IconCircleGroup {
return "?"
.toLabel(Color.WHITE, (size * 5f/8f).toInt())
@ -238,7 +238,7 @@ object ImageGetter {
private fun nationIconExists(nation: String) = imageExists("NationIcons/$nation")
fun getNationIcon(nation: String) = getImage("NationIcons/$nation")
fun wonderImageExists(wonderName: String) = imageExists("WonderImages/$wonderName")
fun getWonderImage(wonderName: String) = getImage("WonderImages/$wonderName")
@ -301,7 +301,7 @@ object ImageGetter {
}
return circle
}
fun religionIconExists(iconName: String) = imageExists("ReligionIcons/$iconName")
fun getReligionImage(iconName: String): Image {
return getImage("ReligionIcons/$iconName")
@ -322,6 +322,12 @@ object ImageGetter {
return drawable.tint(color)
}
fun getRedCross(size: Float, alpha: Float): Actor {
val redCross = getImage("OtherIcons/Close")
redCross.setSize(size, size)
redCross.color = Color.RED.cpy().apply { a = alpha }
return redCross
}
fun getResourceImage(resourceName: String, size: Float): Actor {
val iconGroup = getImage("ResourceIcons/$resourceName").surroundWithCircle(size)