mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-28 14:24:43 -04:00
Improve Unique.getReplacementText
(#6265)
This commit is contained in:
parent
2f980abd72
commit
617f801558
@ -63,21 +63,43 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s
|
|||||||
|
|
||||||
// Here, for once, we DO want the conditional placeholder parameters together with the regular ones,
|
// Here, for once, we DO want the conditional placeholder parameters together with the regular ones,
|
||||||
// so we cheat the conditional detector by removing the '<'
|
// so we cheat the conditional detector by removing the '<'
|
||||||
|
// note this is only done for the replacement, not the deprecated unique, thus parameters of
|
||||||
|
// conditionals on the deprecated unique are ignored
|
||||||
|
|
||||||
val finalPossibleUniques = ArrayList<String>()
|
val finalPossibleUniques = ArrayList<String>()
|
||||||
|
|
||||||
for (possibleUnique in possibleUniques) {
|
for (possibleUnique in possibleUniques) {
|
||||||
|
var resultingUnique = possibleUnique
|
||||||
for (parameter in possibleUnique.replace('<', ' ').getPlaceholderParameters()) {
|
for (parameter in possibleUnique.replace('<', ' ').getPlaceholderParameters()) {
|
||||||
val parameterNumberInDeprecatedUnique =
|
val parameterHasSign = parameter.startsWith('-') || parameter.startsWith('+')
|
||||||
deprecatedUniquePlaceholders.indexOf(
|
val parameterUnsigned = if (parameterHasSign) parameter.drop(1) else parameter
|
||||||
parameter.removePrefix("+").removePrefix("-")
|
val parameterNumberInDeprecatedUnique = deprecatedUniquePlaceholders.indexOf(parameterUnsigned)
|
||||||
)
|
if (parameterNumberInDeprecatedUnique !in params.indices) continue
|
||||||
if (parameterNumberInDeprecatedUnique == -1) continue
|
val positionInDeprecatedUnique = type.text.indexOf("[$parameterUnsigned]")
|
||||||
var replacementText = params[parameterNumberInDeprecatedUnique]
|
var replacementText = params[parameterNumberInDeprecatedUnique]
|
||||||
if (parameter.startsWith('+')) replacementText = "+$replacementText"
|
if (UniqueParameterType.Number in type.parameterTypeMap[parameterNumberInDeprecatedUnique]) {
|
||||||
else if (parameter.startsWith('-')) replacementText = "-$replacementText"
|
// The following looks for a sign just before [amount] and detects replacing "-[-33]" with "[+33]" and similar situations
|
||||||
finalPossibleUniques +=
|
val deprecatedHadPlusSign = positionInDeprecatedUnique > 0 && type.text[positionInDeprecatedUnique - 1] == '+'
|
||||||
possibleUnique.replace("[$parameter]", "[$replacementText]")
|
val deprecatedHadMinusSign = positionInDeprecatedUnique > 0 && type.text[positionInDeprecatedUnique - 1] == '-'
|
||||||
|
val deprecatedHadSign = deprecatedHadPlusSign || deprecatedHadMinusSign
|
||||||
|
val positionInNewUnique = possibleUnique.indexOf("[$parameter]")
|
||||||
|
val newHasMinusSign = positionInNewUnique > 0 && possibleUnique[positionInNewUnique - 1] == '-'
|
||||||
|
val replacementHasMinusSign = replacementText.startsWith('-')
|
||||||
|
val replacementHasPlusSign = replacementText.startsWith('+')
|
||||||
|
val replacementIsSigned = replacementHasPlusSign || replacementHasMinusSign
|
||||||
|
val replacementTextUnsigned = if (replacementIsSigned) replacementText.drop(1) else replacementText
|
||||||
|
val replacementShouldBeNegative = if (deprecatedHadMinusSign == newHasMinusSign) replacementHasMinusSign else !replacementHasMinusSign
|
||||||
|
val replacementShouldBeSigned = deprecatedHadSign && !newHasMinusSign || parameterHasSign
|
||||||
|
replacementText = when {
|
||||||
|
!(deprecatedHadSign || newHasMinusSign || replacementIsSigned) -> replacementText
|
||||||
|
replacementShouldBeNegative -> "-$replacementTextUnsigned"
|
||||||
|
replacementShouldBeSigned -> "+$replacementTextUnsigned"
|
||||||
|
else -> replacementTextUnsigned
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resultingUnique = resultingUnique.replace("[$parameter]", "[$replacementText]")
|
||||||
}
|
}
|
||||||
|
finalPossibleUniques += resultingUnique
|
||||||
}
|
}
|
||||||
if (finalPossibleUniques.size == 1) return finalPossibleUniques.first()
|
if (finalPossibleUniques.size == 1) return finalPossibleUniques.first()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user