Removed static references from policy buttons

This commit is contained in:
Yair Morgenstern
2023-02-20 17:03:20 +02:00
parent 461028deed
commit fff6bc59eb
2 changed files with 19 additions and 26 deletions

View File

@ -9,7 +9,6 @@ import com.badlogic.gdx.scenes.scene2d.ui.Image
import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.badlogic.gdx.utils.Align import com.badlogic.gdx.utils.Align
import com.unciv.GUI import com.unciv.GUI
import com.unciv.UncivGame
import com.unciv.logic.civilization.Civilization import com.unciv.logic.civilization.Civilization
import com.unciv.models.TutorialTrigger import com.unciv.models.TutorialTrigger
import com.unciv.models.UncivSound import com.unciv.models.UncivSound
@ -19,11 +18,7 @@ import com.unciv.models.ruleset.PolicyBranch
import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.ruleset.unique.UniqueType
import com.unciv.models.translations.fillPlaceholders import com.unciv.models.translations.fillPlaceholders
import com.unciv.models.translations.tr import com.unciv.models.translations.tr
import com.unciv.ui.images.ImageGetter
import com.unciv.ui.popups.ConfirmPopup
import com.unciv.ui.screens.basescreen.BaseScreen
import com.unciv.ui.components.BorderedTable import com.unciv.ui.components.BorderedTable
import com.unciv.ui.screens.basescreen.RecreateOnResize
import com.unciv.ui.components.extensions.addSeparator import com.unciv.ui.components.extensions.addSeparator
import com.unciv.ui.components.extensions.center import com.unciv.ui.components.extensions.center
import com.unciv.ui.components.extensions.colorFromRGB import com.unciv.ui.components.extensions.colorFromRGB
@ -35,6 +30,10 @@ import com.unciv.ui.components.extensions.onDoubleClick
import com.unciv.ui.components.extensions.pad import com.unciv.ui.components.extensions.pad
import com.unciv.ui.components.extensions.toGroup import com.unciv.ui.components.extensions.toGroup
import com.unciv.ui.components.extensions.toLabel import com.unciv.ui.components.extensions.toLabel
import com.unciv.ui.images.ImageGetter
import com.unciv.ui.popups.ConfirmPopup
import com.unciv.ui.screens.basescreen.BaseScreen
import com.unciv.ui.screens.basescreen.RecreateOnResize
import com.unciv.ui.screens.worldscreen.WorldScreen import com.unciv.ui.screens.worldscreen.WorldScreen
import java.lang.Integer.max import java.lang.Integer.max
import kotlin.math.abs import kotlin.math.abs
@ -51,16 +50,10 @@ private object PolicyColors {
val branchAdopted = colorFromRGB(100, 90, 10).darken(0.5f) val branchAdopted = colorFromRGB(100, 90, 10).darken(0.5f)
} }
fun Policy.isAdopted() : Boolean { fun Policy.isPickable(viewingCiv: Civilization) : Boolean {
return GUI.getSelectedPlayer().policies.isAdopted(this.name) if (!viewingCiv.isCurrentPlayer()
}
fun Policy.isPickable() : Boolean {
val viewingCiv = GUI.getViewingPlayer()
val selectedCiv = GUI.getSelectedPlayer()
if (!GUI.isMyTurn()
|| viewingCiv.isDefeated() || viewingCiv.isDefeated()
|| selectedCiv.policies.isAdopted(this.name) || viewingCiv.policies.isAdopted(this.name)
|| this.policyBranchType == PolicyBranchType.BranchComplete || this.policyBranchType == PolicyBranchType.BranchComplete
|| !viewingCiv.policies.isAdoptable(this) || !viewingCiv.policies.isAdoptable(this)
|| !viewingCiv.policies.canAdoptPolicy() || !viewingCiv.policies.canAdoptPolicy()
@ -69,7 +62,7 @@ fun Policy.isPickable() : Boolean {
return true return true
} }
class PolicyButton(val policy: Policy, size: Float = 30f) : BorderedTable( class PolicyButton(val viewingCiv: Civilization, val policy: Policy, size: Float = 30f) : BorderedTable(
path = "PolicyScreen/PolicyButton", path = "PolicyScreen/PolicyButton",
defaultBgBorder = BaseScreen.skinStrings.roundedEdgeRectangleSmallShape, defaultBgBorder = BaseScreen.skinStrings.roundedEdgeRectangleSmallShape,
defaultBgShape = BaseScreen.skinStrings.roundedEdgeRectangleSmallShape, defaultBgShape = BaseScreen.skinStrings.roundedEdgeRectangleSmallShape,
@ -109,7 +102,7 @@ class PolicyButton(val policy: Policy, size: Float = 30f) : BorderedTable(
private fun updateState() { private fun updateState() {
val isPickable = policy.isPickable() val isPickable = policy.isPickable(viewingCiv)
val isAdopted = GUI.getSelectedPlayer().policies.isAdopted(policy.name) val isAdopted = GUI.getSelectedPlayer().policies.isAdopted(policy.name)
when { when {
@ -237,7 +230,7 @@ class PolicyPickerScreen(val worldScreen: WorldScreen, val viewingCiv: Civilizat
val policy = button.policy val policy = button.policy
rightSideButton.isVisible = !viewingCiv.policies.isAdopted(policy.name) rightSideButton.isVisible = !viewingCiv.policies.isAdopted(policy.name)
if (!policy.isPickable()) { if (!policy.isPickable(viewingCiv)) {
rightSideButton.disable() rightSideButton.disable()
} else { } else {
rightSideButton.enable() rightSideButton.enable()
@ -265,7 +258,7 @@ class PolicyPickerScreen(val worldScreen: WorldScreen, val viewingCiv: Civilizat
val prefHeight = Sizes.paddingVertical *2 + Sizes.iconSize *maxRow + Sizes.paddingBetweenVer *(maxRow - 1) val prefHeight = Sizes.paddingVertical *2 + Sizes.iconSize *maxRow + Sizes.paddingBetweenVer *(maxRow - 1)
// Main table // Main table
val colorBg = if (branch.isAdopted()) PolicyColors.branchAdopted else PolicyColors.branchNotAdopted val colorBg = if (viewingCiv.policies.isAdopted(branch.name)) PolicyColors.branchAdopted else PolicyColors.branchNotAdopted
val branchGroup = BorderedTable(path="PolicyScreen/PolicyBranchBackground") val branchGroup = BorderedTable(path="PolicyScreen/PolicyBranchBackground")
.apply { bgColor = colorBg } .apply { bgColor = colorBg }
@ -547,7 +540,7 @@ class PolicyPickerScreen(val worldScreen: WorldScreen, val viewingCiv: Civilizat
private fun getTopButton(branch: PolicyBranch): Table { private fun getTopButton(branch: PolicyBranch): Table {
val text: String val text: String
val isPickable = branch.isPickable() val isPickable = branch.isPickable(viewingCiv)
var isAdoptedBranch = false var isAdoptedBranch = false
var percentage = 0f var percentage = 0f
@ -623,7 +616,7 @@ class PolicyPickerScreen(val worldScreen: WorldScreen, val viewingCiv: Civilizat
lockIcon.setPosition(table.width, table.height / 2 - lockIcon.height/2) lockIcon.setPosition(table.width, table.height / 2 - lockIcon.height/2)
table.onClick { table.onClick {
if (branch.isPickable()) if (branch.isPickable(viewingCiv))
ConfirmPopup( ConfirmPopup(
this, this,
"Are you sure you want to adopt [${branch.name}]?", "Are you sure you want to adopt [${branch.name}]?",
@ -643,9 +636,9 @@ class PolicyPickerScreen(val worldScreen: WorldScreen, val viewingCiv: Civilizat
} }
private fun getPolicyButton(policy: Policy, size: Float = 30f): PolicyButton { private fun getPolicyButton(policy: Policy, size: Float = 30f): PolicyButton {
val button = PolicyButton(policy, size = size) val button = PolicyButton(viewingCiv, policy, size = size)
button.onClick { pickPolicy(button = button) } button.onClick { pickPolicy(button = button) }
if (policy.isPickable()) if (policy.isPickable(viewingCiv))
button.onDoubleClick(UncivSound.Policy) { confirmAction() } button.onDoubleClick(UncivSound.Policy) { confirmAction() }
return button return button
} }
@ -654,7 +647,7 @@ class PolicyPickerScreen(val worldScreen: WorldScreen, val viewingCiv: Civilizat
val policy = selectedPolicyButton!!.policy val policy = selectedPolicyButton!!.policy
// Evil people clicking on buttons too fast to confuse the screen - #4977 // Evil people clicking on buttons too fast to confuse the screen - #4977
if (!policy.isPickable()) return if (!policy.isPickable(viewingCiv)) return
viewingCiv.policies.adopt(policy) viewingCiv.policies.adopt(policy)

View File

@ -26,7 +26,6 @@ import com.unciv.logic.trade.TradeEvaluation
import com.unciv.models.TutorialTrigger import com.unciv.models.TutorialTrigger
import com.unciv.models.ruleset.tile.ResourceType import com.unciv.models.ruleset.tile.ResourceType
import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.ruleset.unique.UniqueType
import com.unciv.ui.screens.basescreen.BaseScreen
import com.unciv.ui.components.KeyCharAndCode import com.unciv.ui.components.KeyCharAndCode
import com.unciv.ui.components.extensions.centerX import com.unciv.ui.components.extensions.centerX
import com.unciv.ui.components.extensions.darken import com.unciv.ui.components.extensions.darken
@ -39,6 +38,7 @@ import com.unciv.ui.images.ImageGetter
import com.unciv.ui.popups.Popup import com.unciv.ui.popups.Popup
import com.unciv.ui.popups.ToastPopup import com.unciv.ui.popups.ToastPopup
import com.unciv.ui.popups.hasOpenPopups import com.unciv.ui.popups.hasOpenPopups
import com.unciv.ui.screens.basescreen.BaseScreen
import com.unciv.ui.screens.cityscreen.CityScreen import com.unciv.ui.screens.cityscreen.CityScreen
import com.unciv.ui.screens.civilopediascreen.CivilopediaScreen import com.unciv.ui.screens.civilopediascreen.CivilopediaScreen
import com.unciv.ui.screens.mainmenuscreen.MainMenuScreen import com.unciv.ui.screens.mainmenuscreen.MainMenuScreen
@ -84,7 +84,7 @@ class WorldScreen(
var shouldUpdate = false var shouldUpdate = false
/** Indicates it's the player's ([viewingCiv]) turn */ /** Indicates it's the player's ([viewingCiv]) turn */
var isPlayersTurn = viewingCiv == gameInfo.currentPlayerCiv var isPlayersTurn = viewingCiv.isCurrentPlayer()
internal set // only this class is allowed to make changes internal set // only this class is allowed to make changes
/** Selected civilization, used in spectator and replay mode, equals viewingCiv in ordinary games */ /** Selected civilization, used in spectator and replay mode, equals viewingCiv in ordinary games */
@ -93,7 +93,7 @@ class WorldScreen(
var fogOfWar = true var fogOfWar = true
private set private set
/** `true` when it's the player's turn unless he is a spectator*/ /** `true` when it's the player's turn unless he is a spectator */
val canChangeState val canChangeState
get() = isPlayersTurn && !viewingCiv.isSpectator() get() = isPlayersTurn && !viewingCiv.isSpectator()