Method getImprovementIcon can Setsize for all icon (#3685)

* Method getImprovementIcon can Setsize for all icon

* categoryButton doesn't change background-color if it's disabled
This commit is contained in:
lishaoxia1985 2021-03-16 03:00:09 +08:00 committed by GitHub
parent dc55d31a58
commit d7214b7a46
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 35 additions and 53 deletions

View File

@ -71,7 +71,7 @@ Not this time. = 这次不行,我只和有诚意的人交易。
Excellent! = 真是荣幸之至!互相尊重、平等互利是建立友好关系的第一步。 Excellent! = 真是荣幸之至!互相尊重、平等互利是建立友好关系的第一步。
How about something else... = 谈判桌上的尔虞我诈才是我的兴趣所在。 How about something else... = 谈判桌上的尔虞我诈才是我的兴趣所在。
A pleasure to meet you. = 很高兴见到你。 A pleasure to meet you. = 很高兴见到你。
Our relationship = 我们的关系 Our relationship = 我们的关系
We have encountered the City-State of [name]! = 我们遇到了城邦[name] We have encountered the City-State of [name]! = 我们遇到了城邦[name]
Declare Friendship ([numberOfTurns] turns) = 宣布相互友善([numberOfTurns]回合) Declare Friendship ([numberOfTurns] turns) = 宣布相互友善([numberOfTurns]回合)
May our nations forever remain united! = 我们两个文明将永远肝胆相照、休戚与共地站在一起! May our nations forever remain united! = 我们两个文明将永远肝胆相照、休戚与共地站在一起!
@ -91,7 +91,7 @@ Competitor = 瑜亮之争
Neutral = 泛泛之交 Neutral = 泛泛之交
Favorable = 惺惺相惜 Favorable = 惺惺相惜
Friend = 秦晋之好 Friend = 秦晋之好
Ally = 同盟 Ally = 同盟
[questName] (+[influenceAmount] influence) = [questName](+[influenceAmount]影响力) [questName] (+[influenceAmount] influence) = [questName](+[influenceAmount]影响力)
[remainingTurns] turns remaining = 剩余[remainingTurns]回合 [remainingTurns] turns remaining = 剩余[remainingTurns]回合
@ -139,7 +139,7 @@ Cultured = 文化型
Maritime = 航海型 Maritime = 航海型
Mercantile = 商业型 Mercantile = 商业型
Militaristic = 军事型 Militaristic = 军事型
Type = 城邦类型 Type = 城邦类型
Friendly = 友善 Friendly = 友善
Hostile = 敌视 Hostile = 敌视
Irrational = 无理 Irrational = 无理
@ -792,8 +792,7 @@ Requires = 需要
Menu = 游戏菜单 Menu = 游戏菜单
Brush Size = 笔刷大小 Brush Size = 笔刷大小
Map saved = 地图已保存 Map saved = 地图已保存
# Requires translation! Change map to fit selected ruleset? = 要更改地图以适配已选规则集吗?
Change map to fit selected ruleset? =
# Civilopedia difficulty levels # Civilopedia difficulty levels
Player settings = 玩家设置 Player settings = 玩家设置

View File

@ -71,7 +71,7 @@ Not this time. = 這次不行,我只和有誠意的人交易。
Excellent! = 真是榮幸之至!互相尊重、平等互利是建立友好關係的第一步。 Excellent! = 真是榮幸之至!互相尊重、平等互利是建立友好關係的第一步。
How about something else... = 談判桌上的爾虞我詐才是我的興趣所在。 How about something else... = 談判桌上的爾虞我詐才是我的興趣所在。
A pleasure to meet you. = 很高興見到你。 A pleasure to meet you. = 很高興見到你。
Our relationship = 我們的關係 Our relationship = 我們的關係
We have encountered the City-State of [name]! = 我們遇到了城邦[name] We have encountered the City-State of [name]! = 我們遇到了城邦[name]
Declare Friendship ([numberOfTurns] turns) = 宣佈相互友善([numberOfTurns]回合) Declare Friendship ([numberOfTurns] turns) = 宣佈相互友善([numberOfTurns]回合)
May our nations forever remain united! = 我們兩個文明將永遠肝膽相照、休戚與共地站在一起! May our nations forever remain united! = 我們兩個文明將永遠肝膽相照、休戚與共地站在一起!
@ -91,7 +91,7 @@ Competitor = 瑜亮之爭
Neutral = 泛泛之交 Neutral = 泛泛之交
Favorable = 惺惺相惜 Favorable = 惺惺相惜
Friend = 秦晉之好 Friend = 秦晉之好
Ally = 同盟 Ally = 同盟
[questName] (+[influenceAmount] influence) = [questName](+[influenceAmount]影響力) [questName] (+[influenceAmount] influence) = [questName](+[influenceAmount]影響力)
[remainingTurns] turns remaining = 還剩[remainingTurns]回合 [remainingTurns] turns remaining = 還剩[remainingTurns]回合
@ -139,7 +139,7 @@ Cultured = 文化型
Maritime = 航海型 Maritime = 航海型
Mercantile = 商業型 Mercantile = 商業型
Militaristic = 軍事型 Militaristic = 軍事型
Type = 城邦類型 Type = 城邦類型
Friendly = 友善 Friendly = 友善
Hostile = 敵視 Hostile = 敵視
Irrational = 無理 Irrational = 無理
@ -792,8 +792,7 @@ Requires = 需要
Menu = 遊戲選單 Menu = 遊戲選單
Brush Size = 筆刷大小 Brush Size = 筆刷大小
Map saved = 地圖已保存 Map saved = 地圖已保存
# Requires translation! Change map to fit selected ruleset? = 要更改地圖以適配已選規則集嗎?
Change map to fit selected ruleset? =
# Civilopedia difficulty levels # Civilopedia difficulty levels
Player settings = 玩家設定 Player settings = 玩家設定

View File

@ -30,19 +30,18 @@ class EmpireOverviewScreen(private var viewingPlayer:CivilizationInfo, defaultPa
private val topTable = Table().apply { defaults().pad(10f) } private val topTable = Table().apply { defaults().pad(10f) }
private val centerTable = Table().apply { defaults().pad(5f) } private val centerTable = Table().apply { defaults().pad(5f) }
val setCategoryActions = HashMap<String, () -> Unit>() private val setCategoryActions = HashMap<String, () -> Unit>()
val categoryButtons = HashMap<String, TextButton>() private val categoryButtons = HashMap<String, TextButton>()
fun addCategory(name:String, table:Table, disabled:Boolean=false) { private fun addCategory(name:String, table:Table, disabled:Boolean=false) {
val button = name.toTextButton() val button = name.toTextButton()
val setCategoryAction = { val setCategoryAction = {
centerTable.clear() centerTable.clear()
centerTable.add(ScrollPane(table).apply { setOverscroll(false, false) }) centerTable.add(ScrollPane(table).apply { setOverscroll(false, false) })
.height(stage.height * 0.8f) .height(stage.height * 0.8f)
centerTable.pack() centerTable.pack()
for ((key, categoryButton) in categoryButtons) for ((key, categoryButton) in categoryButtons.filterNot { it.value.touchable == Touchable.disabled })
if (key == name) categoryButton.color = Color.BLUE categoryButton.color = if (key == name) Color.BLUE else Color.WHITE
else categoryButton.color = Color.WHITE
} }
setCategoryActions[name] = setCategoryAction setCategoryActions[name] = setCategoryAction
categoryButtons[name] = button categoryButtons[name] = button
@ -167,19 +166,10 @@ class EmpireOverviewScreen(private var viewingPlayer:CivilizationInfo, defaultPa
} }
} }
//
// private fun setStats() {
//
// centerTable.clear()
// centerTable.add(ScrollPane())
// centerTable.pack()
// }
private fun getTradesTable(): Table { private fun getTradesTable(): Table {
val tradesTable = Table().apply { defaults().pad(10f) } val tradesTable = Table().apply { defaults().pad(10f) }
val diplomacies = viewingPlayer.diplomacy.values.filter { it.trades.isNotEmpty() } val diplomacies = viewingPlayer.diplomacy.values.filter { it.trades.isNotEmpty() }
.sortedWith(Comparator { d0, d1 -> .sortedWith { d0, d1 ->
val d0offers = d0.trades.first().ourOffers val d0offers = d0.trades.first().ourOffers
val d1offers = d1.trades.first().ourOffers val d1offers = d1.trades.first().ourOffers
val d0max = if (d0offers.isEmpty()) 0 else d0offers.maxBy { it.duration }!!.duration val d0max = if (d0offers.isEmpty()) 0 else d0offers.maxBy { it.duration }!!.duration
@ -189,7 +179,7 @@ class EmpireOverviewScreen(private var viewingPlayer:CivilizationInfo, defaultPa
d0max == d1max -> 0 d0max == d1max -> 0
else -> -1 else -> -1
} }
}) }
for(diplomacy in diplomacies) { for(diplomacy in diplomacies) {
for (trade in diplomacy.trades) for (trade in diplomacy.trades)
tradesTable.add(createTradeTable(trade, diplomacy.otherCiv())).row() tradesTable.add(createTradeTable(trade, diplomacy.otherCiv())).row()

View File

@ -68,9 +68,7 @@ class TechButton(techName:String, private val techManager: TechManager, isWorldS
|| it.uniqueObjects.any { it.placeholderText == "[] once [] is discovered" && it.params[1] == techName } || it.uniqueObjects.any { it.placeholderText == "[] once [] is discovered" && it.params[1] == techName }
} }
.filter { it.uniqueTo == null || it.uniqueTo == civName }) .filter { it.uniqueTo == null || it.uniqueTo == civName })
if (improvement.name.startsWith("Remove")) techEnabledIcons.add(ImageGetter.getImprovementIcon(improvement.name, techIconSize))
techEnabledIcons.add(ImageGetter.getImage("OtherIcons/Stop")).size(techIconSize)
else techEnabledIcons.add(ImageGetter.getImprovementIcon(improvement.name, techIconSize))
for (resource in ruleset.tileResources.values.filter { it.revealedBy == techName }) for (resource in ruleset.tileResources.values.filter { it.revealedBy == techName })

View File

@ -15,13 +15,12 @@ import com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable
import com.badlogic.gdx.utils.Align import com.badlogic.gdx.utils.Align
import com.unciv.Constants import com.unciv.Constants
import com.unciv.logic.civilization.diplomacy.RelationshipLevel
import com.unciv.models.ruleset.Nation import com.unciv.models.ruleset.Nation
import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.Ruleset
import com.unciv.models.ruleset.tile.ResourceType import com.unciv.models.ruleset.tile.ResourceType
import com.unciv.models.stats.Stats import com.unciv.models.stats.Stats
import kotlin.math.max import kotlin.math.atan2
import kotlin.math.min import kotlin.math.sqrt
object ImageGetter { object ImageGetter {
private const val whiteDotLocation = "OtherIcons/whiteDot" private const val whiteDotLocation = "OtherIcons/whiteDot"
@ -36,7 +35,7 @@ object ImageGetter {
// We then shove all the drawables into a hashmap, because the atlas specifically tells us // We then shove all the drawables into a hashmap, because the atlas specifically tells us
// that the search on it is inefficient // that the search on it is inefficient
val textureRegionDrawables = HashMap<String, TextureRegionDrawable>() private val textureRegionDrawables = HashMap<String, TextureRegionDrawable>()
init { init {
reload() reload()
@ -152,8 +151,8 @@ object ImageGetter {
} }
fun getDrawable(fileName: String): TextureRegionDrawable { fun getDrawable(fileName: String): TextureRegionDrawable {
if (textureRegionDrawables.containsKey(fileName)) return textureRegionDrawables[fileName]!! return if (textureRegionDrawables.containsKey(fileName)) textureRegionDrawables[fileName]!!
else return textureRegionDrawables[whiteDotLocation]!! else textureRegionDrawables[whiteDotLocation]!!
} }
fun getRoundedEdgeTableBackground(tintColor: Color? = null): NinePatchDrawable { fun getRoundedEdgeTableBackground(tintColor: Color? = null): NinePatchDrawable {
@ -179,27 +178,25 @@ object ImageGetter {
fun getNationIndicator(nation: Nation, size: Float): IconCircleGroup { fun getNationIndicator(nation: Nation, size: Float): IconCircleGroup {
val civIconName = if (nation.isCityState()) "CityState" else nation.name val civIconName = if (nation.isCityState()) "CityState" else nation.name
if (nationIconExists(civIconName)) { return if (nationIconExists(civIconName)) {
val cityStateIcon = getNationIcon(civIconName) val cityStateIcon = getNationIcon(civIconName)
cityStateIcon.color = nation.getInnerColor() cityStateIcon.color = nation.getInnerColor()
return cityStateIcon.surroundWithCircle(size * 0.9f).apply { circle.color = nation.getOuterColor() } cityStateIcon.surroundWithCircle(size * 0.9f).apply { circle.color = nation.getOuterColor() }
.surroundWithCircle(size, false).apply { circle.color = nation.getInnerColor() } .surroundWithCircle(size, false).apply { circle.color = nation.getInnerColor() }
} else {
return getCircle().apply { color = nation.getOuterColor() }
.surroundWithCircle(size).apply { circle.color = nation.getInnerColor() }
} }
else getCircle().apply { color = nation.getOuterColor() }
.surroundWithCircle(size).apply { circle.color = nation.getInnerColor() }
} }
fun nationIconExists(nation: String) = imageExists("NationIcons/$nation") private fun nationIconExists(nation: String) = imageExists("NationIcons/$nation")
fun getNationIcon(nation: String) = getImage("NationIcons/$nation") fun getNationIcon(nation: String) = getImage("NationIcons/$nation")
val foodCircleColor = colorFromRGB(129, 199, 132) val foodCircleColor = colorFromRGB(129, 199, 132)
val productionCircleColor = Color.BROWN.cpy().lerp(Color.WHITE, 0.5f)!! private val productionCircleColor = Color.BROWN.cpy().lerp(Color.WHITE, 0.5f)
val goldCircleColor = Color.GOLD.cpy().lerp(Color.WHITE, 0.5f)!! private val goldCircleColor = Color.GOLD.cpy().lerp(Color.WHITE, 0.5f)
val cultureCircleColor = Color.PURPLE.cpy().lerp(Color.WHITE, 0.5f)!! private val cultureCircleColor = Color.PURPLE.cpy().lerp(Color.WHITE, 0.5f)
val scienceCircleColor = Color.BLUE.cpy().lerp(Color.WHITE, 0.5f)!! private val scienceCircleColor = Color.BLUE.cpy().lerp(Color.WHITE, 0.5f)
fun getColorFromStats(stats: Stats) = when { private fun getColorFromStats(stats: Stats) = when {
stats.food > 0 -> foodCircleColor stats.food > 0 -> foodCircleColor
stats.production > 0 -> productionCircleColor stats.production > 0 -> productionCircleColor
stats.gold > 0 -> goldCircleColor stats.gold > 0 -> goldCircleColor
@ -211,7 +208,7 @@ object ImageGetter {
fun getImprovementIcon(improvementName: String, size: Float = 20f): Actor { fun getImprovementIcon(improvementName: String, size: Float = 20f): Actor {
if (improvementName.startsWith("Remove") || improvementName == Constants.cancelImprovementOrder) if (improvementName.startsWith("Remove") || improvementName == Constants.cancelImprovementOrder)
return getImage("OtherIcons/Stop") return Table().apply { add(getImage("OtherIcons/Stop")).size(size) }
if (improvementName.startsWith("StartingLocation ")) { if (improvementName.startsWith("StartingLocation ")) {
val nationName = improvementName.removePrefix("StartingLocation ") val nationName = improvementName.removePrefix("StartingLocation ")
val nation = ruleset.nations[nationName]!! val nation = ruleset.nations[nationName]!!
@ -277,8 +274,7 @@ object ImageGetter {
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)
val resource = ruleset.tileResources[resourceName] val resource = ruleset.tileResources[resourceName] ?: return iconGroup // This is the result of a bad modding setup, just give em an empty circle. Their problem.
if (resource == null) return iconGroup // This is the result of a bad modding setup, just give em an empty circle. Their problem.
iconGroup.circle.color = getColorFromStats(resource) iconGroup.circle.color = getColorFromStats(resource)
if (resource.resourceType == ResourceType.Luxury) { if (resource.resourceType == ResourceType.Luxury) {
@ -356,13 +352,13 @@ object ImageGetter {
val line = getWhiteDot() val line = getWhiteDot()
val deltaX = (startX - endX).toDouble() val deltaX = (startX - endX).toDouble()
val deltaY = (startY - endY).toDouble() val deltaY = (startY - endY).toDouble()
line.width = Math.sqrt(deltaX * deltaX + deltaY * deltaY).toFloat() line.width = sqrt(deltaX * deltaX + deltaY * deltaY).toFloat()
line.height = width // the width of the line, is the height of the line.height = width // the width of the line, is the height of the
// B // B
line.setOrigin(Align.center) line.setOrigin(Align.center)
val radiansToDegrees = 180 / Math.PI val radiansToDegrees = 180 / Math.PI
line.rotation = (Math.atan2(deltaY, deltaX) * radiansToDegrees).toFloat() line.rotation = (atan2(deltaY, deltaX) * radiansToDegrees).toFloat()
// C // C
line.x = (startX + endX) / 2 - line.width / 2 line.x = (startX + endX) / 2 - line.width / 2