From 7114a67d2cfbfe908fd3f128c060aef6fa7557e3 Mon Sep 17 00:00:00 2001 From: Gualdimar Date: Fri, 17 Feb 2023 00:46:21 +0200 Subject: [PATCH] Pending trades (#8681) * Added pending trade offers to the trade overview screen * Fixed offer trade button state * Fixed space * Small fixes --- .../assets/jsons/translations/template.properties | 2 ++ .../ui/overviewscreen/EmpireOverviewCategories.kt | 3 ++- .../ui/overviewscreen/TradesOverviewTable.kt | 15 +++++++++++++-- core/src/com/unciv/ui/trade/DiplomacyScreen.kt | 2 ++ core/src/com/unciv/ui/trade/TradeTable.kt | 7 +++++-- 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/android/assets/jsons/translations/template.properties b/android/assets/jsons/translations/template.properties index 378391152d..bbc191d7b7 100644 --- a/android/assets/jsons/translations/template.properties +++ b/android/assets/jsons/translations/template.properties @@ -1235,6 +1235,8 @@ Maintenance = Transportation upkeep = Unit upkeep = Trades = +Current trades = +Pending trades = Score = Units = Unit Supply = diff --git a/core/src/com/unciv/ui/overviewscreen/EmpireOverviewCategories.kt b/core/src/com/unciv/ui/overviewscreen/EmpireOverviewCategories.kt index 0be6a7e2f6..a027446b4b 100644 --- a/core/src/com/unciv/ui/overviewscreen/EmpireOverviewCategories.kt +++ b/core/src/com/unciv/ui/overviewscreen/EmpireOverviewCategories.kt @@ -36,7 +36,8 @@ enum class EmpireOverviewCategories( Trades("StatIcons/Acquire", 'T', Align.top, fun (viewingPlayer: Civilization, overviewScreen: EmpireOverviewScreen, _: EmpireOverviewTabPersistableData?) = TradesOverviewTab(viewingPlayer, overviewScreen), - fun (viewingPlayer: Civilization) = viewingPlayer.diplomacy.values.all { it.trades.isEmpty() }.toState()), + fun (viewingPlayer: Civilization) = + (viewingPlayer.diplomacy.values.all { it.trades.isEmpty()} && !viewingPlayer.diplomacy.values.any{it.otherCiv().tradeRequests.any { it.requestingCiv == viewingPlayer.civName }}).toState()), Units("OtherIcons/Shield", 'U', Align.topLeft, fun (viewingPlayer: Civilization, overviewScreen: EmpireOverviewScreen, persistedData: EmpireOverviewTabPersistableData?) = UnitOverviewTab(viewingPlayer, overviewScreen, persistedData), diff --git a/core/src/com/unciv/ui/overviewscreen/TradesOverviewTable.kt b/core/src/com/unciv/ui/overviewscreen/TradesOverviewTable.kt index d27c6c6eba..6a12125596 100644 --- a/core/src/com/unciv/ui/overviewscreen/TradesOverviewTable.kt +++ b/core/src/com/unciv/ui/overviewscreen/TradesOverviewTable.kt @@ -1,6 +1,7 @@ package com.unciv.ui.overviewscreen import com.badlogic.gdx.scenes.scene2d.ui.Table +import com.unciv.Constants import com.unciv.logic.civilization.Civilization import com.unciv.logic.trade.Trade import com.unciv.logic.trade.TradeOffersList @@ -15,7 +16,15 @@ class TradesOverviewTab( init { defaults().pad(10f) - val diplomacies = viewingPlayer.diplomacy.values.filter { it.trades.isNotEmpty() } + val diplomaciesWithPendingTrade = viewingPlayer.diplomacy.values.filter { it.otherCiv().tradeRequests.any { it.requestingCiv == viewingPlayer.civName } } + if (diplomaciesWithPendingTrade.isNotEmpty()) + add("Pending trades".toLabel(fontSize = Constants.headingFontSize)).padTop(10f).row() + for (diplomacy in diplomaciesWithPendingTrade) { + for (tradeRequest in diplomacy.otherCiv().tradeRequests.filter { it.requestingCiv == viewingPlayer.civName }) + add(createTradeTable(tradeRequest.trade.reverse(), diplomacy.otherCiv())).row() + } + + val diplomaciesWithExistingTrade = viewingPlayer.diplomacy.values.filter { it.trades.isNotEmpty() } .sortedWith { diplomacyManager1, diplomacyManager2 -> val d1OffersFromFirstTrade = diplomacyManager1.trades.first().ourOffers val d2OffersFromFirstTrade = diplomacyManager2.trades.first().ourOffers @@ -27,7 +36,9 @@ class TradesOverviewTab( else -> -1 } } - for (diplomacy in diplomacies) { + if (diplomaciesWithExistingTrade.isNotEmpty()) + add("Current trades".toLabel(fontSize = Constants.headingFontSize)).padTop(10f).row() + for (diplomacy in diplomaciesWithExistingTrade) { for (trade in diplomacy.trades) add(createTradeTable(trade, diplomacy.otherCiv())).row() } diff --git a/core/src/com/unciv/ui/trade/DiplomacyScreen.kt b/core/src/com/unciv/ui/trade/DiplomacyScreen.kt index e98f4e677d..9ff9b29188 100644 --- a/core/src/com/unciv/ui/trade/DiplomacyScreen.kt +++ b/core/src/com/unciv/ui/trade/DiplomacyScreen.kt @@ -712,6 +712,7 @@ class DiplomacyScreen( tradeTable.tradeLogic.currentTrade.theirOffers.add(peaceTreaty) tradeTable.tradeLogic.currentTrade.ourOffers.add(peaceTreaty) tradeTable.offerColumnsTable.update() + tradeTable.enableOfferButton(true) } if (isNotPlayersTurn()) negotiatePeaceButton.disable() @@ -757,6 +758,7 @@ class DiplomacyScreen( tradeTable.tradeLogic.theirAvailableOffers.add(researchAgreement) tradeTable.tradeLogic.theirAvailableOffers.add(goldCostOfSignResearchAgreement) tradeTable.offerColumnsTable.update() + tradeTable.enableOfferButton(true) } if (isNotPlayersTurn()) researchAgreementButton.disable() return researchAgreementButton diff --git a/core/src/com/unciv/ui/trade/TradeTable.kt b/core/src/com/unciv/ui/trade/TradeTable.kt index 4aeeb0c28b..33b77f36c5 100644 --- a/core/src/com/unciv/ui/trade/TradeTable.kt +++ b/core/src/com/unciv/ui/trade/TradeTable.kt @@ -16,7 +16,7 @@ class TradeTable(private val otherCivilization: Civilization, stage: DiplomacySc var offerColumnsTable = OfferColumnsTable(tradeLogic, stage) { 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 var offerColumnsTableWrapper = Table() - private val offerButton = "Offer trade".toTextButton().apply { isEnabled = false } + private val offerButton = "Offer trade".toTextButton() private fun isTradeOffered() = otherCivilization.tradeRequests.any { it.requestingCiv == currentPlayerCiv.civName } @@ -39,7 +39,7 @@ class TradeTable(private val otherCivilization: Civilization, stage: DiplomacySc } if (isTradeOffered()) offerButton.setText("Retract offer".tr()) - else offerButton.setText("Offer trade".tr()) + else offerButton.apply { isEnabled = false }.setText("Offer trade".tr()) offerButton.onClick { if(isTradeOffered()) { @@ -66,4 +66,7 @@ class TradeTable(private val otherCivilization: Civilization, stage: DiplomacySc offerButton.isEnabled = !(tradeLogic.currentTrade.theirOffers.size == 0 && tradeLogic.currentTrade.ourOffers.size == 0) } + fun enableOfferButton(isEnabled: Boolean) { + offerButton.isEnabled = isEnabled + } }