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
This commit is contained in:
SeventhM 2023-12-30 10:53:22 -08:00 committed by GitHub
parent 2768042700
commit 24c888ef19
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 29 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -31,6 +31,8 @@ class PolicyManager : IsPartOfGameInfoSerialization {
internal val adoptedPolicies = HashSet<String>()
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) }
}

View File

@ -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})",

View File

@ -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),

View File

@ -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,

View File

@ -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 =