Wrap BaseUnit.obsoleteTech into function (#10648)

* Update BaseUnit.kt

* Update BaseUnit.kt

* Update TechManager.kt

* Update BaseUnit.kt

* Update RulesetValidator.kt

* Update BasicTests.kt
This commit is contained in:
dHannasch
2023-12-03 13:26:16 -07:00
committed by GitHub
parent f8315de414
commit 155498dc43
4 changed files with 23 additions and 18 deletions

View File

@ -349,7 +349,7 @@ class TechManager : IsPartOfGameInfoSerialization {
return civInfo.getEquivalentUnit(upgradesTo!!) return civInfo.getEquivalentUnit(upgradesTo!!)
} }
val obsoleteUnits = getRuleset().units.asSequence() val obsoleteUnits = getRuleset().units.asSequence()
.filter { it.value.obsoleteTech == techName } .filter { it.value.isObsoletedBy(techName) }
.map { it.key to it.value.getEquivalentUpgradeOrNull() } .map { it.key to it.value.getEquivalentUpgradeOrNull() }
.toMap() .toMap()
if (obsoleteUnits.isEmpty()) return if (obsoleteUnits.isEmpty()) return

View File

@ -48,6 +48,8 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
var replacementTextForUniques = "" var replacementTextForUniques = ""
var promotions = HashSet<String>() var promotions = HashSet<String>()
var obsoleteTech: String? = null var obsoleteTech: String? = null
fun techsThatObsoleteThis(): Sequence<String> = if (obsoleteTech == null) sequenceOf() else sequenceOf(obsoleteTech!!)
fun isObsoletedBy(techName: String): Boolean = techsThatObsoleteThis().contains(techName)
var upgradesTo: String? = null var upgradesTo: String? = null
var replaces: String? = null var replaces: String? = null
var uniqueTo: String? = null var uniqueTo: String? = null
@ -159,8 +161,9 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
for (requiredTech: String in requiredTechs()) for (requiredTech: String in requiredTechs())
if (!civ.tech.isResearched(requiredTech)) if (!civ.tech.isResearched(requiredTech))
yield(RejectionReasonType.RequiresTech.toInstance("$requiredTech not researched")) yield(RejectionReasonType.RequiresTech.toInstance("$requiredTech not researched"))
if (obsoleteTech != null && civ.tech.isResearched(obsoleteTech!!)) for (obsoleteTech: String in techsThatObsoleteThis())
yield(RejectionReasonType.Obsoleted.toInstance("Obsolete by $obsoleteTech")) if (civ.tech.isResearched(obsoleteTech))
yield(RejectionReasonType.Obsoleted.toInstance("Obsolete by $obsoleteTech"))
if (uniqueTo != null && uniqueTo != civ.civName) if (uniqueTo != null && uniqueTo != civ.civName)
yield(RejectionReasonType.UniqueToOtherNation.toInstance("Unique to $uniqueTo")) yield(RejectionReasonType.UniqueToOtherNation.toInstance("Unique to $uniqueTo"))

View File

@ -658,25 +658,27 @@ class RulesetValidator(val ruleset: Ruleset) {
for (requiredTech: String in unit.requiredTechs()) for (requiredTech: String in unit.requiredTechs())
if (!ruleset.technologies.containsKey(requiredTech)) if (!ruleset.technologies.containsKey(requiredTech))
lines += "${unit.name} requires tech ${requiredTech} which does not exist!" lines += "${unit.name} requires tech ${requiredTech} which does not exist!"
if (unit.obsoleteTech != null && !ruleset.technologies.containsKey(unit.obsoleteTech!!)) for (obsoleteTech: String in unit.techsThatObsoleteThis())
lines += "${unit.name} obsoletes at tech ${unit.obsoleteTech} which does not exist!" if (!ruleset.technologies.containsKey(obsoleteTech))
lines += "${unit.name} obsoletes at tech ${obsoleteTech} which does not exist!"
if (unit.upgradesTo != null && !ruleset.units.containsKey(unit.upgradesTo!!)) if (unit.upgradesTo != null && !ruleset.units.containsKey(unit.upgradesTo!!))
lines += "${unit.name} upgrades to unit ${unit.upgradesTo} which does not exist!" lines += "${unit.name} upgrades to unit ${unit.upgradesTo} which does not exist!"
// Check that we don't obsolete ourselves before we can upgrade // Check that we don't obsolete ourselves before we can upgrade
if (unit.upgradesTo!=null && ruleset.units.containsKey(unit.upgradesTo!!) for (obsoleteTech: String in unit.techsThatObsoleteThis())
&& unit.obsoleteTech!=null && ruleset.technologies.containsKey(unit.obsoleteTech!!)) { if (unit.upgradesTo!=null && ruleset.units.containsKey(unit.upgradesTo!!)
val upgradedUnit = ruleset.units[unit.upgradesTo!!]!! && ruleset.technologies.containsKey(obsoleteTech)) {
for (requiredTech: String in upgradedUnit.requiredTechs()) val upgradedUnit = ruleset.units[unit.upgradesTo!!]!!
if (requiredTech != unit.obsoleteTech for (requiredTech: String in upgradedUnit.requiredTechs())
&& !getPrereqTree(unit.obsoleteTech!!).contains(requiredTech) if (requiredTech != obsoleteTech
) && !getPrereqTree(obsoleteTech).contains(requiredTech)
lines.add(
"${unit.name} obsoletes at tech ${unit.obsoleteTech}," +
" and therefore ${requiredTech} for its upgrade ${upgradedUnit.name} may not yet be researched!",
RulesetErrorSeverity.Warning
) )
} lines.add(
"${unit.name} obsoletes at tech ${obsoleteTech}," +
" and therefore ${requiredTech} for its upgrade ${upgradedUnit.name} may not yet be researched!",
RulesetErrorSeverity.Warning
)
}
for (resource in unit.getResourceRequirementsPerTurn(StateForConditionals.IgnoreConditionals).keys) for (resource in unit.getResourceRequirementsPerTurn(StateForConditionals.IgnoreConditionals).keys)
if (!ruleset.tileResources.containsKey(resource)) if (!ruleset.tileResources.containsKey(resource))

View File

@ -68,7 +68,7 @@ class BasicTests {
val units: Collection<BaseUnit> = ruleset.units.values val units: Collection<BaseUnit> = ruleset.units.values
var allObsoletingUnitsHaveUpgrades = true var allObsoletingUnitsHaveUpgrades = true
for (unit in units) { for (unit in units) {
if (unit.obsoleteTech != null && unit.upgradesTo == null && unit.name !="Scout" ) { if (unit.techsThatObsoleteThis().any() && unit.upgradesTo == null && unit.name !="Scout" ) {
debug("%s obsoletes but has no upgrade", unit.name) debug("%s obsoletes but has no upgrade", unit.name)
allObsoletingUnitsHaveUpgrades = false allObsoletingUnitsHaveUpgrades = false
} }