From 4b0aca4ef044c37fa6bf882f74d4272afcb4d994 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Mon, 17 Sep 2018 19:54:16 +0300 Subject: [PATCH] Added diplomatic introductions to trade --- .../unciv/logic/civilization/CivilizationInfo.kt | 12 ++++++++---- core/src/com/unciv/logic/trade/TradeLogic.kt | 13 ++++++++++++- core/src/com/unciv/logic/trade/TradeType.kt | 1 + core/src/com/unciv/ui/trade/OffersList.kt | 2 +- core/src/com/unciv/ui/trade/TradeTable.kt | 1 + 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index 782cb4f74e..776902bbd5 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -196,16 +196,20 @@ class CivilizationInfo { for(otherCiv in viewedCivs) if(!diplomacy.containsKey(otherCiv.civName)){ - diplomacy[otherCiv.civName] = DiplomacyManager(this@CivilizationInfo,otherCiv.civName) - .apply { diplomaticStatus = DiplomaticStatus.Peace } - otherCiv.diplomacy[civName] = DiplomacyManager(otherCiv,civName) - .apply { diplomaticStatus = DiplomaticStatus.Peace } + meetCivilization(otherCiv) addNotification("We have encountered [${otherCiv.civName}]!".tr(),null, Color.GOLD) } return viewablePositions.distinct() } + fun meetCivilization(otherCiv: CivilizationInfo) { + diplomacy[otherCiv.civName] = DiplomacyManager(this, otherCiv.civName) + .apply { diplomaticStatus = DiplomaticStatus.Peace } + otherCiv.diplomacy[civName] = DiplomacyManager(otherCiv, civName) + .apply { diplomaticStatus = DiplomaticStatus.Peace } + } + override fun toString(): String {return civName} // for debug fun isDefeated()= cities.isEmpty() && !getCivUnits().any{it.name=="Settler"} diff --git a/core/src/com/unciv/logic/trade/TradeLogic.kt b/core/src/com/unciv/logic/trade/TradeLogic.kt index d87b85eb36..45510094ac 100644 --- a/core/src/com/unciv/logic/trade/TradeLogic.kt +++ b/core/src/com/unciv/logic/trade/TradeLogic.kt @@ -17,7 +17,7 @@ class TradeLogic(val ourCivilization:CivilizationInfo, val otherCivilization: Ci fun getAvailableOffers(civInfo: CivilizationInfo, otherCivilization: CivilizationInfo): TradeOffersList { val offers = TradeOffersList() if(civInfo.isAtWarWith(otherCivilization)) - offers.add(TradeOffer("Peace Treaty", TradeType.Treaty, 20, 1)) + offers.add(TradeOffer("Peace Treaty", TradeType.Treaty, 20, 0)) for(entry in civInfo.getCivResources().filterNot { it.key.resourceType == ResourceType.Bonus }) { val resourceTradeType = if(entry.key.resourceType== ResourceType.Luxury) TradeType.Luxury_Resource else TradeType.Strategic_Resource @@ -32,6 +32,13 @@ class TradeLogic(val ourCivilization:CivilizationInfo, val otherCivilization: Ci offers.add(TradeOffer("Gold per turn".tr(), TradeType.Gold_Per_Turn, 30, civInfo.getStatsForNextTurn().gold.toInt())) for(city in civInfo.cities.filterNot { it.isCapital() }) offers.add(TradeOffer(city.name, TradeType.City, 0, 1)) + + val civsWeKnowAndTheyDont = civInfo.diplomacy.values.map { it.otherCiv() } + .filter { !otherCivilization.diplomacy.containsKey(it.civName) && it != otherCivilization } + for(thirdCiv in civsWeKnowAndTheyDont){ + offers.add(TradeOffer("Introduction to " + thirdCiv.civName, TradeType.Introduction, 0,1)) + } + return offers } @@ -76,6 +83,7 @@ class TradeLogic(val ourCivilization:CivilizationInfo, val otherCivilization: Ci return evaluatePeaceCostForThem() // Since it will be evaluated twice, once when they evaluate our offer and once when they evaluate theirs else return 1000 } + TradeType.Introduction -> return 250 // Dunno what this is? else -> return 1000 } @@ -127,6 +135,9 @@ class TradeLogic(val ourCivilization:CivilizationInfo, val otherCivilization: Ci unit.movementAlgs().teleportToClosestMoveableTile() } } + if(offer.type==TradeType.Introduction) + us.meetCivilization(us.gameInfo.civilizations + .first { it.civName==offer.name.split(" ")[2] }) } } diff --git a/core/src/com/unciv/logic/trade/TradeType.kt b/core/src/com/unciv/logic/trade/TradeType.kt index 083df87e27..4b01b7d62a 100644 --- a/core/src/com/unciv/logic/trade/TradeType.kt +++ b/core/src/com/unciv/logic/trade/TradeType.kt @@ -7,5 +7,6 @@ enum class TradeType{ Luxury_Resource, Strategic_Resource, Technology, + Introduction, City } \ No newline at end of file diff --git a/core/src/com/unciv/ui/trade/OffersList.kt b/core/src/com/unciv/ui/trade/OffersList.kt index 1bc01eaefa..ca15328eb6 100644 --- a/core/src/com/unciv/ui/trade/OffersList.kt +++ b/core/src/com/unciv/ui/trade/OffersList.kt @@ -24,7 +24,7 @@ class OffersList(val offers: TradeOffersList, val correspondingOffers: TradeOffe table.clear() for(offer in offers.sortedBy { it.type }) { var buttonText = offer.name.tr() - if(offer.type !in listOf(TradeType.Technology, TradeType.City)) buttonText+=" ("+offer.amount+")" + if(offer.type !in listOf(TradeType.Technology, TradeType.City, TradeType.Introduction)) buttonText+=" ("+offer.amount+")" if(offer.duration>1) buttonText+="\n"+offer.duration+" {turns}".tr() val tb = TextButton(buttonText, CameraStageBaseScreen.skin) val amountPerClick = diff --git a/core/src/com/unciv/ui/trade/TradeTable.kt b/core/src/com/unciv/ui/trade/TradeTable.kt index d67fdd7a53..74f4f20260 100644 --- a/core/src/com/unciv/ui/trade/TradeTable.kt +++ b/core/src/com/unciv/ui/trade/TradeTable.kt @@ -48,6 +48,7 @@ class TradeTable(val otherCivilization: CivilizationInfo, stage: Stage, onTradeC offerColumnsTableWrapper.add(offerColumnsTable) tradeText.setText("Pleasure doing business with you!".tr()) onTradeComplete() + tradeText.setText("Offer trade".tr()) } }