From c449e68ba74f660509558105a441f84c5e62c52d Mon Sep 17 00:00:00 2001 From: Jack Rainy Date: Sun, 19 Apr 2020 20:52:51 +0300 Subject: [PATCH] Highlight unique offer suggestions (#2469) --- .../com/unciv/ui/trade/OfferColumnsTable.kt | 10 +++++---- .../com/unciv/ui/trade/OffersListScroll.kt | 22 +++++++++++++++---- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/core/src/com/unciv/ui/trade/OfferColumnsTable.kt b/core/src/com/unciv/ui/trade/OfferColumnsTable.kt index 043ea50c10..0c38a8d74d 100644 --- a/core/src/com/unciv/ui/trade/OfferColumnsTable.kt +++ b/core/src/com/unciv/ui/trade/OfferColumnsTable.kt @@ -46,9 +46,11 @@ class OfferColumnsTable(val tradeLogic: TradeLogic, stage: Stage, val onChange: } fun update() { - ourAvailableOffersTable.update(tradeLogic.ourAvailableOffers.without(tradeLogic.currentTrade.ourOffers)) - ourOffersTable.update(tradeLogic.currentTrade.ourOffers) - theirOffersTable.update(tradeLogic.currentTrade.theirOffers) - theirAvailableOffersTable.update(tradeLogic.theirAvailableOffers.without(tradeLogic.currentTrade.theirOffers)) + val ourFilteredOffers = tradeLogic.ourAvailableOffers.without(tradeLogic.currentTrade.ourOffers) + val theirFilteredOffers = tradeLogic.theirAvailableOffers.without(tradeLogic.currentTrade.theirOffers) + ourAvailableOffersTable.update(ourFilteredOffers, tradeLogic.theirAvailableOffers) + ourOffersTable.update(tradeLogic.currentTrade.ourOffers, tradeLogic.theirAvailableOffers) + theirOffersTable.update(tradeLogic.currentTrade.theirOffers, tradeLogic.ourAvailableOffers) + theirAvailableOffersTable.update(theirFilteredOffers, tradeLogic.ourAvailableOffers) } } \ No newline at end of file diff --git a/core/src/com/unciv/ui/trade/OffersListScroll.kt b/core/src/com/unciv/ui/trade/OffersListScroll.kt index 2ed93832c0..3d74b27d60 100644 --- a/core/src/com/unciv/ui/trade/OffersListScroll.kt +++ b/core/src/com/unciv/ui/trade/OffersListScroll.kt @@ -1,5 +1,6 @@ package com.unciv.ui.trade +import com.badlogic.gdx.graphics.Color import com.unciv.ui.utils.AutoScrollPane as ScrollPane import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.TextButton @@ -23,7 +24,11 @@ class OffersListScroll(val onOfferClicked: (TradeOffer) -> Unit) : ScrollPane(nu private val expanderTabs = HashMap() - fun update(offersToDisplay:TradeOffersList) { + /** + * offersToDisplay - the offers which should be displayed as buttons + * otherOffers - the list of other side's offers to compare with whether these offers are unique + */ + fun update(offersToDisplay:TradeOffersList, otherOffers: TradeOffersList) { table.clear() expanderTabs.clear() @@ -45,7 +50,9 @@ class OffersListScroll(val onOfferClicked: (TradeOffer) -> Unit) : ScrollPane(nu for (offerType in values()) { val offersOfType = offersToDisplay.filter { it.type == offerType } - .sortedWith(compareBy({if (UncivGame.Current.settings.orderTradeOffersByAmount) -it.amount else 0},{if (it.type==City) it.getOfferText() else it.name.tr()})) + .sortedWith(compareBy({ + if (UncivGame.Current.settings.orderTradeOffersByAmount) -it.amount else 0}, + {if (it.type==City) it.getOfferText() else it.name.tr()})) if (expanderTabs.containsKey(offerType)) { expanderTabs[offerType]!!.innerTable.clear() @@ -57,11 +64,19 @@ class OffersListScroll(val onOfferClicked: (TradeOffer) -> Unit) : ScrollPane(nu val amountPerClick = if (offer.type == Gold) 50 else 1 - if (offer.amount > 0 && offer.name != Constants.peaceTreaty && offer.name != Constants.researchAgreement) // can't disable peace treaty! + if (offer.amount > 0 && offer.name != Constants.peaceTreaty && // can't disable peace treaty! + offer.name != Constants.researchAgreement) { + + // highlight unique suggestions + if (offerType in listOf(Luxury_Resource, Strategic_Resource) + && otherOffers.all { it.type != offer.type || it.name != offer.name }) + tradeButton.color = Color.GREEN + tradeButton.onClick { val amountTransferred = min(amountPerClick, offer.amount) onOfferClicked(offer.copy(amount = amountTransferred)) } + } else tradeButton.disable() // for instance we have negative gold @@ -72,5 +87,4 @@ class OffersListScroll(val onOfferClicked: (TradeOffer) -> Unit) : ScrollPane(nu } actor = table } - } \ No newline at end of file