From 30396239c1ae179207e441170b26a3e8df3288d2 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Mon, 28 Sep 2020 23:06:46 +0300 Subject: [PATCH] Cannot open multiple gold selection popups in trade table --- .../com/unciv/ui/trade/OfferColumnsTable.kt | 62 +++++++++++-------- 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/core/src/com/unciv/ui/trade/OfferColumnsTable.kt b/core/src/com/unciv/ui/trade/OfferColumnsTable.kt index 70f1d814c3..3cdebf69e6 100644 --- a/core/src/com/unciv/ui/trade/OfferColumnsTable.kt +++ b/core/src/com/unciv/ui/trade/OfferColumnsTable.kt @@ -65,34 +65,42 @@ class OfferColumnsTable(val tradeLogic: TradeLogic, val screen: DiplomacyScreen, } + class goldSelectionPopup(screen: DiplomacyScreen, offer: TradeOffer, ourOffers: TradeOffersList, + offeringCiv: CivilizationInfo, onChange: () -> Unit):Popup(screen){ + init { + val existingGoldOffer = ourOffers.firstOrNull { it.type == TradeType.Gold } + if (existingGoldOffer != null) + offer.amount = existingGoldOffer.amount + val amountLabel = offer.amount.toLabel() + val minitable = Table().apply { defaults().pad(5f) } + + fun incrementAmount(delta: Int) { + offer.amount += delta + if (offer.amount < 0) offer.amount = 0 + if (offer.amount > offeringCiv.gold) offer.amount = offeringCiv.gold + amountLabel.setText(offer.amount) + } + + minitable.add("-500".toTextButton().onClick { incrementAmount(-500) }) + minitable.add("-50".toTextButton().onClick { incrementAmount(-50) }) + minitable.add(amountLabel) + minitable.add("+50".toTextButton().onClick { incrementAmount(50) }) + minitable.add("+500".toTextButton().onClick { incrementAmount(500) }) + + add(minitable).row() + + addCloseButton { + if (existingGoldOffer == null) + ourOffers.add(offer) + else existingGoldOffer.amount = offer.amount + onChange() + } + } + } + fun openGoldSelectionPopup(offer: TradeOffer, ourOffers: TradeOffersList, offeringCiv: CivilizationInfo) { - val selectionPopup = Popup(screen) - val existingGoldOffer = ourOffers.firstOrNull { it.type == TradeType.Gold } - if (existingGoldOffer != null) - offer.amount = existingGoldOffer.amount - val amountLabel = offer.amount.toLabel() - val minitable = Table().apply { defaults().pad(5f) } - - fun incrementAmount(delta: Int) { - offer.amount += delta - if (offer.amount < 0) offer.amount = 0 - if (offer.amount > offeringCiv.gold) offer.amount = offeringCiv.gold - amountLabel.setText(offer.amount) - } - - minitable.add("-500".toTextButton().onClick { incrementAmount(-500) }) - minitable.add("-50".toTextButton().onClick { incrementAmount(-50) }) - minitable.add(amountLabel) - minitable.add("+50".toTextButton().onClick { incrementAmount(50) }) - minitable.add("+500".toTextButton().onClick { incrementAmount(500) }) - selectionPopup.add(minitable).row() - - selectionPopup.addCloseButton { - if (existingGoldOffer == null) - ourOffers.add(offer) - else existingGoldOffer.amount = offer.amount - onChange() - } + if (screen.stage.actors.any { it is goldSelectionPopup }) return + val selectionPopup = goldSelectionPopup(screen, offer, ourOffers, offeringCiv, onChange) selectionPopup.open() }