mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-13 17:28:57 +07:00
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:
@ -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
|
||||||
|
@ -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,7 +161,8 @@ 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())
|
||||||
|
if (civ.tech.isResearched(obsoleteTech))
|
||||||
yield(RejectionReasonType.Obsoleted.toInstance("Obsolete by $obsoleteTech"))
|
yield(RejectionReasonType.Obsoleted.toInstance("Obsolete by $obsoleteTech"))
|
||||||
|
|
||||||
if (uniqueTo != null && uniqueTo != civ.civName)
|
if (uniqueTo != null && uniqueTo != civ.civName)
|
||||||
|
@ -658,21 +658,23 @@ 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
|
||||||
|
for (obsoleteTech: String in unit.techsThatObsoleteThis())
|
||||||
if (unit.upgradesTo!=null && ruleset.units.containsKey(unit.upgradesTo!!)
|
if (unit.upgradesTo!=null && ruleset.units.containsKey(unit.upgradesTo!!)
|
||||||
&& unit.obsoleteTech!=null && ruleset.technologies.containsKey(unit.obsoleteTech!!)) {
|
&& ruleset.technologies.containsKey(obsoleteTech)) {
|
||||||
val upgradedUnit = ruleset.units[unit.upgradesTo!!]!!
|
val upgradedUnit = ruleset.units[unit.upgradesTo!!]!!
|
||||||
for (requiredTech: String in upgradedUnit.requiredTechs())
|
for (requiredTech: String in upgradedUnit.requiredTechs())
|
||||||
if (requiredTech != unit.obsoleteTech
|
if (requiredTech != obsoleteTech
|
||||||
&& !getPrereqTree(unit.obsoleteTech!!).contains(requiredTech)
|
&& !getPrereqTree(obsoleteTech).contains(requiredTech)
|
||||||
)
|
)
|
||||||
lines.add(
|
lines.add(
|
||||||
"${unit.name} obsoletes at tech ${unit.obsoleteTech}," +
|
"${unit.name} obsoletes at tech ${obsoleteTech}," +
|
||||||
" and therefore ${requiredTech} for its upgrade ${upgradedUnit.name} may not yet be researched!",
|
" and therefore ${requiredTech} for its upgrade ${upgradedUnit.name} may not yet be researched!",
|
||||||
RulesetErrorSeverity.Warning
|
RulesetErrorSeverity.Warning
|
||||||
)
|
)
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user