From c932fffc323cdae2f1aefb77bd8e8ef5a809ecac Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sun, 6 May 2018 10:38:45 +0300 Subject: [PATCH] Enemy civs now adopt policies when they can --- core/src/com/unciv/UnCivGame.kt | 7 ++----- core/src/com/unciv/logic/Automation.kt | 7 +++++++ .../unciv/logic/civilization/PolicyManager.kt | 20 +++++++++++++------ .../src/com/unciv/models/gamebasics/Policy.kt | 11 +++++----- .../ui/pickerscreens/PolicyPickerScreen.kt | 12 +++-------- 5 files changed, 31 insertions(+), 26 deletions(-) diff --git a/core/src/com/unciv/UnCivGame.kt b/core/src/com/unciv/UnCivGame.kt index aeced6fbd4..dacca61fdf 100644 --- a/core/src/com/unciv/UnCivGame.kt +++ b/core/src/com/unciv/UnCivGame.kt @@ -129,12 +129,9 @@ class UnCivGame : Game() { branch.branch = branch.name for (policy in branch.policies) { policy.branch = branch.name - if (policy.requires == null) { - policy.requires = ArrayList() - policy.requires!!.add(branch.name) - } + if (policy.requires == null) policy.requires = arrayListOf(branch.name) } - branch.policies[branch.policies.size - 1].name = branch.name + " Complete" + branch.policies.last().name = branch.name + " Complete" } } diff --git a/core/src/com/unciv/logic/Automation.kt b/core/src/com/unciv/logic/Automation.kt index b6110818b4..7920e7ada1 100644 --- a/core/src/com/unciv/logic/Automation.kt +++ b/core/src/com/unciv/logic/Automation.kt @@ -47,6 +47,13 @@ class Automation { civInfo.tech.techsResearched.add(techToResearch!!.name) } + while(civInfo.policies.canAdoptPolicy()){ + val adoptablePolicies = GameBasics.PolicyBranches.values.flatMap { it.policies.union(listOf(it))} + .filter { civInfo.policies.isAdoptable(it) } + val policyToAdopt = adoptablePolicies.getRandom() + civInfo.policies.adopt(policyToAdopt) + } + for (unit in civInfo.getCivUnits()) { automateUnitMoves(unit) } diff --git a/core/src/com/unciv/logic/civilization/PolicyManager.kt b/core/src/com/unciv/logic/civilization/PolicyManager.kt index 7dd2a4c3a2..c5ce625af2 100644 --- a/core/src/com/unciv/logic/civilization/PolicyManager.kt +++ b/core/src/com/unciv/logic/civilization/PolicyManager.kt @@ -34,15 +34,23 @@ class PolicyManager { fun isAdopted(policyName: String): Boolean = adoptedPolicies.contains(policyName) - fun canAdoptPolicy(): Boolean = storedCulture >= getCultureNeededForNextPolicy() + fun isAdoptable(policy: Policy) = getAdoptedPolicies().containsAll(policy.requires!!) + + fun canAdoptPolicy(): Boolean = freePolicies>0 || storedCulture >= getCultureNeededForNextPolicy() + + fun adopt(policy: Policy, branchCompletion: Boolean =false) { + if (freePolicies > 0) + freePolicies-- + else + storedCulture -= getCultureNeededForNextPolicy() - fun adopt(policy: Policy) { adoptedPolicies.add(policy.name) - val branch = GameBasics.PolicyBranches[policy.branch]!! - - if (branch.policies.count { isAdopted(it.name) } == branch.policies.size - 1) { // All done apart from branch completion - adopt(branch.policies.last()) // add branch completion! + if(!branchCompletion) { + val branch = GameBasics.PolicyBranches[policy.branch]!! + if (branch.policies.count { isAdopted(it.name) } == branch.policies.size - 1) { // All done apart from branch completion + adopt(branch.policies.last(), true) // add branch completion! + } } when(policy.name ) { diff --git a/core/src/com/unciv/models/gamebasics/Policy.kt b/core/src/com/unciv/models/gamebasics/Policy.kt index 0a058dde27..90f9e2dbc7 100644 --- a/core/src/com/unciv/models/gamebasics/Policy.kt +++ b/core/src/com/unciv/models/gamebasics/Policy.kt @@ -4,11 +4,10 @@ import com.unciv.models.stats.INamed open class Policy : INamed { override lateinit var name: String - @JvmField var description: String? = null - @JvmField var branch: String? = null - @JvmField var row: Int = 0 - @JvmField var column: Int = 0 - @JvmField var requires: ArrayList? = null - + var description: String? = null + var branch: String? = null + var row: Int = 0 + var column: Int = 0 + var requires: ArrayList? = null } diff --git a/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt index d3485b3e6d..71dd0c41c6 100644 --- a/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt @@ -41,12 +41,7 @@ class PolicyPickerScreen(internal val civInfo: CivilizationInfo) : PickerScreen( } rightSideButton.addClickListener { - if (policies.freePolicies > 0) - policies.freePolicies-- - else - policies.storedCulture -= policies.getCultureNeededForNextPolicy() civInfo.policies.adopt(pickedPolicy!!) - game.screen = PolicyPickerScreen(civInfo) } @@ -79,7 +74,7 @@ class PolicyPickerScreen(internal val civInfo: CivilizationInfo) : PickerScreen( branchTable.pack() branchGroup.add(branchTable).height(150f).row() - branchGroup.add(getPolicyButton(branch.policies[branch.policies.size - 1], false)) // finisher + branchGroup.add(getPolicyButton(branch.policies.last(), false)) // finisher topTable.add(branchGroup) } @@ -89,7 +84,7 @@ class PolicyPickerScreen(internal val civInfo: CivilizationInfo) : PickerScreen( private fun pickPolicy(policy: Policy) { if (civInfo.policies.isAdopted(policy.name) || policy.name.endsWith("Complete") - || !civInfo.policies.getAdoptedPolicies().containsAll(policy.requires!!) + || !civInfo.policies.isAdoptable(policy) || !civInfo.policies.canAdoptPolicy()) { rightSideButton.disable() } else { @@ -112,8 +107,7 @@ class PolicyPickerScreen(internal val civInfo: CivilizationInfo) : PickerScreen( if (civInfo.policies.isAdopted(policy.name)) { // existing policyButton.color = Color.GREEN - } else if (!civInfo.policies. - getAdoptedPolicies().containsAll(policy.requires!!)) + } else if (!civInfo.policies.isAdoptable(policy)) // non-available { policyButton.color = Color.GRAY