mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-29 06:51:30 -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.civilization.PlayerType
|
||||||
import com.unciv.logic.map.MapUnit
|
import com.unciv.logic.map.MapUnit
|
||||||
import com.unciv.logic.trade.TradeLogic
|
import com.unciv.logic.trade.TradeLogic
|
||||||
|
import com.unciv.logic.trade.TradeOffer
|
||||||
import com.unciv.logic.trade.TradeType
|
import com.unciv.logic.trade.TradeType
|
||||||
import com.unciv.models.gamebasics.GameBasics
|
import com.unciv.models.gamebasics.GameBasics
|
||||||
import com.unciv.models.gamebasics.tech.Technology
|
import com.unciv.models.gamebasics.tech.Technology
|
||||||
|
import com.unciv.models.gamebasics.tr
|
||||||
import com.unciv.ui.utils.getRandom
|
import com.unciv.ui.utils.getRandom
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
|
|
||||||
@ -26,20 +28,35 @@ class NextTurnAutomation{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun exchangeTechs(civInfo: CivilizationInfo) {
|
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)
|
val tradeLogic = TradeLogic(civInfo, otherCiv)
|
||||||
|
var ourGold = tradeLogic.ourAvailableOffers.first { it.type == TradeType.Gold }.amount
|
||||||
val ourTradableTechs = tradeLogic.ourAvailableOffers
|
val ourTradableTechs = tradeLogic.ourAvailableOffers
|
||||||
.filter { it.type == TradeType.Technology }
|
.filter { it.type == TradeType.Technology }
|
||||||
val theirTradableTechs = tradeLogic.theirAvailableOffers
|
val theirTradableTechs = tradeLogic.theirAvailableOffers
|
||||||
.filter { it.type == TradeType.Technology }
|
.filter { it.type == TradeType.Technology }
|
||||||
|
|
||||||
for (ourOffer in ourTradableTechs) {
|
for (theirOffer in theirTradableTechs) {
|
||||||
val theirOfferList = theirTradableTechs.filter{
|
val theirValue = tradeLogic.evaluateOffer(theirOffer, false)
|
||||||
tradeLogic.evaluateOffer(ourOffer, false) >= tradeLogic.evaluateOffer(it, false)
|
val ourOfferList = ourTradableTechs.filter{
|
||||||
&& !tradeLogic.currentTrade.theirOffers.contains(it) }
|
tradeLogic.evaluateOffer(it, false) == theirValue
|
||||||
if (theirOfferList.isNotEmpty()) {
|
&& !tradeLogic.currentTrade.ourOffers.contains(it) }
|
||||||
tradeLogic.currentTrade.ourOffers.add(ourOffer)
|
|
||||||
tradeLogic.currentTrade.theirOffers.add(theirOfferList.getRandom())
|
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