Updated Commerce branch to G&K (#4129)

* Updated Commerce branch to G&K

* Implemented requested changes
This commit is contained in:
Xander Lenstra
2021-06-15 08:52:59 +02:00
committed by GitHub
parent 09f1deaee0
commit 434136e6cc
15 changed files with 1398 additions and 1364 deletions

View File

@ -369,7 +369,12 @@ class GameInfo {
if (!ruleSet.technologies.containsKey(tech))
civinfo.tech.techsResearched.remove(tech)
for (policy in civinfo.policies.adoptedPolicies.toList())
if (!ruleSet.policies.containsKey(policy))
// So these two policies are deprecated since 3.14.17
// However, we still need to convert save files that have those to valid save files
// The easiest way to do this, is just to allow them here, and filter them out in
// the policyManager class.
// Yes, this is ugly, but it should be temporary, and it works.
if (!ruleSet.policies.containsKey(policy) && !(policy == "Entrepreneurship" || policy == "Patronage"))
civinfo.policies.adoptedPolicies.remove(policy)
}
}

View File

@ -164,6 +164,7 @@ class CityInfo {
fun isWorked(tileInfo: TileInfo) = workedTiles.contains(tileInfo.position)
fun isCapital(): Boolean = cityConstructions.builtBuildings.contains(capitalCityIndicator())
fun isCoastal(): Boolean = centerTileInfo.isCoastalTile()
fun capitalCityIndicator(): String {
val indicatorBuildings = getRuleset().buildings.values.asSequence().filter { it.uniques.contains("Indicates the capital city") }
val civSpecificBuilding = indicatorBuildings.firstOrNull { it.uniqueTo == civInfo.civName }
@ -470,7 +471,7 @@ class CityInfo {
return when (filter) {
"in this city" -> true
"in all cities" -> true
"in all coastal cities" -> getCenterTile().isCoastalTile()
"in all coastal cities" -> isCoastal()
"in capital" -> isCapital()
"in all non-occupied cities" -> !cityStats.hasExtraAnnexUnhappiness() || isPuppet
"in all cities with a world wonder" -> cityConstructions.getBuiltBuildings().any { it.isWonder }

View File

@ -129,8 +129,13 @@ class CivInfoStats(val civInfo: CivilizationInfo) {
statMap["Base happiness"] = civInfo.getDifficulty().baseHappiness.toFloat()
var happinessPerUniqueLuxury = 4f + civInfo.getDifficulty().extraHappinessPerLuxury
for (unique in civInfo.getMatchingUniques("+1 happiness from each type of luxury resource"))
happinessPerUniqueLuxury += 1
for (unique in civInfo.getMatchingUniques("+[] happiness from each type of luxury resource"))
happinessPerUniqueLuxury += unique.params[0].toInt()
// Deprecated since 3.14.17
for (unique in civInfo.getMatchingUniques("+1 happiness from each type of luxury resource"))
happinessPerUniqueLuxury += 1
//
statMap["Luxury resources"] = civInfo.getCivResources().map { it.resource }
.count { it.resourceType === ResourceType.Luxury } * happinessPerUniqueLuxury

View File

@ -53,6 +53,16 @@ class PolicyManager {
fun getPolicyByName(name: String): Policy = civInfo.gameInfo.ruleSet.policies[name]!!
fun setTransients() {
// Reassign policies deprecated in 3.14.17, left for backwards compatibility
if (adoptedPolicies.contains("Patronage")) {
adoptedPolicies.add("Merchant Navy")
adoptedPolicies.remove("Patronage")
}
if (adoptedPolicies.contains("Entrepreneurship")) {
adoptedPolicies.add("Naval Tradition")
adoptedPolicies.remove("Entrepreneurship")
}
//
for (policyName in adoptedPolicies)
addPolicyToTransients(getPolicyByName(policyName))
// Deprecated since 3.14.17, left for backwards compatibility

View File

@ -140,12 +140,13 @@ class MapUnit {
var movement = baseUnit.movement
movement += getUniques().count { it.text == "+1 Movement" }
if (type.isWaterUnit() && !type.isCivilian()
&& civInfo.hasUnique("All military naval units receive +1 movement and +1 sight")
)
movement += 1
// Deprecated since 3.14.17
if (type.isMilitary() && type.isWaterUnit() && civInfo.hasUnique("All military naval units receive +1 movement and +1 sight")) {
movement += 1
}
//
for (unique in civInfo.getMatchingUniques("+[] Movement for all [] units"))
if (matchesFilter(unique.params[1]))
movement += unique.params[0].toInt()
@ -215,10 +216,12 @@ class MapUnit {
if (hasUnique("Limited Visibility")) visibilityRange -= 1
if (civInfo.hasUnique("+1 Sight for all land military units") && type.isMilitary() && type.isLandUnit())
visibilityRange += 1
if (type.isWaterUnit() && !type.isCivilian()
&& civInfo.hasUnique("All military naval units receive +1 movement and +1 sight")
)
visibilityRange += 1
// Deprecated since 3.14.17
if (type.isMilitary() && type.isWaterUnit() && civInfo.hasUnique("All military naval units receive +1 movement and +1 sight"))
visibilityRange += 1
//
for (unique in civInfo.getMatchingUniques("[] Sight when []"))
if (matchesFilter(unique.params[1]))
@ -889,13 +892,17 @@ class MapUnit {
}
fun matchesFilter(filter: String): Boolean {
if (baseUnit.matchesFilter(filter)) return true
if ((filter == "Wounded" || filter == "wounded units") && health < 100) return true
if (hasUnique(filter)) return true
if ((filter == "Barbarians" || filter == "Barbarian") && civInfo.isBarbarian()) return true
if (filter == "Embarked" && isEmbarked()) return true
return false
return when (filter) {
"Wounded", "wounded units" -> health < 100
"Barbarians", "Barbarian" -> civInfo.isBarbarian()
"Embarked" -> isEmbarked()
else -> {
if (baseUnit.matchesFilter(filter)) return true
if (hasUnique(filter)) return true
return false
}
}
}
//endregion
}
}

View File

@ -128,7 +128,7 @@ class BaseUnit : INamed, IConstruction {
}
fun getRejectionReason(cityConstructions: CityConstructions): String {
if (unitType.isWaterUnit() && !cityConstructions.cityInfo.getCenterTile().isCoastalTile())
if (unitType.isWaterUnit() && !cityConstructions.cityInfo.isCoastal())
return "Can only build water units in coastal cities"
val civInfo = cityConstructions.cityInfo.civInfo
for (unique in uniqueObjects.filter { it.placeholderText == "Not displayed as an available construction without []" }) {
@ -232,15 +232,18 @@ class BaseUnit : INamed, IConstruction {
}
fun matchesFilter(filter: String): Boolean {
if (filter == unitType.name) return true
if (filter == name) return true
if (filter == "All") return true
if ((filter == "Land" || filter == "land units") && unitType.isLandUnit()) return true
if ((filter == "Water" || filter == "water units") && unitType.isWaterUnit()) return true
if ((filter == "Air" || filter == "air units") && unitType.isAirUnit()) return true
if (filter == "non-air" && !unitType.isAirUnit()) return true
if ((filter == "Military" || filter == "military units") && unitType.isMilitary()) return true
return false
return when (filter) {
unitType.name -> true
name -> true
"All" -> true
"Land", "land units" -> unitType.isLandUnit()
"Water", "water units", "Water units" -> unitType.isWaterUnit()
"Air", "air units" -> unitType.isAirUnit()
"non-air" -> !unitType.isAirUnit()
"Military", "military units" -> unitType.isMilitary()
"military water" -> unitType.isMilitary() && unitType.isWaterUnit()
else -> false
}
}
fun isGreatPerson() = uniqueObjects.any { it.placeholderText == "Great Person - []" }
@ -253,4 +256,4 @@ class BaseUnit : INamed, IConstruction {
resourceRequirements[unique.params[1]] = unique.params[0].toInt()
return resourceRequirements
}
}
}