Resolved #3265 - added keyboard shortcuts to tile improvements

This commit is contained in:
Yair Morgenstern
2020-10-17 22:06:50 +03:00
parent 8c5e0d1889
commit a6642cb536
3 changed files with 81 additions and 48 deletions

View File

@ -26,6 +26,7 @@ class TileImprovement : NamedStats() {
var uniqueTo:String? = null
var uniques = ArrayList<String>()
val uniqueObjects:List<Unique> by lazy { uniques.map { Unique(it) } }
val shortcutKey: Char? = null
val turnsToBuild: Int = 0 // This is the base cost.

View File

@ -11,6 +11,7 @@ import com.unciv.UncivGame
import com.unciv.logic.map.RoadStatus
import com.unciv.logic.map.TileInfo
import com.unciv.models.ruleset.tile.TileImprovement
import com.unciv.models.stats.Stats
import com.unciv.models.translations.tr
import com.unciv.ui.utils.*
import kotlin.math.round
@ -56,6 +57,7 @@ class ImprovementPickerScreen(val tileInfo: TileInfo, val onAccept: ()->Unit) :
improvementButtonTable.add(image).size(30f).pad(10f)
var labelText = improvement.name.tr()
if (improvement.shortcutKey != null) labelText += " (${improvement.shortcutKey})"
val turnsToBuild = improvement.getTurnsToBuild(currentPlayerCiv)
if (turnsToBuild > 0) labelText += " - $turnsToBuild${Fonts.turn}"
val provideResource = tileInfo.hasViewableResource(currentPlayerCiv) && tileInfo.getTileResource().improvement == improvement.name
@ -76,7 +78,11 @@ class ImprovementPickerScreen(val tileInfo: TileInfo, val onAccept: ()->Unit) :
val pickNow = "Pick now!".toLabel().onClick { accept(improvement) }
val statIcons = Table()
if (improvement.shortcutKey != null)
keyPressDispatcher[improvement.shortcutKey] = { accept(improvement) }
val statIcons = getStatIconsTable(provideResource, removeImprovement)
// get benefits of the new improvement
val stats = tileInfo.getImprovementStats(improvement, currentPlayerCiv, tileInfo.getCity())
@ -87,43 +93,15 @@ class ImprovementPickerScreen(val tileInfo: TileInfo, val onAccept: ()->Unit) :
stats.add(existingStats.times(-1.0f))
}
// icons of benefits (food, gold, etc) by improvement
val statsTable = Table()
statsTable.defaults()
for (stat in stats.toHashMap()) {
val statValue = round(stat.value).toInt()
if (statValue == 0) continue
statsTable.add(ImageGetter.getStatIcon(stat.key.name)).size(20f).padRight(3f)
val valueLabel = statValue.toString().toLabel()
valueLabel.color = if (statValue < 0) Color.RED else Color.WHITE
statsTable.add(valueLabel).padRight(13f)
}
// icon for adding the resource by improvement
if (provideResource)
statIcons.add(ImageGetter.getResourceImage(tileInfo.resource.toString(), 30f)).pad(3f)
// 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 resourceIcon = ImageGetter.getResourceImage(tileInfo.resource.toString(), 30f)
crossedResource.addActor(resourceIcon)
crossedResource.addActor(cross)
statIcons.add(crossedResource).padTop(30f).padRight(33f)
}
val statsTable = getStatsTable(stats)
statIcons.add(statsTable).padLeft(13f)
regularImprovements.add(statIcons).align(Align.right)
val improvementButton = Button(skin)
improvementButton.add(improvementButtonTable).pad(5f).fillY()
if (improvement.name == tileInfo.improvementInProgress) improvementButton.color= Color.GREEN
if (improvement.name == tileInfo.improvementInProgress) improvementButton.color = Color.GREEN
regularImprovements.add(improvementButton)
regularImprovements.add(pickNow).padLeft(10f)
regularImprovements.row()
@ -131,5 +109,43 @@ class ImprovementPickerScreen(val tileInfo: TileInfo, val onAccept: ()->Unit) :
topTable.add(regularImprovements)
}
private fun getStatIconsTable(provideResource: Boolean, removeImprovement: Boolean): Table {
val statIcons = Table()
// icon for adding the resource by improvement
if (provideResource)
statIcons.add(ImageGetter.getResourceImage(tileInfo.resource.toString(), 30f)).pad(3f)
// 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 resourceIcon = ImageGetter.getResourceImage(tileInfo.resource.toString(), 30f)
crossedResource.addActor(resourceIcon)
crossedResource.addActor(cross)
statIcons.add(crossedResource).padTop(30f).padRight(33f)
}
return statIcons
}
// icons of benefits (food, gold, etc) by improvement
private fun getStatsTable(stats: Stats): Table {
val statsTable = Table()
for (stat in stats.toHashMap()) {
val statValue = round(stat.value).toInt()
if (statValue == 0) continue
statsTable.add(ImageGetter.getStatIcon(stat.key.name)).size(20f).padRight(3f)
val valueLabel = statValue.toString().toLabel()
valueLabel.color = if (statValue < 0) Color.RED else Color.WHITE
statsTable.add(valueLabel).padRight(13f)
}
return statsTable
}
}