Resolved #3422 - added fast switch between adjacent cities in city screen

This commit is contained in:
Yair Morgenstern 2020-12-19 21:39:30 +02:00
parent eda8b84c2d
commit 9b6dd71d22
2 changed files with 17 additions and 15 deletions

View File

@ -574,6 +574,7 @@ The city will not produce anything. =
Worked by [cityName] = Worked by [cityName] =
Lock = Lock =
Unlock = Unlock =
Move to city =
# Technology UI # Technology UI

View File

@ -10,10 +10,11 @@ import com.unciv.models.translations.tr
import com.unciv.ui.utils.* import com.unciv.ui.utils.*
import kotlin.math.roundToInt import kotlin.math.roundToInt
class CityScreenTileTable(private val cityScreen: CityScreen): Table(){ class CityScreenTileTable(private val cityScreen: CityScreen): Table() {
private val innerTable = Table() private val innerTable = Table()
val city = cityScreen.city val city = cityScreen.city
init{
init {
innerTable.background = ImageGetter.getBackground(ImageGetter.getBlue().lerp(Color.BLACK, 0.5f)) innerTable.background = ImageGetter.getBackground(ImageGetter.getBlue().lerp(Color.BLACK, 0.5f))
add(innerTable).pad(2f).fill() add(innerTable).pad(2f).fill()
background = ImageGetter.getBackground(Color.WHITE) background = ImageGetter.getBackground(Color.WHITE)
@ -21,11 +22,11 @@ class CityScreenTileTable(private val cityScreen: CityScreen): Table(){
fun update(selectedTile: TileInfo?) { fun update(selectedTile: TileInfo?) {
innerTable.clear() innerTable.clear()
if (selectedTile == null){ if (selectedTile == null) {
isVisible=false isVisible = false
return return
} }
isVisible=true isVisible = true
innerTable.clearChildren() innerTable.clearChildren()
val stats = selectedTile.getTileStats(city, city.civInfo) val stats = selectedTile.getTileStats(city, city.civInfo)
@ -35,8 +36,8 @@ class CityScreenTileTable(private val cityScreen: CityScreen): Table(){
innerTable.row() innerTable.row()
innerTable.add(getTileStatsTable(stats)).row() innerTable.add(getTileStatsTable(stats)).row()
if(selectedTile.getOwner()==null && selectedTile.neighbors.any {it.getCity()==city} if (selectedTile.getOwner() == null && selectedTile.neighbors.any { it.getCity() == city }
&& selectedTile in city.tilesInRange){ && selectedTile in city.tilesInRange) {
val goldCostOfTile = city.expansion.getGoldCostOfTile(selectedTile) val goldCostOfTile = city.expansion.getGoldCostOfTile(selectedTile)
val buyTileButton = "Buy for [$goldCostOfTile] gold".toTextButton() val buyTileButton = "Buy for [$goldCostOfTile] gold".toTextButton()
@ -45,7 +46,7 @@ class CityScreenTileTable(private val cityScreen: CityScreen): Table(){
"Would you like to purchase [Tile] for [$goldCostOfTile] gold?".tr() "Would you like to purchase [Tile] for [$goldCostOfTile] gold?".tr()
YesNoPopup(purchasePrompt, { city.expansion.buyTile(selectedTile);UncivGame.Current.setScreen(CityScreen(city)) }, cityScreen).open() YesNoPopup(purchasePrompt, { city.expansion.buyTile(selectedTile);UncivGame.Current.setScreen(CityScreen(city)) }, cityScreen).open()
} }
if((goldCostOfTile>city.civInfo.gold && !city.civInfo.gameInfo.gameParameters.godMode) if (goldCostOfTile > city.civInfo.gold && !city.civInfo.gameInfo.gameParameters.godMode
|| city.isPuppet || city.isPuppet
|| !cityScreen.canChangeState) || !cityScreen.canChangeState)
buyTileButton.disable() buyTileButton.disable()
@ -53,13 +54,11 @@ class CityScreenTileTable(private val cityScreen: CityScreen): Table(){
innerTable.add(buyTileButton).row() innerTable.add(buyTileButton).row()
} }
if(city.civInfo.cities.filterNot { it==city } if (city.civInfo.cities.filterNot { it == city }.any { it.isWorked(selectedTile) })
.any { it.isWorked(selectedTile) }) {
innerTable.add("Worked by [${selectedTile.getWorkingCity()!!.name}]".toLabel()).row() innerTable.add("Worked by [${selectedTile.getWorkingCity()!!.name}]".toLabel()).row()
}
if(city.isWorked(selectedTile)){ if (city.isWorked(selectedTile)) {
if(selectedTile.isLocked()) { if (selectedTile.isLocked()) {
val unlockButton = "Unlock".toTextButton() val unlockButton = "Unlock".toTextButton()
unlockButton.onClick { unlockButton.onClick {
city.lockedTiles.remove(selectedTile.position) city.lockedTiles.remove(selectedTile.position)
@ -68,8 +67,7 @@ class CityScreenTileTable(private val cityScreen: CityScreen): Table(){
} }
if (!cityScreen.canChangeState) unlockButton.disable() if (!cityScreen.canChangeState) unlockButton.disable()
innerTable.add(unlockButton).row() innerTable.add(unlockButton).row()
} } else {
else {
val lockButton = "Lock".toTextButton() val lockButton = "Lock".toTextButton()
lockButton.onClick { lockButton.onClick {
city.lockedTiles.add(selectedTile.position) city.lockedTiles.add(selectedTile.position)
@ -80,6 +78,9 @@ class CityScreenTileTable(private val cityScreen: CityScreen): Table(){
innerTable.add(lockButton).row() innerTable.add(lockButton).row()
} }
} }
if (selectedTile.isCityCenter() && selectedTile.getCity() != city && selectedTile.getCity()!!.civInfo == city.civInfo)
innerTable.add("Move to city".toTextButton().onClick { cityScreen.game.setScreen(CityScreen(selectedTile.getCity()!!)) })
innerTable.pack() innerTable.pack()
pack() pack()
} }