From 24c888ef19fe7b2a72d3f492ee4448cf2cd10129 Mon Sep 17 00:00:00 2001 From: SeventhM <127357473+SeventhM@users.noreply.github.com> Date: Sat, 30 Dec 2023 10:53:22 -0800 Subject: [PATCH] Initial Great Writer functionality (#10721) * Initial Great Writer functionality * Cleanup code * And then ignore the fact that I cleaned it * Temporary copy of Culture icon for unitActionIcons --- .../UnitActionIcons/HurryPolicy.png | Bin 0 -> 1079 bytes .../logic/civilization/managers/PolicyManager.kt | 13 +++++++++++++ core/src/com/unciv/models/UnitAction.kt | 2 ++ .../unciv/models/ruleset/unique/UniqueType.kt | 1 + .../worldscreen/unit/actions/UnitActions.kt | 1 + .../unit/actions/UnitActionsGreatPerson.kt | 12 ++++++++++++ 6 files changed, 29 insertions(+) create mode 100644 android/Images.Construction/UnitActionIcons/HurryPolicy.png diff --git a/android/Images.Construction/UnitActionIcons/HurryPolicy.png b/android/Images.Construction/UnitActionIcons/HurryPolicy.png new file mode 100644 index 0000000000000000000000000000000000000000..b2f3cc823406b80c26d61d9391caa0957f504a03 GIT binary patch literal 1079 zcmV-71jze|P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1I$T8K~#8N?VQQ0 zO>qFnpD|NJgfd5_k|H)jnTm~tENtwEV)3$LVI{IrhLkAf4-m>i$$}&$^H}E0Q|6iP z_x#T9o!@<(_ujc@_?>(2`+n-v`JLOnZ*jiwoZoz!gb+dqA%qY@2qAZQUW(ZLk*Zfy&^o&Q6ScHa10a$lQasvS-ij-6nh=o1%9q=o3e`h@e8+jzWP|^fqSr6UcS=ks! z^84KB?EeJ^V6!P!Fc>Z|MZa|RKz_kp@Hph1VPPk6nJM~3&q))+2KX{Ki zikDlSIS9xt1!p1WzquJ_2()m)8~+9uD~J?uwcr|f1@fZv;wSME+zHt_az9VH>O{ma z8=in{|GO78iwYzKd_*mV{4cL&rFs$-ND3yx8!+yIX0>huDXW#$4{}lSl;BLXP*x!G z;388LE@cHWA9CH3Xhm6p%n6U86=eld^xeUVy)G#$kfP@t*tslik|_&i1#&k$76spx z#htiyM_GYzX0FJ`%6Z5cK#`Eqkn`7WXD%6mU;QlC8?s$dTZUP^5qxFL%Sd z1{FWUJd3M0Zx*wg7;wD#cofI5_7b8H7u)v(y;JR zvl(87A7NXMGS)kMtrGWgY=V;@hw>YOT71=be>e?Jg&d-1i;0gmHe;VbPS5h?V;s6? xB`$;zLI@#*5JCtcgb+dqA%qY@h=!-B=|8nn+L!pls?-1g002ovPDHLkV1h6z;BWu{ literal 0 HcmV?d00001 diff --git a/core/src/com/unciv/logic/civilization/managers/PolicyManager.kt b/core/src/com/unciv/logic/civilization/managers/PolicyManager.kt index 47b71a3fc7..37a798fd61 100644 --- a/core/src/com/unciv/logic/civilization/managers/PolicyManager.kt +++ b/core/src/com/unciv/logic/civilization/managers/PolicyManager.kt @@ -31,6 +31,8 @@ class PolicyManager : IsPartOfGameInfoSerialization { internal val adoptedPolicies = HashSet() var numberOfAdoptedPolicies = 0 + var cultureOfLast8Turns = IntArray(8) { 0 } + /** Indicates whether we should *check* if policy is adoptible, and if so open */ var shouldOpenPolicyPicker = false @@ -90,6 +92,7 @@ class PolicyManager : IsPartOfGameInfoSerialization { toReturn.freePolicies = freePolicies toReturn.shouldOpenPolicyPicker = shouldOpenPolicyPicker toReturn.storedCulture = storedCulture + toReturn.cultureOfLast8Turns = cultureOfLast8Turns.clone() return toReturn } @@ -121,6 +124,7 @@ class PolicyManager : IsPartOfGameInfoSerialization { fun endTurn(culture: Int) { addCulture(culture) + addCurrentCultureToCultureOfLast8Turns(culture) } // from https://forums.civfanatics.com/threads/the-number-crunching-thread.389702/ @@ -251,6 +255,15 @@ class PolicyManager : IsPartOfGameInfoSerialization { } } + + fun getCultureFromGreatWriter(): Int { + return (cultureOfLast8Turns.sum() * civInfo.gameInfo.speed.cultureCostModifier).toInt() + } + + private fun addCurrentCultureToCultureOfLast8Turns(culture: Int) { + cultureOfLast8Turns[civInfo.gameInfo.turns % 8] = culture + } + fun allPoliciesAdopted(checkEra: Boolean) = getRulesetPolicies().values.none { isAdoptable(it, checkEra) } } diff --git a/core/src/com/unciv/models/UnitAction.kt b/core/src/com/unciv/models/UnitAction.kt index 5459b49963..76d9bad18d 100644 --- a/core/src/com/unciv/models/UnitAction.kt +++ b/core/src/com/unciv/models/UnitAction.kt @@ -143,6 +143,8 @@ enum class UnitActionType( null, false, UncivSound.Chimes), HurryResearch("{Hurry Research} (${Fonts.death})", { ImageGetter.getUnitActionPortrait("HurryResearch") }, UncivSound.Chimes), + HurryPolicy("{Hurry Policy} (${Fonts.death})", + { ImageGetter.getUnitActionPortrait("HurryPolicy") }, UncivSound.Chimes), StartGoldenAge("Start Golden Age", { ImageGetter.getUnitActionPortrait("StartGoldenAge") }, UncivSound.Chimes), HurryWonder("{Hurry Wonder} (${Fonts.death})", diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 265efed67f..a29e8b3822 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -342,6 +342,7 @@ enum class UniqueType( CanSpeedupConstruction("Can speed up construction of a building", UniqueTarget.Unit), CanSpeedupWonderConstruction("Can speed up the construction of a wonder", UniqueTarget.Unit), CanHurryResearch("Can hurry technology research", UniqueTarget.Unit), + CanHurryPolicy("Can generate a large amount of culture", UniqueTarget.Unit), CanTradeWithCityStateForGoldAndInfluence("Can undertake a trade mission with City-State, giving a large sum of gold and [amount] Influence", UniqueTarget.Unit), CanTransform("Can transform to [unit]", UniqueTarget.Unit), diff --git a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt index 68515e2d70..b24819a3d4 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt @@ -43,6 +43,7 @@ object UnitActions { UnitActionType.ConnectRoad to UnitActionsFromUniques::getConnectRoadActions, UnitActionType.Repair to UnitActionsFromUniques::getRepairActions, UnitActionType.HurryResearch to UnitActionsGreatPerson::getHurryResearchActions, + UnitActionType.HurryPolicy to UnitActionsGreatPerson::getHurryPolicyActions, UnitActionType.HurryWonder to UnitActionsGreatPerson::getHurryWonderActions, UnitActionType.HurryBuilding to UnitActionsGreatPerson::getHurryBuildingActions, UnitActionType.ConductTradeMission to UnitActionsGreatPerson::getConductTradeMissionActions, diff --git a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsGreatPerson.kt b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsGreatPerson.kt index ad2aed18b9..fd18075dbd 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsGreatPerson.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsGreatPerson.kt @@ -29,6 +29,18 @@ object UnitActionsGreatPerson { } }.asIterable() + fun getHurryPolicyActions(unit:MapUnit, tile: Tile) = sequence { + for (unique in unit.getMatchingUniques(UniqueType.CanHurryPolicy)){ + yield(UnitAction( + UnitActionType.HurryPolicy, + action = { + unit.civ.policies.addCulture(unit.civ.policies.getCultureFromGreatWriter()) + unit.consume() + }.takeIf {unit.currentMovement > 0} + )) + } + }.asIterable() + fun getHurryWonderActions(unit: MapUnit, tile: Tile) = sequence { for (unique in unit.getMatchingUniques(UniqueType.CanSpeedupWonderConstruction)) { val canHurryWonder =