From 571000171591beed665a31fdd7240f266afbd6dc Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sun, 23 Sep 2018 10:39:56 +0300 Subject: [PATCH] Added "Buy tile" option to cities --- android/build.gradle | 4 +- .../com/unciv/logic/automation/Automation.kt | 2 +- .../unciv/logic/city/CityExpansionManager.kt | 16 ++++ core/src/com/unciv/logic/map/MapUnit.kt | 8 +- core/src/com/unciv/logic/map/TileInfo.kt | 2 +- core/src/com/unciv/logic/trade/TradeLogic.kt | 3 +- core/src/com/unciv/ui/CivilopediaScreen.kt | 8 +- core/src/com/unciv/ui/EmpireOverviewScreen.kt | 10 +-- core/src/com/unciv/ui/LanguagePickerScreen.kt | 6 +- core/src/com/unciv/ui/LoadScreen.kt | 8 +- core/src/com/unciv/ui/NewGameScreen.kt | 4 +- core/src/com/unciv/ui/SaveScreen.kt | 8 +- core/src/com/unciv/ui/VictoryScreen.kt | 4 +- .../com/unciv/ui/cityscreen/BuildingsTable.kt | 6 +- .../src/com/unciv/ui/cityscreen/CityScreen.kt | 88 +++++++++++-------- .../com/unciv/ui/cityscreen/CityStatsTable.kt | 4 +- .../pickerscreens/ConstructionPickerScreen.kt | 8 +- .../pickerscreens/GreatPersonPickerScreen.kt | 6 +- .../pickerscreens/ImprovementPickerScreen.kt | 6 +- .../unciv/ui/pickerscreens/PickerScreen.kt | 2 +- .../ui/pickerscreens/PolicyPickerScreen.kt | 4 +- .../ui/pickerscreens/PromotionPickerScreen.kt | 4 +- .../ui/pickerscreens/TechPickerScreen.kt | 6 +- .../com/unciv/ui/tilegroups/WorldTileGroup.kt | 2 +- .../src/com/unciv/ui/trade/DiplomacyScreen.kt | 6 +- core/src/com/unciv/ui/trade/OffersList.kt | 4 +- core/src/com/unciv/ui/trade/TradeTable.kt | 4 +- .../unciv/ui/utils/CameraStageBaseScreen.kt | 4 +- core/src/com/unciv/ui/worldscreen/Minimap.kt | 4 +- .../ui/worldscreen/NotificationsScroll.kt | 2 +- .../com/unciv/ui/worldscreen/TileMapHolder.kt | 6 +- .../com/unciv/ui/worldscreen/WorldScreen.kt | 12 +-- .../unciv/ui/worldscreen/WorldScreenTopBar.kt | 4 +- .../ui/worldscreen/bottombar/BattleTable.kt | 2 +- .../ui/worldscreen/optionstable/PopupTable.kt | 6 +- .../ui/worldscreen/unit/IdleUnitButton.kt | 4 +- .../ui/worldscreen/unit/UnitActionsTable.kt | 2 +- .../unciv/ui/worldscreen/unit/UnitTable.kt | 2 +- 38 files changed, 158 insertions(+), 123 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 48a309234f..543a510acf 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -21,8 +21,8 @@ android { applicationId "com.unciv.game" minSdkVersion 14 targetSdkVersion 26 - versionCode 138 - versionName "2.8.6" + versionCode 139 + versionName "2.8.7" } buildTypes { release { diff --git a/core/src/com/unciv/logic/automation/Automation.kt b/core/src/com/unciv/logic/automation/Automation.kt index 11a193836e..bc9e96a28c 100644 --- a/core/src/com/unciv/logic/automation/Automation.kt +++ b/core/src/com/unciv/logic/automation/Automation.kt @@ -70,7 +70,7 @@ class Automation { } } - fun getMinDistanceBetweenCities(civ1:CivilizationInfo,civ2:CivilizationInfo): Float { + fun getMinDistanceBetweenCities(civ1:CivilizationInfo,civ2:CivilizationInfo): Int { return civ1.cities.map { city -> civ2.cities.map { it.getCenterTile().arialDistanceTo(city.getCenterTile()) }.min()!! }.min()!! } diff --git a/core/src/com/unciv/logic/city/CityExpansionManager.kt b/core/src/com/unciv/logic/city/CityExpansionManager.kt index 97dd091ea4..fdbd30e3f8 100644 --- a/core/src/com/unciv/logic/city/CityExpansionManager.kt +++ b/core/src/com/unciv/logic/city/CityExpansionManager.kt @@ -30,6 +30,22 @@ class CityExpansionManager { return Math.round(cultureToNextTile).toInt() } + fun buyTile(tileInfo: TileInfo){ + val goldCost = getGoldCostOfTile(tileInfo) + class NotEnoughGoldToBuyTileException : Exception() + if(cityInfo.civInfo.gold cityInfo.population.buildingsSpecialists[building]!!.add(stat,-1f) //unassign - cityInfo.population.getFreePopulation() == 0 -> return@addClickListener + cityInfo.population.getFreePopulation() == 0 -> return@onClick else -> { if (!cityInfo.population.buildingsSpecialists.containsKey(building)) cityInfo.population.buildingsSpecialists[building] = Stats() diff --git a/core/src/com/unciv/ui/cityscreen/CityScreen.kt b/core/src/com/unciv/ui/cityscreen/CityScreen.kt index f3b4450902..0982fa2095 100644 --- a/core/src/com/unciv/ui/cityscreen/CityScreen.kt +++ b/core/src/com/unciv/ui/cityscreen/CityScreen.kt @@ -102,11 +102,12 @@ class CityScreen(internal val city: CityInfo) : CameraStageBaseScreen() { private fun updateTileGroups() { val nextTile = city.expansion.chooseNewTileToOwn() - for (HG in tileGroups) { - HG.update() - if(HG.tileInfo == nextTile){ - HG.showCircle(Color.PURPLE) - HG.setColor(0f,0f,0f,0.7f) + for (tileGroup in tileGroups) { + + tileGroup.update() + if(tileGroup.tileInfo == nextTile){ + tileGroup.showCircle(Color.PURPLE) + tileGroup.setColor(0f,0f,0f,0.7f) } } @@ -119,7 +120,7 @@ class CityScreen(internal val city: CityInfo) : CameraStageBaseScreen() { val civInfo = city.civInfo if (civInfo.cities.size > 1) { val prevCityButton = TextButton("<", CameraStageBaseScreen.skin) - prevCityButton.addClickListener { + prevCityButton.onClick { val indexOfCity = civInfo.cities.indexOf(city) val indexOfNextCity = if (indexOfCity == 0) civInfo.cities.size - 1 else indexOfCity - 1 game.screen = CityScreen(civInfo.cities[indexOfNextCity]) @@ -145,7 +146,7 @@ class CityScreen(internal val city: CityInfo) : CameraStageBaseScreen() { if (civInfo.cities.size > 1) { val nextCityButton = TextButton(">", CameraStageBaseScreen.skin) - nextCityButton.addClickListener { + nextCityButton.onClick { val indexOfCity = civInfo.cities.indexOf(city) val indexOfNextCity = if (indexOfCity == civInfo.cities.size - 1) 0 else indexOfCity + 1 game.screen = CityScreen(civInfo.cities[indexOfNextCity]) @@ -157,12 +158,12 @@ class CityScreen(internal val city: CityInfo) : CameraStageBaseScreen() { if(!city.isBeingRazed) { val razeCityButton = TextButton("Raze city".tr(), skin) - razeCityButton.addClickListener { city.isBeingRazed=true; update() } + razeCityButton.onClick { city.isBeingRazed=true; update() } cityPickerTable.add(razeCityButton).colspan(cityPickerTable.columns) } else{ val stopRazingCityButton = TextButton("Stop razing city".tr(), skin) - stopRazingCityButton.addClickListener { city.isBeingRazed=false; update() } + stopRazingCityButton.onClick { city.isBeingRazed=false; update() } cityPickerTable.add(stopRazingCityButton).colspan(cityPickerTable.columns) } @@ -173,7 +174,7 @@ class CityScreen(internal val city: CityInfo) : CameraStageBaseScreen() { private fun updateGoToWorldButton() { goToWorldButton.clearListeners() - goToWorldButton.addClickListener { + goToWorldButton.onClick { game.setWorldScreen() game.worldScreen.tileMapHolder.setCenterPosition(city.location) dispose() @@ -191,36 +192,38 @@ class CityScreen(internal val city: CityInfo) : CameraStageBaseScreen() { for (tileInfo in cityInfo.getCenterTile().getTilesInDistance(5)) { if (!city.civInfo.exploredTiles.contains(tileInfo.position)) continue // Don't even bother to display it. - val group = CityTileGroup(cityInfo, tileInfo) - group.addClickListener { + val tileGroup = CityTileGroup(cityInfo, tileInfo) + val tilesInRange = city.getTilesInRange() + + // this needs to happen on pdate, because we can buy tiles, which changes the definition of the bought tiles... + if (tileInfo.getCity()!=city) { // outside of city + tileGroup.setColor(0f, 0f, 0f, 0.3f) + tileGroup.yieldGroup.isVisible = false + } else if(tileInfo !in tilesInRange){ // within city but not close enough to be workable + tileGroup.yieldGroup.isVisible = false + } + else if (!tileInfo.isCityCenter() && tileGroup.populationImage==null) { // workable + tileGroup.addPopulationIcon() + tileGroup.populationImage!!.onClick { + if (!tileInfo.isWorked() && city.population.getFreePopulation() > 0) + city.workedTiles.add(tileInfo.position) + else if (tileInfo.isWorked()) city.workedTiles.remove(tileInfo.position) + city.cityStats.update() + update() + } + } + tileGroup.onClick { selectedTile = tileInfo update() } - val tilesInRange = city.getTilesInRange() - if (tileInfo.getCity()!=city) { // outside of city - group.setColor(0f, 0f, 0f, 0.3f) - group.yieldGroup.isVisible = false - } else if(tileInfo !in tilesInRange){ // within city but not close enough to be workable - group.yieldGroup.isVisible = false - } - else if (!tileInfo.isCityCenter()) { // workable - group.addPopulationIcon() - group.populationImage!!.addClickListener { - if (!tileInfo.isWorked() && cityInfo.population.getFreePopulation() > 0) - cityInfo.workedTiles.add(tileInfo.position) - else if (tileInfo.isWorked()) cityInfo.workedTiles.remove(tileInfo.position) - cityInfo.cityStats.update() - update() - } - } val positionalVector = HexMath().Hex2WorldCoords(tileInfo.position.cpy().sub(cityInfo.location)) val groupSize = 50 - group.setPosition(stage.width / 2 + positionalVector.x * 0.8f * groupSize.toFloat(), + tileGroup.setPosition(stage.width / 2 + positionalVector.x * 0.8f * groupSize.toFloat(), stage.height / 2 + positionalVector.y * 0.8f * groupSize.toFloat()) - tileGroups.add(group) - allTiles.addActor(group) + tileGroups.add(tileGroup) + allTiles.addActor(tileGroup) } val scrollPane = ScrollPane(allTiles) @@ -251,19 +254,30 @@ class CityScreen(internal val city: CityInfo) : CameraStageBaseScreen() { private fun updateTileTable() { if (selectedTile == null) return + val tile = selectedTile!! tileTable.clearChildren() - val stats = selectedTile!!.getTileStats(city, city.civInfo) + val stats = tile.getTileStats(city, city.civInfo) tileTable.pad(20f) tileTable.columnDefaults(0).padRight(10f) - tileTable.add(Label(selectedTile!!.toString(), CameraStageBaseScreen.skin)).colspan(2) + tileTable.add(Label(tile.toString(), CameraStageBaseScreen.skin)).colspan(2) tileTable.row() + val statsTable = Table() for (entry in stats.toHashMap().filterNot { it.value==0f }) { - tileTable.add(ImageGetter.getStatIcon(entry.key.toString())).size(20f).align(Align.right) - tileTable.add(Label(Math.round(entry.value).toString() + "", CameraStageBaseScreen.skin)).align(Align.left) - tileTable.row() + statsTable.add(ImageGetter.getStatIcon(entry.key.toString())).size(20f).align(Align.right) + statsTable.add(Label(Math.round(entry.value).toString() + "", CameraStageBaseScreen.skin)).align(Align.left) + statsTable.row() + } + tileTable.add(statsTable).row() + + if(tile.getOwner()==null && tile.neighbors.any{it.getCity()==city}){ + val goldCostOfTile = city.expansion.getGoldCostOfTile(tile) + val buyTileButton = TextButton("Buy for [$goldCostOfTile] gold".tr(),skin) + buyTileButton.onClick { city.expansion.buyTile(tile); game.screen = CityScreen(city); dispose() } + if(goldCostOfTile>city.civInfo.gold) buyTileButton.disable() + tileTable.add(buyTileButton) } tileTable.pack() diff --git a/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt b/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt index 2b9d21c501..50130afc0a 100644 --- a/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt +++ b/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt @@ -51,7 +51,7 @@ class CityStatsTable(val cityScreen: CityScreen) : Table(){ buildingPickButton.add(ImageGetter.getConstructionImage(city.cityConstructions.currentConstruction)) .size(40f).padRight(5f) buildingPickButton.add(Label(buildingText , CameraStageBaseScreen.skin).setFontColor(Color.WHITE)) - buildingPickButton.addClickListener { + buildingPickButton.onClick { UnCivGame.Current.screen = ConstructionPickerScreen(city) cityScreen.dispose() } @@ -68,7 +68,7 @@ class CityStatsTable(val cityScreen: CityScreen) : Table(){ row() val buildingGoldCost = construction.getGoldCost(city.civInfo.policies.getAdoptedPolicies()) val buildingBuyButton = TextButton("Buy for [$buildingGoldCost] gold".tr(), CameraStageBaseScreen.skin) - buildingBuyButton.addClickListener { + buildingBuyButton.onClick { city.cityConstructions.purchaseBuilding(city.cityConstructions.currentConstruction) update() } diff --git a/core/src/com/unciv/ui/pickerscreens/ConstructionPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/ConstructionPickerScreen.kt index cb9ba59716..118b08785f 100644 --- a/core/src/com/unciv/ui/pickerscreens/ConstructionPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/ConstructionPickerScreen.kt @@ -9,7 +9,7 @@ import com.unciv.logic.city.SpecialConstruction import com.unciv.models.gamebasics.GameBasics import com.unciv.ui.cityscreen.CityScreen import com.unciv.ui.utils.ImageGetter -import com.unciv.ui.utils.addClickListener +import com.unciv.ui.utils.onClick import com.unciv.ui.utils.setFontColor import com.unciv.ui.utils.tr @@ -21,7 +21,7 @@ class ConstructionPickerScreen(val city: CityInfo) : PickerScreen() { val productionTextButton = Button(skin) productionTextButton.add(ImageGetter.getConstructionImage(production)).size(40f).padRight(5f) productionTextButton.add(Label(buttonText,skin).setFontColor(Color.WHITE)) - productionTextButton.addClickListener { + productionTextButton.onClick { selectedProduction = production pick(rightSideButtonText) descriptionLabel.setText(description) @@ -34,7 +34,7 @@ class ConstructionPickerScreen(val city: CityInfo) : PickerScreen() { val civInfo = game.gameInfo.getPlayerCivilization() closeButton.clearListeners() // Don't go back to the world screen, unlike the other picker screens! - closeButton.addClickListener { + closeButton.onClick { game.screen = CityScreen(this@ConstructionPickerScreen.city) dispose() } @@ -44,7 +44,7 @@ class ConstructionPickerScreen(val city: CityInfo) : PickerScreen() { } rightSideButton.setText("Pick construction".tr()) - rightSideButton.addClickListener { + rightSideButton.onClick { city.cityConstructions.currentConstruction = selectedProduction!! city.cityStats.update() // Because maybe we set/removed the science or gold production options. game.screen = CityScreen(this@ConstructionPickerScreen.city) diff --git a/core/src/com/unciv/ui/pickerscreens/GreatPersonPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/GreatPersonPickerScreen.kt index ee7c827bdc..88efb609af 100644 --- a/core/src/com/unciv/ui/pickerscreens/GreatPersonPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/GreatPersonPickerScreen.kt @@ -7,7 +7,7 @@ import com.unciv.UnCivGame import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.unit.BaseUnit import com.unciv.ui.utils.ImageGetter -import com.unciv.ui.utils.addClickListener +import com.unciv.ui.utils.onClick import com.unciv.ui.utils.setFontColor class GreatPersonPickerScreen : PickerScreen() { @@ -22,7 +22,7 @@ class GreatPersonPickerScreen : PickerScreen() { button.add(ImageGetter.getUnitIcon(unit.name)).size(30f).pad(10f) button.add(Label(unit.name, skin).setFontColor(Color.WHITE)).pad(10f) button.pack() - button.addClickListener { + button.onClick { theChosenOne = unit pick("Get " +unit.name) descriptionLabel.setText(unit.baseDescription) @@ -30,7 +30,7 @@ class GreatPersonPickerScreen : PickerScreen() { topTable.add(button).pad(10f) } - rightSideButton.addClickListener { + rightSideButton.onClick { val civInfo = UnCivGame.Current.gameInfo.getPlayerCivilization() civInfo.placeUnitNearTile(civInfo.cities[0].location, theChosenOne!!.name) civInfo.greatPeople.freeGreatPeople-- diff --git a/core/src/com/unciv/ui/pickerscreens/ImprovementPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/ImprovementPickerScreen.kt index ab13753c82..880f012aec 100644 --- a/core/src/com/unciv/ui/pickerscreens/ImprovementPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/ImprovementPickerScreen.kt @@ -8,7 +8,7 @@ import com.unciv.logic.map.TileInfo import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.tile.TileImprovement import com.unciv.ui.utils.ImageGetter -import com.unciv.ui.utils.addClickListener +import com.unciv.ui.utils.onClick import com.unciv.ui.utils.setFontColor import com.unciv.ui.utils.tr @@ -19,7 +19,7 @@ class ImprovementPickerScreen(tileInfo: TileInfo) : PickerScreen() { val civInfo = game.gameInfo.getPlayerCivilization() rightSideButton.setText("Pick improvement") - rightSideButton.addClickListener { + rightSideButton.onClick { tileInfo.startWorkingOnImprovement(selectedImprovement!!, civInfo) game.setWorldScreen() dispose() @@ -39,7 +39,7 @@ class ImprovementPickerScreen(tileInfo: TileInfo) : PickerScreen() { improvementButton.add(Label(improvement.name + " - " + improvement.getTurnsToBuild(civInfo) + " {turns}".tr(),skin) .setFontColor(Color.WHITE)).pad(10f) - improvementButton.addClickListener { + improvementButton.onClick { selectedImprovement = improvement pick(improvement.name) descriptionLabel.setText(improvement.description) diff --git a/core/src/com/unciv/ui/pickerscreens/PickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/PickerScreen.kt index d6db3e3e83..697e09f6e5 100644 --- a/core/src/com/unciv/ui/pickerscreens/PickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/PickerScreen.kt @@ -16,7 +16,7 @@ open class PickerScreen : CameraStageBaseScreen() { internal var splitPane: SplitPane init { - closeButton.addClickListener { + closeButton.onClick { game.setWorldScreen() dispose() } diff --git a/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt index 0ebc0a0e15..8a4c44fd43 100644 --- a/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt @@ -27,7 +27,7 @@ class PolicyPickerScreen(internal val civInfo: CivilizationInfo) : PickerScreen( } else onBackButtonClicked { UnCivGame.Current.setWorldScreen(); dispose() } - rightSideButton.addClickListener { + rightSideButton.onClick { civInfo.policies.adopt(pickedPolicy!!) // If we've moved to another screen in the meantime (great person pick, victory screen) ignore this @@ -106,7 +106,7 @@ class PolicyPickerScreen(internal val civInfo: CivilizationInfo) : PickerScreen( { policyButton.color = Color.GRAY } - policyButton.addClickListener { pickPolicy(policy) } + policyButton.onClick { pickPolicy(policy) } policyButton.pack() return policyButton } diff --git a/core/src/com/unciv/ui/pickerscreens/PromotionPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/PromotionPickerScreen.kt index 5e413fcb7e..93cee8da91 100644 --- a/core/src/com/unciv/ui/pickerscreens/PromotionPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/PromotionPickerScreen.kt @@ -17,7 +17,7 @@ class PromotionPickerScreen(mapUnit: MapUnit) : PickerScreen() { init { onBackButtonClicked { UnCivGame.Current.setWorldScreen(); dispose() } rightSideButton.setText("Pick promotion") - rightSideButton.addClickListener { + rightSideButton.onClick { mapUnit.promotions.addPromotion(selectedPromotion!!.name) if(mapUnit.promotions.canBePromoted()) game.screen = PromotionPickerScreen(mapUnit) else game.setWorldScreen() @@ -40,7 +40,7 @@ class PromotionPickerScreen(mapUnit: MapUnit) : PickerScreen() { .setFontColor(Color.WHITE)).pad(10f) if(unitHasPromotion) promotionButton.color = Color.GREEN - promotionButton.addClickListener { + promotionButton.onClick { selectedPromotion = promotion rightSideButton.setText(promotion.name) if(isPromotionAvailable && !unitHasPromotion) rightSideButton.enable() diff --git a/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt index 0a4ae045b0..5f0abf9392 100644 --- a/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt @@ -9,7 +9,7 @@ import com.unciv.logic.civilization.TechManager import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.tech.Technology import com.unciv.ui.utils.CameraStageBaseScreen -import com.unciv.ui.utils.addClickListener +import com.unciv.ui.utils.onClick import com.unciv.ui.utils.disable import com.unciv.ui.utils.tr import java.util.* @@ -59,7 +59,7 @@ class TechPickerScreen(internal val civInfo: CivilizationInfo) : PickerScreen() else { val TB = TextButton("", CameraStageBaseScreen.skin) techNameToButton[tech.name] = TB - TB.addClickListener { + TB.onClick { selectTechnology(tech) } topTable.add(TB) @@ -71,7 +71,7 @@ class TechPickerScreen(internal val civInfo: CivilizationInfo) : PickerScreen() setButtonsInfo() rightSideButton.setText("Pick a tech".tr()) - rightSideButton.addClickListener { + rightSideButton.onClick { if (isFreeTechPick) { civTech.techsResearched.add(selectedTech!!.name) civTech.freeTechs -= 1 diff --git a/core/src/com/unciv/ui/tilegroups/WorldTileGroup.kt b/core/src/com/unciv/ui/tilegroups/WorldTileGroup.kt index 5e66ad6b67..c2cc8c00fd 100644 --- a/core/src/com/unciv/ui/tilegroups/WorldTileGroup.kt +++ b/core/src/com/unciv/ui/tilegroups/WorldTileGroup.kt @@ -88,7 +88,7 @@ class WorldTileGroup(tileInfo: TileInfo) : TileGroup(tileInfo) { val label = Label(cityButtonText, CameraStageBaseScreen.skin) label.setFontColor(city.civInfo.getNation().getSecondaryColor()) if (city.civInfo.isPlayerCivilization()) - label.addClickListener { + label.onClick { UnCivGame.Current.screen = CityScreen(city) } diff --git a/core/src/com/unciv/ui/trade/DiplomacyScreen.kt b/core/src/com/unciv/ui/trade/DiplomacyScreen.kt index 1682b36afc..5e2362d68f 100644 --- a/core/src/com/unciv/ui/trade/DiplomacyScreen.kt +++ b/core/src/com/unciv/ui/trade/DiplomacyScreen.kt @@ -22,7 +22,7 @@ class DiplomacyScreen():CameraStageBaseScreen(){ val closeButton = TextButton("Close".tr(), skin) - closeButton.addClickListener { UnCivGame.Current.setWorldScreen() } + closeButton.onClick { UnCivGame.Current.setWorldScreen() } closeButton.y = stage.height - closeButton.height - 10 closeButton.x = 10f stage.addActor(closeButton) // This must come after the split pane so it will be above, that the button will be clickable @@ -44,7 +44,7 @@ class DiplomacyScreen():CameraStageBaseScreen(){ .apply { setFont(22); setFontColor(civ.getNation().getSecondaryColor()) }).row() val tradeButton = TextButton("Trade".tr(), skin) - tradeButton.addClickListener { + tradeButton.onClick { rightSideTable.clear() rightSideTable.add(TradeTable(civ, stage){updateLeftSideTable()}) } @@ -58,7 +58,7 @@ class DiplomacyScreen():CameraStageBaseScreen(){ declareWarButton.disable() declareWarButton.setText(declareWarButton.text.toString() + " ($turnsToPeaceTreaty)") } - declareWarButton.addClickListener { + declareWarButton.onClick { civDiplomacy.declareWar() updateLeftSideTable() } diff --git a/core/src/com/unciv/ui/trade/OffersList.kt b/core/src/com/unciv/ui/trade/OffersList.kt index ca15328eb6..634385a078 100644 --- a/core/src/com/unciv/ui/trade/OffersList.kt +++ b/core/src/com/unciv/ui/trade/OffersList.kt @@ -6,7 +6,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.unciv.logic.trade.TradeOffersList import com.unciv.logic.trade.TradeType import com.unciv.ui.utils.CameraStageBaseScreen -import com.unciv.ui.utils.addClickListener +import com.unciv.ui.utils.onClick import com.unciv.ui.utils.disable import com.unciv.ui.utils.tr import kotlin.math.min @@ -31,7 +31,7 @@ class OffersList(val offers: TradeOffersList, val correspondingOffers: TradeOffe if(offer.type== TradeType.Gold) 50 else 1 if(offer.amount>0) - tb.addClickListener { + tb.onClick { val amountTransferred = min(amountPerClick, offer.amount) offers += offer.copy(amount = -amountTransferred) correspondingOffers += offer.copy(amount = amountTransferred) diff --git a/core/src/com/unciv/ui/trade/TradeTable.kt b/core/src/com/unciv/ui/trade/TradeTable.kt index 74f4f20260..41fd339e86 100644 --- a/core/src/com/unciv/ui/trade/TradeTable.kt +++ b/core/src/com/unciv/ui/trade/TradeTable.kt @@ -8,7 +8,7 @@ import com.unciv.UnCivGame import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.trade.TradeLogic import com.unciv.ui.utils.CameraStageBaseScreen -import com.unciv.ui.utils.addClickListener +import com.unciv.ui.utils.onClick import com.unciv.ui.utils.tr class TradeTable(val otherCivilization: CivilizationInfo, stage: Stage, onTradeComplete: () -> Unit): Table(CameraStageBaseScreen.skin){ @@ -27,7 +27,7 @@ class TradeTable(val otherCivilization: CivilizationInfo, stage: Stage, onTradeC lowerTable.add(tradeText).colspan(2).row() - offerButton.addClickListener { + offerButton.onClick { if(offerButton.text.toString() == "Offer trade".tr()) { if(tradeLogic.currentTrade.theirOffers.size==0 && tradeLogic.currentTrade.ourOffers.size==0){ tradeText.setText("There's nothing on the table.".tr()) diff --git a/core/src/com/unciv/ui/utils/CameraStageBaseScreen.kt b/core/src/com/unciv/ui/utils/CameraStageBaseScreen.kt index 6cb561e69d..2f2f847cee 100644 --- a/core/src/com/unciv/ui/utils/CameraStageBaseScreen.kt +++ b/core/src/com/unciv/ui/utils/CameraStageBaseScreen.kt @@ -99,7 +99,7 @@ open class CameraStageBaseScreen : Screen { tutorialTexts.removeAt(0) tutorialTable.add(label).pad(10f).row() val button = TextButton("Close".tr(), skin) - button.addClickListener { + button.onClick { tutorialTable.remove() if (!tutorialTexts.isEmpty()) displayTutorial() @@ -238,7 +238,7 @@ fun Label.setFont(size:Int): Label { return this // for chaining } -fun Actor.addClickListener(function: () -> Unit) { +fun Actor.onClick(function: () -> Unit) { this.addListener(object : ClickListener() { override fun clicked(event: InputEvent?, x: Float, y: Float) { function() diff --git a/core/src/com/unciv/ui/worldscreen/Minimap.kt b/core/src/com/unciv/ui/worldscreen/Minimap.kt index 5de27753fd..db75314f36 100644 --- a/core/src/com/unciv/ui/worldscreen/Minimap.kt +++ b/core/src/com/unciv/ui/worldscreen/Minimap.kt @@ -11,7 +11,7 @@ import com.unciv.logic.HexMath import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.map.TileInfo import com.unciv.ui.utils.ImageGetter -import com.unciv.ui.utils.addClickListener +import com.unciv.ui.utils.onClick class Minimap(val tileMapHolder: TileMapHolder) : ScrollPane(null){ val allTiles = Group() @@ -37,7 +37,7 @@ class Minimap(val tileMapHolder: TileMapHolder) : ScrollPane(null){ hex.setSize(groupSize,groupSize) hex.setPosition(positionalVector.x * 0.5f * groupSize, positionalVector.y * 0.5f * groupSize) - hex.addClickListener { + hex.onClick { tileMapHolder.setCenterPosition(tileInfo.position) setScrollToTileMapHolder() } diff --git a/core/src/com/unciv/ui/worldscreen/NotificationsScroll.kt b/core/src/com/unciv/ui/worldscreen/NotificationsScroll.kt index 00e735dc24..11a0dda313 100644 --- a/core/src/com/unciv/ui/worldscreen/NotificationsScroll.kt +++ b/core/src/com/unciv/ui/worldscreen/NotificationsScroll.kt @@ -28,7 +28,7 @@ class NotificationsScroll(internal val worldScreen: WorldScreen) : ScrollPane(nu minitable.add(label).pad(3f).padRight(10f) if (notification.location != null) { - minitable.addClickListener { + minitable.onClick { worldScreen.tileMapHolder.setCenterPosition(notification.location!!) } } diff --git a/core/src/com/unciv/ui/worldscreen/TileMapHolder.kt b/core/src/com/unciv/ui/worldscreen/TileMapHolder.kt index 619d40017c..1c67c482f3 100644 --- a/core/src/com/unciv/ui/worldscreen/TileMapHolder.kt +++ b/core/src/com/unciv/ui/worldscreen/TileMapHolder.kt @@ -15,7 +15,7 @@ import com.unciv.logic.map.TileInfo import com.unciv.logic.map.TileMap import com.unciv.models.gamebasics.unit.UnitType import com.unciv.ui.tilegroups.WorldTileGroup -import com.unciv.ui.utils.addClickListener +import com.unciv.ui.utils.onClick import com.unciv.ui.utils.center import com.unciv.ui.utils.colorFromRGB @@ -37,7 +37,7 @@ class TileMapHolder(internal val worldScreen: WorldScreen, internal val tileMap: for (tileInfo in tileMap.values) { val group = WorldTileGroup(tileInfo) - group.addClickListener { + group.onClick { worldScreen.displayTutorials("TileClicked") if(overlayActor!=null) overlayActor!!.remove() selectedTile = tileInfo @@ -50,7 +50,7 @@ class TileMapHolder(internal val worldScreen: WorldScreen, internal val tileMap: // moveHereGroup.addActor(ImageGetter.getImage("OtherIcons/Circle").apply { width = size; height = size }) // moveHereGroup.addActor(ImageGetter.getStatIcon("Movement").apply { width = size / 2; height = size / 2; center(moveHereGroup) }) // if(selectedUnit.currentMovement>0) -// moveHereGroup.addClickListener { selectedUnit.movementAlgs().headTowards(tileInfo);worldScreen.update() } +// moveHereGroup.onClick { selectedUnit.movementAlgs().headTowards(tileInfo);worldScreen.update() } // else moveHereGroup.color.a=0.5f // addAboveGroup(group, moveHereGroup).apply { width = size; height = size } // } diff --git a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt index e0504ecebc..92f43f83cc 100644 --- a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt +++ b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt @@ -49,7 +49,7 @@ class WorldScreen : CameraStageBaseScreen() { tileMapHolder.addTiles() - techButton.addClickListener { + techButton.onClick { game.screen = TechPickerScreen(civInfo) } @@ -144,7 +144,7 @@ class WorldScreen : CameraStageBaseScreen() { .any()) { displayTutorials("OtherCivEncountered") val btn = TextButton("Diplomacy".tr(), skin) - btn.addClickListener { UnCivGame.Current.screen = DiplomacyScreen() } + btn.onClick { UnCivGame.Current.screen = DiplomacyScreen() } diplomacyButtonWrapper.add(btn) } diplomacyButtonWrapper.pack() @@ -166,18 +166,18 @@ class WorldScreen : CameraStageBaseScreen() { private fun createNextTurnButton(): TextButton { val nextTurnButton = TextButton("Next turn".tr(), CameraStageBaseScreen.skin) - nextTurnButton.addClickListener { + nextTurnButton.onClick { if (civInfo.tech.freeTechs != 0) { game.screen = TechPickerScreen(true, civInfo) - return@addClickListener + return@onClick } else if (civInfo.policies.shouldOpenPolicyPicker) { game.screen = PolicyPickerScreen(civInfo) civInfo.policies.shouldOpenPolicyPicker = false - return@addClickListener + return@onClick } else if (civInfo.tech.currentTechnology() == null && civInfo.cities.isNotEmpty()) { game.screen = TechPickerScreen(civInfo) - return@addClickListener + return@onClick } bottomBar.unitTable.currentlyExecutingAction = null diff --git a/core/src/com/unciv/ui/worldscreen/WorldScreenTopBar.kt b/core/src/com/unciv/ui/worldscreen/WorldScreenTopBar.kt index 1640489791..b6e0367dda 100644 --- a/core/src/com/unciv/ui/worldscreen/WorldScreenTopBar.kt +++ b/core/src/com/unciv/ui/worldscreen/WorldScreenTopBar.kt @@ -47,7 +47,7 @@ class WorldScreenTopBar(val screen: WorldScreen) : Table() { addActor(getMenuButton()) // needs to be after pack val button = TextButton("Overview".tr(),CameraStageBaseScreen.skin) - button.addClickListener { UnCivGame.Current.screen = EmpireOverviewScreen() } + button.onClick { UnCivGame.Current.screen = EmpireOverviewScreen() } button.center(this) button.x = screen.stage.width-button.width-10 addActor(button) @@ -93,7 +93,7 @@ class WorldScreenTopBar(val screen: WorldScreen) : Table() { val menuButton = ImageGetter.getImage("OtherIcons/MenuIcon.png") .apply { setSize(50f, 50f) } menuButton.color = Color.WHITE - menuButton.addClickListener { + menuButton.onClick { if(screen.stage.actors.none { it is WorldScreenOptionsTable }) screen.stage.addActor(WorldScreenOptionsTable()) } diff --git a/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt b/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt index a4a2a9d157..865343a4e6 100644 --- a/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt +++ b/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt @@ -126,7 +126,7 @@ class BattleTable(val worldScreen: WorldScreen): Table() { if(attackableEnemy==null || !attacker.unit.canAttack()) attackButton.disable() else { - attackButton.addClickListener { + attackButton.onClick { attacker.unit.moveToTile(attackableEnemy.tileToAttackFrom) battle.attack(attacker, defender) worldScreen.update() diff --git a/core/src/com/unciv/ui/worldscreen/optionstable/PopupTable.kt b/core/src/com/unciv/ui/worldscreen/optionstable/PopupTable.kt index 7a49bbba6b..a607077e26 100644 --- a/core/src/com/unciv/ui/worldscreen/optionstable/PopupTable.kt +++ b/core/src/com/unciv/ui/worldscreen/optionstable/PopupTable.kt @@ -18,7 +18,7 @@ open class PopupTable: Table(){ fun addButton(text:String, action:()->Unit){ val button = TextButton(text.tr(), CameraStageBaseScreen.skin).apply { color= ImageGetter.getBlue() } - button.addClickListener(action) + button.onClick(action) add(button).row() } } @@ -31,8 +31,8 @@ class YesNoPopupTable(question:String, action:()->Unit, val skin = CameraStageBaseScreen.skin add(Label(question, skin)).colspan(2).row() - add(TextButton("No".tr(), skin).apply { addClickListener { close() } }) - add(TextButton("Yes".tr(), skin).apply { addClickListener { close(); action() } }) + add(TextButton("No".tr(), skin).apply { onClick { close() } }) + add(TextButton("Yes".tr(), skin).apply { onClick { close(); action() } }) pack() center(screen.stage) screen.stage.addActor(this) diff --git a/core/src/com/unciv/ui/worldscreen/unit/IdleUnitButton.kt b/core/src/com/unciv/ui/worldscreen/unit/IdleUnitButton.kt index 62fac6c215..e24d14f525 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/IdleUnitButton.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/IdleUnitButton.kt @@ -3,7 +3,7 @@ package com.unciv.ui.worldscreen.unit import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.unciv.logic.map.TileInfo import com.unciv.ui.utils.CameraStageBaseScreen -import com.unciv.ui.utils.addClickListener +import com.unciv.ui.utils.onClick import com.unciv.ui.worldscreen.TileMapHolder class IdleUnitButton internal constructor(internal val unitTable: UnitTable, @@ -13,7 +13,7 @@ class IdleUnitButton internal constructor(internal val unitTable: UnitTable, fun getTilesWithIdleUnits() = tileMapHolder.tileMap.values .filter { it.hasIdleUnit() && it.getUnits().first().owner == unitTable.worldScreen.civInfo.civName } init { - addClickListener { + onClick { val tilesWithIdleUnits = getTilesWithIdleUnits() val tileToSelect: TileInfo diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitActionsTable.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitActionsTable.kt index ee1f220430..6cfe966089 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitActionsTable.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitActionsTable.kt @@ -59,7 +59,7 @@ class UnitActionsTable(val worldScreen: WorldScreen) : Table(){ actionButton.add(Label(unitAction.name.tr(),CameraStageBaseScreen.skin) .setFontColor(Color.WHITE)).pad(5f) actionButton.pack() - actionButton.addClickListener({ unitAction.action(); UnCivGame.Current.worldScreen.update() }) + actionButton.onClick({ unitAction.action(); UnCivGame.Current.worldScreen.update() }) if (!unitAction.canAct) actionButton.disable() return actionButton } diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitTable.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitTable.kt index d304ab1f09..3b544611ac 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitTable.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitTable.kt @@ -93,7 +93,7 @@ class UnitTable(val worldScreen: WorldScreen) : Table(){ for(promotion in selectedUnit!!.promotions.promotions) promotionsTable.add(ImageGetter.getPromotionIcon(promotion)).size(20f) - unitDescriptionLabel.addClickListener { worldScreen.tileMapHolder.setCenterPosition(selectedUnit!!.getTile().position) } + unitDescriptionLabel.onClick { worldScreen.tileMapHolder.setCenterPosition(selectedUnit!!.getTile().position) } } pack()