From 16f506cdd6e83f55575c83a1ff1d8327f65ebfcb Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Fri, 15 Mar 2024 11:02:34 +0200 Subject: [PATCH] Fixed crash entering trade from overview on other player's turn When entering trade from overview when other player's turn (multiplayer), no longer takes "current player" as trade partner, instead takes "viewing civ" --- .../diplomacyscreen/DiplomacyScreen.kt | 5 ++--- .../ui/screens/diplomacyscreen/TradeTable.kt | 22 +++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/core/src/com/unciv/ui/screens/diplomacyscreen/DiplomacyScreen.kt b/core/src/com/unciv/ui/screens/diplomacyscreen/DiplomacyScreen.kt index bbc4f1fb10..9ca3243baf 100644 --- a/core/src/com/unciv/ui/screens/diplomacyscreen/DiplomacyScreen.kt +++ b/core/src/com/unciv/ui/screens/diplomacyscreen/DiplomacyScreen.kt @@ -5,7 +5,6 @@ import com.badlogic.gdx.scenes.scene2d.ui.SplitPane import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.badlogic.gdx.utils.Align -import com.unciv.Constants import com.unciv.GUI import com.unciv.UncivGame import com.unciv.logic.civilization.Civilization @@ -211,9 +210,9 @@ class DiplomacyScreen( //region Major Civ Diplomacy - internal fun setTrade(civ: Civilization): TradeTable { + internal fun setTrade(otherCiv: Civilization): TradeTable { rightSideTable.clear() - val tradeTable = TradeTable(civ, this) + val tradeTable = TradeTable(viewingCiv, otherCiv, this) rightSideTable.add(tradeTable) return tradeTable } diff --git a/core/src/com/unciv/ui/screens/diplomacyscreen/TradeTable.kt b/core/src/com/unciv/ui/screens/diplomacyscreen/TradeTable.kt index 9c4ee43505..47c35f0928 100644 --- a/core/src/com/unciv/ui/screens/diplomacyscreen/TradeTable.kt +++ b/core/src/com/unciv/ui/screens/diplomacyscreen/TradeTable.kt @@ -13,23 +13,23 @@ import com.unciv.ui.components.input.onClick import com.unciv.ui.screens.basescreen.BaseScreen class TradeTable( + private val civ: Civilization, private val otherCivilization: Civilization, diplomacyScreen: DiplomacyScreen ): Table(BaseScreen.skin) { - private val currentPlayerCiv = otherCivilization.gameInfo.getCurrentPlayerCivilization() - internal val tradeLogic = TradeLogic(currentPlayerCiv, otherCivilization) - internal val offerColumnsTable = OfferColumnsTable(tradeLogic, diplomacyScreen , currentPlayerCiv, otherCivilization) { onChange() } + internal val tradeLogic = TradeLogic(civ, otherCivilization) + internal val offerColumnsTable = OfferColumnsTable(tradeLogic, diplomacyScreen , civ, otherCivilization) { onChange() } // This is so that after a trade has been traded, we can switch out the offersToDisplay to start anew - this is the easiest way private val offerColumnsTableWrapper = Table() val offerTradeText = "{Offer trade}\n({They'll decide on their turn})" private val offerButton = offerTradeText.toTextButton() - private fun isTradeOffered() = otherCivilization.tradeRequests.any { it.requestingCiv == currentPlayerCiv.civName } + private fun isTradeOffered() = otherCivilization.tradeRequests.any { it.requestingCiv == civ.civName } private fun retractOffer() { - otherCivilization.tradeRequests.removeAll { it.requestingCiv == currentPlayerCiv.civName } - currentPlayerCiv.cache.updateCivResources() + otherCivilization.tradeRequests.removeAll { it.requestingCiv == civ.civName } + civ.cache.updateCivResources() offerButton.setText(offerTradeText.tr()) } @@ -39,7 +39,7 @@ class TradeTable( val lowerTable = Table().apply { defaults().pad(10f) } - val existingOffer = otherCivilization.tradeRequests.firstOrNull { it.requestingCiv == currentPlayerCiv.civName } + val existingOffer = otherCivilization.tradeRequests.firstOrNull { it.requestingCiv == civ.civName } if (existingOffer != null) { tradeLogic.currentTrade.set(existingOffer.trade.reverse()) offerColumnsTable.update() @@ -57,10 +57,10 @@ class TradeTable( // If not lets add an extra gold offer to satisfy this. // There must be enough gold to add to the offer to satisfy this, otherwise the research agreement button would be disabled if (tradeLogic.currentTrade.ourOffers.any { it.name == Constants.researchAgreement}) { - val researchCost = currentPlayerCiv.diplomacyFunctions.getResearchAgreementCost(otherCivilization) + val researchCost = civ.diplomacyFunctions.getResearchAgreementCost(otherCivilization) val currentPlayerOfferedGold = tradeLogic.currentTrade.ourOffers.firstOrNull { it.type == TradeType.Gold }?.amount ?: 0 val otherCivOfferedGold = tradeLogic.currentTrade.theirOffers.firstOrNull { it.type == TradeType.Gold }?.amount ?: 0 - val newCurrentPlayerGold = currentPlayerCiv.gold + otherCivOfferedGold - researchCost + val newCurrentPlayerGold = civ.gold + otherCivOfferedGold - researchCost val newOtherCivGold = otherCivilization.gold + currentPlayerOfferedGold - researchCost // Check if we require more gold from them if (newCurrentPlayerGold < 0) { @@ -74,8 +74,8 @@ class TradeTable( } } - otherCivilization.tradeRequests.add(TradeRequest(currentPlayerCiv.civName, tradeLogic.currentTrade.reverse())) - currentPlayerCiv.cache.updateCivResources() + otherCivilization.tradeRequests.add(TradeRequest(civ.civName, tradeLogic.currentTrade.reverse())) + civ.cache.updateCivResources() offerButton.setText("Retract offer".tr()) }