Resolved #1885 - Both sides of per-turn trades end at the same time, resources offered in trade requests are not considered yours for that turn
This commit is contained in:
parent
c6d054431c
commit
387e415fe9
4 changed files with 23 additions and 15 deletions
|
@ -210,14 +210,21 @@ class DiplomacyManager() {
|
|||
|
||||
fun resourcesFromTrade(): ResourceSupplyList {
|
||||
val counter = ResourceSupplyList()
|
||||
val resourcesMap = civInfo.gameInfo.ruleSet.tileResources
|
||||
for(trade in trades){
|
||||
for(offer in trade.ourOffers)
|
||||
if(offer.type== TradeType.Strategic_Resource || offer.type== TradeType.Luxury_Resource)
|
||||
counter.add(civInfo.gameInfo.ruleSet.tileResources[offer.name]!!,-offer.amount,"Trade")
|
||||
counter.add(resourcesMap[offer.name]!!,-offer.amount,"Trade")
|
||||
for(offer in trade.theirOffers)
|
||||
if(offer.type== TradeType.Strategic_Resource || offer.type== TradeType.Luxury_Resource)
|
||||
counter.add(civInfo.gameInfo.ruleSet.tileResources[offer.name]!!,offer.amount,"Trade")
|
||||
counter.add(resourcesMap[offer.name]!!,offer.amount,"Trade")
|
||||
}
|
||||
|
||||
for(trade in otherCiv().tradeRequests.filter { it.requestingCiv==civInfo.civName }){
|
||||
for(offer in trade.trade.theirOffers)
|
||||
counter.add(resourcesMap[offer.name]!!, -offer.amount, "Trade request")
|
||||
}
|
||||
|
||||
return counter
|
||||
}
|
||||
|
||||
|
@ -325,18 +332,18 @@ class DiplomacyManager() {
|
|||
for (trade in trades.toList()) {
|
||||
for (offer in trade.ourOffers.union(trade.theirOffers).filter { it.duration > 0 }) {
|
||||
offer.duration--
|
||||
if (offer.duration == 0) {
|
||||
if(offer in trade.theirOffers)
|
||||
civInfo.addNotification("[" + offer.name + "] from [$otherCivName] has ended", null, Color.GOLD)
|
||||
else civInfo.addNotification("[" + offer.name + "] to [$otherCivName] has ended", null, Color.GOLD)
|
||||
|
||||
civInfo.updateStatsForNextTurn() // if they were bringing us gold per turn
|
||||
civInfo.updateDetailedCivResources() // if they were giving us resources
|
||||
}
|
||||
}
|
||||
|
||||
if (trade.ourOffers.all { it.duration <= 0 } && trade.theirOffers.all { it.duration <= 0 }) {
|
||||
trades.remove(trade)
|
||||
for (offer in trade.ourOffers.union(trade.theirOffers).filter { it.duration == 0 }) { // this was a timed trade
|
||||
if (offer in trade.theirOffers)
|
||||
civInfo.addNotification("[${offer.name}] from [$otherCivName] has ended", null, Color.GOLD)
|
||||
else civInfo.addNotification("[${offer.name}] to [$otherCivName] has ended", null, Color.GOLD)
|
||||
|
||||
civInfo.updateStatsForNextTurn() // if they were bringing us gold per turn
|
||||
civInfo.updateDetailedCivResources() // if they were giving us resources
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,12 +5,12 @@ import com.unciv.UncivGame
|
|||
import com.unciv.models.metadata.GameSpeed
|
||||
import com.unciv.models.translations.tr
|
||||
|
||||
data class TradeOffer(var name:String, var type: TradeType, var amount:Int=1, var duration:Int=0) {
|
||||
data class TradeOffer(var name:String, var type: TradeType, var amount:Int=1, var duration:Int=-1) {
|
||||
|
||||
init {
|
||||
// Duration needs to be part of the variables defined at the top, so that it will be copied over with copy()
|
||||
duration = when(type){
|
||||
TradeType.Gold, TradeType.Technology, TradeType.Introduction, TradeType.WarDeclaration, TradeType.City -> 0 /** 0 for offers that are immediate (e.g. gold transfer) */
|
||||
TradeType.Gold, TradeType.Technology, TradeType.Introduction, TradeType.WarDeclaration, TradeType.City -> -1 /** -1 for offers that are immediate (e.g. gold transfer) */
|
||||
else -> when(UncivGame.Current.gameInfo.gameParameters.gameSpeed){
|
||||
GameSpeed.Quick -> if (name==Constants.peaceTreaty) 10 else 25
|
||||
else -> ((if (name==Constants.peaceTreaty) 10 else 30) * UncivGame.Current.gameInfo.gameParameters.gameSpeed.modifier).toInt()
|
||||
|
|
|
@ -18,7 +18,6 @@ import com.unciv.logic.civilization.diplomacy.RelationshipLevel
|
|||
import com.unciv.logic.trade.TradeLogic
|
||||
import com.unciv.logic.trade.TradeOffer
|
||||
import com.unciv.logic.trade.TradeType
|
||||
import com.unciv.models.metadata.GameSpeed
|
||||
import com.unciv.models.translations.tr
|
||||
import com.unciv.ui.utils.*
|
||||
import kotlin.math.roundToInt
|
||||
|
@ -81,7 +80,7 @@ class DiplomacyScreen(val viewingCiv:CivilizationInfo):CameraStageBaseScreen() {
|
|||
|
||||
fun setTrade(civ: CivilizationInfo): TradeTable {
|
||||
rightSideTable.clear()
|
||||
val tradeTable =TradeTable(civ, stage) { updateLeftSideTable() }
|
||||
val tradeTable =TradeTable(civ, stage)
|
||||
rightSideTable.add(tradeTable)
|
||||
return tradeTable
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ import com.unciv.ui.utils.disable
|
|||
import com.unciv.ui.utils.enable
|
||||
import com.unciv.ui.utils.onClick
|
||||
|
||||
class TradeTable(val otherCivilization: CivilizationInfo, stage: Stage, onTradeComplete: () -> Unit): Table(CameraStageBaseScreen.skin){
|
||||
class TradeTable(val otherCivilization: CivilizationInfo, stage: Stage): Table(CameraStageBaseScreen.skin){
|
||||
val currentPlayerCiv = otherCivilization.gameInfo.getCurrentPlayerCivilization()
|
||||
var tradeLogic = TradeLogic(currentPlayerCiv,otherCivilization)
|
||||
var offerColumnsTable = OfferColumnsTable(tradeLogic, stage) { onChange() }
|
||||
|
@ -23,6 +23,7 @@ class TradeTable(val otherCivilization: CivilizationInfo, stage: Stage, onTradeC
|
|||
|
||||
fun retractOffer(){
|
||||
otherCivilization.tradeRequests.removeAll { it.requestingCiv==currentPlayerCiv.civName }
|
||||
currentPlayerCiv.updateDetailedCivResources()
|
||||
offerButton.setText("Offer trade".tr())
|
||||
}
|
||||
|
||||
|
@ -48,6 +49,7 @@ class TradeTable(val otherCivilization: CivilizationInfo, stage: Stage, onTradeC
|
|||
}
|
||||
|
||||
otherCivilization.tradeRequests.add(TradeRequest(currentPlayerCiv.civName,tradeLogic.currentTrade.reverse()))
|
||||
currentPlayerCiv.updateDetailedCivResources()
|
||||
offerButton.setText("Retract offer".tr())
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue