mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-06 16:28:40 +07:00
Added autoreplace for deprecated modifiers
This commit is contained in:
@ -1,30 +1,34 @@
|
|||||||
package com.unciv.models.ruleset.validation
|
package com.unciv.models.ruleset.validation
|
||||||
|
|
||||||
|
import com.unciv.models.ruleset.IRulesetObject
|
||||||
import com.unciv.models.ruleset.Ruleset
|
import com.unciv.models.ruleset.Ruleset
|
||||||
import com.unciv.models.ruleset.unique.Unique
|
import com.unciv.models.ruleset.unique.Unique
|
||||||
import com.unciv.utils.Log
|
import com.unciv.utils.Log
|
||||||
import com.unciv.utils.debug
|
import com.unciv.utils.debug
|
||||||
|
|
||||||
object UniqueAutoUpdater{
|
object UniqueAutoUpdater {
|
||||||
|
|
||||||
|
private val fileToObjects: Map<String, (Ruleset) -> LinkedHashMap<String, out IRulesetObject>> = mapOf(
|
||||||
|
"Beliefs.json" to { it.beliefs },
|
||||||
|
"Buildings.json" to { it.buildings },
|
||||||
|
"Nations.json" to { it.nations },
|
||||||
|
"Policies.json" to { it.policies },
|
||||||
|
"Techs.json" to { it.technologies },
|
||||||
|
"Terrains.json" to { it.terrains },
|
||||||
|
"TileImprovements.json" to { it.tileImprovements },
|
||||||
|
"UnitPromotions.json" to { it.unitPromotions },
|
||||||
|
"UnitTypes.json" to { it.unitTypes },
|
||||||
|
"Units.json" to { it.units },
|
||||||
|
"Ruins.json" to { it.ruinRewards },
|
||||||
|
// Note this does not currently
|
||||||
|
"Events.json" to { it.events }
|
||||||
|
)
|
||||||
|
|
||||||
fun autoupdateUniques(
|
fun autoupdateUniques(
|
||||||
mod: Ruleset,
|
mod: Ruleset,
|
||||||
replaceableUniques: HashMap<String, String> = getDeprecatedReplaceableUniques(mod)
|
replaceableUniques: HashMap<String, String> = getDeprecatedReplaceableUniques(mod)
|
||||||
) {
|
) {
|
||||||
val filesToReplace = listOf(
|
val filesToReplace = fileToObjects.keys
|
||||||
"Beliefs.json",
|
|
||||||
"Buildings.json",
|
|
||||||
"Nations.json",
|
|
||||||
"Policies.json",
|
|
||||||
"Techs.json",
|
|
||||||
"Terrains.json",
|
|
||||||
"TileImprovements.json",
|
|
||||||
"UnitPromotions.json",
|
|
||||||
"UnitTypes.json",
|
|
||||||
"Units.json",
|
|
||||||
"Ruins.json"
|
|
||||||
)
|
|
||||||
|
|
||||||
val jsonFolder = mod.folderLocation!!.child("jsons")
|
val jsonFolder = mod.folderLocation!!.child("jsons")
|
||||||
for (fileName in filesToReplace) {
|
for (fileName in filesToReplace) {
|
||||||
val file = jsonFolder.child(fileName)
|
val file = jsonFolder.child(fileName)
|
||||||
@ -32,6 +36,7 @@ object UniqueAutoUpdater{
|
|||||||
var newFileText = file.readString()
|
var newFileText = file.readString()
|
||||||
for ((original, replacement) in replaceableUniques) {
|
for ((original, replacement) in replaceableUniques) {
|
||||||
newFileText = newFileText.replace("\"$original\"", "\"$replacement\"")
|
newFileText = newFileText.replace("\"$original\"", "\"$replacement\"")
|
||||||
|
newFileText = newFileText.replace("<$original>", "<$replacement>") // For modifiers
|
||||||
}
|
}
|
||||||
file.writeString(newFileText, false)
|
file.writeString(newFileText, false)
|
||||||
}
|
}
|
||||||
@ -40,20 +45,7 @@ object UniqueAutoUpdater{
|
|||||||
|
|
||||||
|
|
||||||
fun getDeprecatedReplaceableUniques(mod: Ruleset): HashMap<String, String> {
|
fun getDeprecatedReplaceableUniques(mod: Ruleset): HashMap<String, String> {
|
||||||
|
val objectsToCheck = fileToObjects.values.map { it(mod) }
|
||||||
val objectsToCheck = sequenceOf(
|
|
||||||
mod.beliefs,
|
|
||||||
mod.buildings,
|
|
||||||
mod.nations,
|
|
||||||
mod.policies,
|
|
||||||
mod.technologies,
|
|
||||||
mod.terrains,
|
|
||||||
mod.tileImprovements,
|
|
||||||
mod.unitPromotions,
|
|
||||||
mod.unitTypes,
|
|
||||||
mod.units,
|
|
||||||
mod.ruinRewards
|
|
||||||
)
|
|
||||||
val allDeprecatedUniques = HashSet<String>()
|
val allDeprecatedUniques = HashSet<String>()
|
||||||
val deprecatedUniquesToReplacementText = HashMap<String, String>()
|
val deprecatedUniquesToReplacementText = HashMap<String, String>()
|
||||||
|
|
||||||
@ -62,13 +54,16 @@ object UniqueAutoUpdater{
|
|||||||
.flatMap { it.uniqueObjects }
|
.flatMap { it.uniqueObjects }
|
||||||
.filter { it.getDeprecationAnnotation() != null }
|
.filter { it.getDeprecationAnnotation() != null }
|
||||||
|
|
||||||
for (deprecatedUnique in deprecatedUniques) {
|
val deprecatedConditionals = objectsToCheck
|
||||||
|
.flatMap { it.values }
|
||||||
|
.flatMap { it.uniqueObjects }
|
||||||
|
.flatMap { it.conditionals }
|
||||||
|
.filter { it.getDeprecationAnnotation() != null }
|
||||||
|
|
||||||
|
for (deprecatedUnique in deprecatedUniques + deprecatedConditionals) {
|
||||||
if (allDeprecatedUniques.contains(deprecatedUnique.text)) continue
|
if (allDeprecatedUniques.contains(deprecatedUnique.text)) continue
|
||||||
allDeprecatedUniques.add(deprecatedUnique.text)
|
allDeprecatedUniques.add(deprecatedUnique.text)
|
||||||
|
|
||||||
// note that this replacement does not contain conditionals attached to the original!
|
|
||||||
|
|
||||||
|
|
||||||
var uniqueReplacementText = deprecatedUnique.getReplacementText(mod)
|
var uniqueReplacementText = deprecatedUnique.getReplacementText(mod)
|
||||||
while (Unique(uniqueReplacementText).getDeprecationAnnotation() != null)
|
while (Unique(uniqueReplacementText).getDeprecationAnnotation() != null)
|
||||||
uniqueReplacementText = Unique(uniqueReplacementText).getReplacementText(mod)
|
uniqueReplacementText = Unique(uniqueReplacementText).getReplacementText(mod)
|
||||||
@ -102,6 +97,7 @@ object UniqueAutoUpdater{
|
|||||||
deprecatedUniquesToReplacementText[deprecatedUnique.text] = uniqueReplacementText
|
deprecatedUniquesToReplacementText[deprecatedUnique.text] = uniqueReplacementText
|
||||||
debug("Replace \"%s\" with \"%s\"", deprecatedUnique.text, uniqueReplacementText)
|
debug("Replace \"%s\" with \"%s\"", deprecatedUnique.text, uniqueReplacementText)
|
||||||
}
|
}
|
||||||
|
|
||||||
return deprecatedUniquesToReplacementText
|
return deprecatedUniquesToReplacementText
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -137,7 +137,7 @@ class UniqueValidator(val ruleset: Ruleset) {
|
|||||||
var text = "$prefix contains the conditional \"${conditional.text}\"," +
|
var text = "$prefix contains the conditional \"${conditional.text}\"," +
|
||||||
" which is of an unknown type!"
|
" which is of an unknown type!"
|
||||||
|
|
||||||
val similarConditionals = UniqueType.values().filter {
|
val similarConditionals = UniqueType.entries.filter {
|
||||||
getRelativeTextDistance(
|
getRelativeTextDistance(
|
||||||
it.placeholderText,
|
it.placeholderText,
|
||||||
conditional.placeholderText
|
conditional.placeholderText
|
||||||
@ -169,7 +169,7 @@ class UniqueValidator(val ruleset: Ruleset) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
if (unique.type in resourceUniques && conditional.type in resourceConditionals
|
if (unique.type in resourceUniques && conditional.type in resourceConditionals
|
||||||
&& ruleset.tileResources[conditional.params.last()]?.let { it.hasUnique(UniqueType.CityResource) } == true)
|
&& ruleset.tileResources[conditional.params.last()]?.hasUnique(UniqueType.CityResource) == true)
|
||||||
rulesetErrors.add(
|
rulesetErrors.add(
|
||||||
"$prefix contains the conditional \"${conditional.text}\"," +
|
"$prefix contains the conditional \"${conditional.text}\"," +
|
||||||
" which references a citywide resource. This is not a valid conditional for a resource uniques, " +
|
" which references a citywide resource. This is not a valid conditional for a resource uniques, " +
|
||||||
@ -184,14 +184,14 @@ class UniqueValidator(val ruleset: Ruleset) {
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
rulesetErrors.add(
|
rulesetErrors.add(
|
||||||
"$prefix contains conditional \"${conditional.text}\"." +
|
"$prefix contains modifier \"${conditional.text}\"." +
|
||||||
" This contains the parameter ${complianceError.parameterName} which does not fit parameter type" +
|
" This contains the parameter ${complianceError.parameterName} which does not fit parameter type" +
|
||||||
" ${complianceError.acceptableParameterTypes.joinToString(" or ") { it.parameterName }} !",
|
" ${complianceError.acceptableParameterTypes.joinToString(" or ") { it.parameterName }} !",
|
||||||
complianceError.errorSeverity.getRulesetErrorSeverity(), uniqueContainer, unique
|
complianceError.errorSeverity.getRulesetErrorSeverity(), uniqueContainer, unique
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
addDeprecationAnnotationErrors(conditional, "$prefix contains conditional \"${conditional.text}\" which", rulesetErrors, uniqueContainer)
|
addDeprecationAnnotationErrors(conditional, "$prefix contains modifier \"${conditional.text}\" which", rulesetErrors, uniqueContainer)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addDeprecationAnnotationErrors(
|
private fun addDeprecationAnnotationErrors(
|
||||||
@ -283,7 +283,7 @@ class UniqueValidator(val ruleset: Ruleset) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun tryFixUnknownUnique(unique: Unique, uniqueContainer: IHasUniques?, prefix: String): RulesetErrorList {
|
private fun tryFixUnknownUnique(unique: Unique, uniqueContainer: IHasUniques?, prefix: String): RulesetErrorList {
|
||||||
val similarUniques = UniqueType.values().filter {
|
val similarUniques = UniqueType.entries.filter {
|
||||||
getRelativeTextDistance(
|
getRelativeTextDistance(
|
||||||
it.placeholderText,
|
it.placeholderText,
|
||||||
unique.placeholderText
|
unique.placeholderText
|
||||||
|
Reference in New Issue
Block a user