mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-28 14:24:43 -04:00
AI exchange techs strategy change.
This commit is contained in:
parent
d11cb4779b
commit
53c0bbb0a3
@ -5,9 +5,11 @@ import com.unciv.logic.civilization.CivilizationInfo
|
||||
import com.unciv.logic.civilization.PlayerType
|
||||
import com.unciv.logic.map.MapUnit
|
||||
import com.unciv.logic.trade.TradeLogic
|
||||
import com.unciv.logic.trade.TradeOffer
|
||||
import com.unciv.logic.trade.TradeType
|
||||
import com.unciv.models.gamebasics.GameBasics
|
||||
import com.unciv.models.gamebasics.tech.Technology
|
||||
import com.unciv.models.gamebasics.tr
|
||||
import com.unciv.ui.utils.getRandom
|
||||
import kotlin.math.min
|
||||
|
||||
@ -26,20 +28,35 @@ class NextTurnAutomation{
|
||||
}
|
||||
|
||||
private fun exchangeTechs(civInfo: CivilizationInfo) {
|
||||
for (otherCiv in civInfo.diplomacy.values.map { it.otherCiv() }.filter { it.playerType == PlayerType.AI }.sortedBy { it.tech.techsResearched.size }) {
|
||||
val otherCivList = civInfo.diplomacy.values.map { it.otherCiv() }.
|
||||
filter { it.playerType == PlayerType.AI && !it.isBarbarianCivilization() }.
|
||||
sortedBy { it.tech.techsResearched.size }
|
||||
|
||||
for (otherCiv in otherCivList) {
|
||||
val tradeLogic = TradeLogic(civInfo, otherCiv)
|
||||
var ourGold = tradeLogic.ourAvailableOffers.first { it.type == TradeType.Gold }.amount
|
||||
val ourTradableTechs = tradeLogic.ourAvailableOffers
|
||||
.filter { it.type == TradeType.Technology }
|
||||
val theirTradableTechs = tradeLogic.theirAvailableOffers
|
||||
.filter { it.type == TradeType.Technology }
|
||||
|
||||
for (ourOffer in ourTradableTechs) {
|
||||
val theirOfferList = theirTradableTechs.filter{
|
||||
tradeLogic.evaluateOffer(ourOffer, false) >= tradeLogic.evaluateOffer(it, false)
|
||||
&& !tradeLogic.currentTrade.theirOffers.contains(it) }
|
||||
if (theirOfferList.isNotEmpty()) {
|
||||
tradeLogic.currentTrade.ourOffers.add(ourOffer)
|
||||
tradeLogic.currentTrade.theirOffers.add(theirOfferList.getRandom())
|
||||
for (theirOffer in theirTradableTechs) {
|
||||
val theirValue = tradeLogic.evaluateOffer(theirOffer, false)
|
||||
val ourOfferList = ourTradableTechs.filter{
|
||||
tradeLogic.evaluateOffer(it, false) == theirValue
|
||||
&& !tradeLogic.currentTrade.ourOffers.contains(it) }
|
||||
|
||||
if (ourOfferList.isNotEmpty()) {
|
||||
tradeLogic.currentTrade.ourOffers.add(ourOfferList.getRandom())
|
||||
tradeLogic.currentTrade.theirOffers.add(theirOffer)
|
||||
} else {
|
||||
//try to buy tech with money, not spending more than 1/3 of treasury
|
||||
if (ourGold / 3 >= theirValue)
|
||||
{
|
||||
tradeLogic.currentTrade.ourOffers.add(TradeOffer("Gold".tr(), TradeType.Gold, 0, theirValue))
|
||||
tradeLogic.currentTrade.theirOffers.add(theirOffer)
|
||||
ourGold -= theirValue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user