From 00e962c9acceabbd3ba39930e888b49f02d9aa1c Mon Sep 17 00:00:00 2001 From: yairm210 Date: Fri, 10 Sep 2021 13:51:01 +0300 Subject: [PATCH] Resolved #4977 - can no longer fast-tap to confuse the policy/construction screens --- .../ui/cityscreen/CityConstructionsTable.kt | 3 ++ .../ui/pickerscreens/PolicyPickerScreen.kt | 28 +++++++++++++------ .../ui/pickerscreens/TechPickerScreen.kt | 10 +++++-- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/core/src/com/unciv/ui/cityscreen/CityConstructionsTable.kt b/core/src/com/unciv/ui/cityscreen/CityConstructionsTable.kt index e03696a5d7..32824c1d95 100644 --- a/core/src/com/unciv/ui/cityscreen/CityConstructionsTable.kt +++ b/core/src/com/unciv/ui/cityscreen/CityConstructionsTable.kt @@ -395,6 +395,9 @@ class CityConstructionsTable(private val cityScreen: CityScreen) { } private fun addConstructionToQueue(construction: IConstruction, cityConstructions: CityConstructions) { + // Some evil person decided to double tap real fast - #4977 + if (cannotAddConstructionToQueue(construction, cityScreen.city, cityScreen.city.cityConstructions)) + return if (construction is Building && construction.uniqueObjects.any { it.placeholderText == "Creates a [] improvement on a specific tile" }) { cityScreen.selectedTile improvementBuildingToConstruct = construction diff --git a/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt index 4a60be8371..a0d86f48a1 100644 --- a/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt @@ -40,7 +40,12 @@ class PolicyPickerScreen(val worldScreen: WorldScreen, civInfo: CivilizationInfo } else onBackButtonClicked { UncivGame.Current.setWorldScreen() } rightSideButton.onClick(UncivSound.Policy) { - viewingCiv.policies.adopt(pickedPolicy!!) + val policy = pickedPolicy!! + + // Evil people clicking on buttons too fast to confuse the screen - #4977 + if (!policyIsPickable(policy)) return@onClick + + viewingCiv.policies.adopt(policy) // If we've moved to another screen in the meantime (great person pick, victory screen) ignore this if (game.screen !is PolicyPickerScreen || !policies.canAdoptPolicy()) { @@ -106,14 +111,21 @@ class PolicyPickerScreen(val worldScreen: WorldScreen, civInfo: CivilizationInfo scrollPane.updateVisualScroll() } - private fun pickPolicy(policy: Policy) { + fun policyIsPickable(policy: Policy):Boolean { if (!worldScreen.isPlayersTurn - || worldScreen.viewingCiv.isSpectator() // viewingCiv var points to selectedCiv in case of spectator - || viewingCiv.isDefeated() - || viewingCiv.policies.isAdopted(policy.name) - || policy.policyBranchType == PolicyBranchType.BranchComplete - || !viewingCiv.policies.isAdoptable(policy) - || !viewingCiv.policies.canAdoptPolicy()) { + || worldScreen.viewingCiv.isSpectator() // viewingCiv var points to selectedCiv in case of spectator + || viewingCiv.isDefeated() + || viewingCiv.policies.isAdopted(policy.name) + || policy.policyBranchType == PolicyBranchType.BranchComplete + || !viewingCiv.policies.isAdoptable(policy) + || !viewingCiv.policies.canAdoptPolicy() + ) + return false + return true + } + + private fun pickPolicy(policy: Policy) { + if (!policyIsPickable(policy)) { rightSideButton.disable() } else { rightSideButton.enable() diff --git a/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt index 46ebbe43f8..d77da14331 100644 --- a/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt @@ -58,10 +58,16 @@ class TechPickerScreen(internal val civInfo: CivilizationInfo, centerOnTech: Tec rightSideButton.setText("Pick a tech".tr()) rightSideButton.onClick(UncivSound.Paper) { - game.settings.addCompletedTutorialTask("Pick technology") - if (freeTechPick) civTech.getFreeTechnology(selectedTech!!.name) + if (freeTechPick) { + val freeTech = selectedTech!!.name + // More evil people fast-clicking to cheat - #4977 + if (researchableTechs.contains(freeTech)) return@onClick + civTech.getFreeTechnology(selectedTech!!.name) + } else civTech.techsToResearch = tempTechsToResearch + game.settings.addCompletedTutorialTask("Pick technology") + game.setWorldScreen() game.worldScreen.shouldUpdate = true dispose()