mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-27 22:06:05 -04:00
Keep track of what mod each ruleset object comes from, for debug and civilopedia purposes
This commit is contained in:
parent
6a6a8a0c94
commit
103234a6b8
@ -112,8 +112,10 @@ class Ruleset {
|
|||||||
|
|
||||||
private fun <T : INamed> createHashmap(items: Array<T>): LinkedHashMap<String, T> {
|
private fun <T : INamed> createHashmap(items: Array<T>): LinkedHashMap<String, T> {
|
||||||
val hashMap = LinkedHashMap<String, T>(items.size)
|
val hashMap = LinkedHashMap<String, T>(items.size)
|
||||||
for (item in items)
|
for (item in items) {
|
||||||
hashMap[item.name] = item
|
hashMap[item.name] = item
|
||||||
|
(item as? IRulesetObject)?.originRuleset = name
|
||||||
|
}
|
||||||
return hashMap
|
return hashMap
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -406,7 +408,7 @@ class Ruleset {
|
|||||||
RulesetValidator(this@Ruleset).checkUnique(
|
RulesetValidator(this@Ruleset).checkUnique(
|
||||||
Unique(it),
|
Unique(it),
|
||||||
false,
|
false,
|
||||||
"",
|
cityStateType,
|
||||||
UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
|
UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
|
||||||
).isEmpty()
|
).isEmpty()
|
||||||
})
|
})
|
||||||
@ -414,7 +416,7 @@ class Ruleset {
|
|||||||
RulesetValidator(this@Ruleset).checkUnique(
|
RulesetValidator(this@Ruleset).checkUnique(
|
||||||
Unique(it),
|
Unique(it),
|
||||||
false,
|
false,
|
||||||
"",
|
cityStateType,
|
||||||
UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
|
UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
|
||||||
).isEmpty()
|
).isEmpty()
|
||||||
})
|
})
|
||||||
@ -484,8 +486,8 @@ object RulesetCache : HashMap<String,Ruleset>() {
|
|||||||
if (consoleMode) FileHandle(fileName)
|
if (consoleMode) FileHandle(fileName)
|
||||||
else Gdx.files.internal(fileName)
|
else Gdx.files.internal(fileName)
|
||||||
newRulesets[ruleset.fullName] = Ruleset().apply {
|
newRulesets[ruleset.fullName] = Ruleset().apply {
|
||||||
load(fileHandle)
|
|
||||||
name = ruleset.fullName
|
name = ruleset.fullName
|
||||||
|
load(fileHandle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.putAll(newRulesets)
|
this.putAll(newRulesets)
|
||||||
@ -500,8 +502,8 @@ object RulesetCache : HashMap<String,Ruleset>() {
|
|||||||
if (!modFolder.isDirectory) continue
|
if (!modFolder.isDirectory) continue
|
||||||
try {
|
try {
|
||||||
val modRuleset = Ruleset()
|
val modRuleset = Ruleset()
|
||||||
modRuleset.load(modFolder.child("jsons"))
|
|
||||||
modRuleset.name = modFolder.name()
|
modRuleset.name = modFolder.name()
|
||||||
|
modRuleset.load(modFolder.child("jsons"))
|
||||||
modRuleset.folderLocation = modFolder
|
modRuleset.folderLocation = modFolder
|
||||||
newRulesets[modRuleset.name] = modRuleset
|
newRulesets[modRuleset.name] = modRuleset
|
||||||
debug("Mod loaded successfully: %s", modRuleset.name)
|
debug("Mod loaded successfully: %s", modRuleset.name)
|
||||||
|
@ -8,10 +8,13 @@ import com.unciv.models.stats.NamedStats
|
|||||||
import com.unciv.ui.screens.civilopediascreen.FormattedLine
|
import com.unciv.ui.screens.civilopediascreen.FormattedLine
|
||||||
import com.unciv.ui.screens.civilopediascreen.ICivilopediaText
|
import com.unciv.ui.screens.civilopediascreen.ICivilopediaText
|
||||||
|
|
||||||
interface IRulesetObject: INamed, IHasUniques, ICivilopediaText
|
interface IRulesetObject: INamed, IHasUniques, ICivilopediaText{
|
||||||
|
var originRuleset:String
|
||||||
|
}
|
||||||
|
|
||||||
abstract class RulesetObject: IRulesetObject {
|
abstract class RulesetObject: IRulesetObject {
|
||||||
override var name = ""
|
override var name = ""
|
||||||
|
override var originRuleset = ""
|
||||||
override var uniques = ArrayList<String>() // Can not be a hashset as that would remove doubles
|
override var uniques = ArrayList<String>() // Can not be a hashset as that would remove doubles
|
||||||
@delegate:Transient
|
@delegate:Transient
|
||||||
override val uniqueObjects: List<Unique> by lazy {
|
override val uniqueObjects: List<Unique> by lazy {
|
||||||
@ -32,6 +35,7 @@ abstract class RulesetObject: IRulesetObject {
|
|||||||
|
|
||||||
// Same, but inherits from NamedStats - I couldn't find a way to unify the declarations but this is fine
|
// Same, but inherits from NamedStats - I couldn't find a way to unify the declarations but this is fine
|
||||||
abstract class RulesetStatsObject: NamedStats(), IRulesetObject {
|
abstract class RulesetStatsObject: NamedStats(), IRulesetObject {
|
||||||
|
override var originRuleset = ""
|
||||||
override var uniques = ArrayList<String>() // Can not be a hashset as that would remove doubles
|
override var uniques = ArrayList<String>() // Can not be a hashset as that would remove doubles
|
||||||
@delegate:Transient
|
@delegate:Transient
|
||||||
override val uniqueObjects: List<Unique> by lazy {
|
override val uniqueObjects: List<Unique> by lazy {
|
||||||
|
@ -418,7 +418,7 @@ class RulesetValidator(val ruleset: Ruleset) {
|
|||||||
val errors = checkUnique(
|
val errors = checkUnique(
|
||||||
unique,
|
unique,
|
||||||
tryFixUnknownUniques,
|
tryFixUnknownUniques,
|
||||||
cityStateType.name,
|
cityStateType,
|
||||||
rulesetSpecific
|
rulesetSpecific
|
||||||
)
|
)
|
||||||
lines.addAll(errors)
|
lines.addAll(errors)
|
||||||
@ -453,13 +453,11 @@ class RulesetValidator(val ruleset: Ruleset) {
|
|||||||
severityToReport: UniqueType.UniqueComplianceErrorSeverity,
|
severityToReport: UniqueType.UniqueComplianceErrorSeverity,
|
||||||
tryFixUnknownUniques: Boolean
|
tryFixUnknownUniques: Boolean
|
||||||
) {
|
) {
|
||||||
val name = if (uniqueContainer is INamed) uniqueContainer.name else ""
|
|
||||||
|
|
||||||
for (unique in uniqueContainer.uniqueObjects) {
|
for (unique in uniqueContainer.uniqueObjects) {
|
||||||
val errors = checkUnique(
|
val errors = checkUnique(
|
||||||
unique,
|
unique,
|
||||||
tryFixUnknownUniques,
|
tryFixUnknownUniques,
|
||||||
name,
|
uniqueContainer as? INamed,
|
||||||
severityToReport
|
severityToReport
|
||||||
)
|
)
|
||||||
lines.addAll(errors)
|
lines.addAll(errors)
|
||||||
@ -469,9 +467,11 @@ class RulesetValidator(val ruleset: Ruleset) {
|
|||||||
fun checkUnique(
|
fun checkUnique(
|
||||||
unique: Unique,
|
unique: Unique,
|
||||||
tryFixUnknownUniques: Boolean,
|
tryFixUnknownUniques: Boolean,
|
||||||
name: String,
|
namedObj: INamed?,
|
||||||
severityToReport: UniqueType.UniqueComplianceErrorSeverity
|
severityToReport: UniqueType.UniqueComplianceErrorSeverity
|
||||||
): List<RulesetError> {
|
): List<RulesetError> {
|
||||||
|
var name = namedObj?.name ?: ""
|
||||||
|
if (namedObj!=null && namedObj is IRulesetObject) name = "${namedObj.originRuleset}: $name"
|
||||||
if (unique.type == null) {
|
if (unique.type == null) {
|
||||||
if (!tryFixUnknownUniques) return emptyList()
|
if (!tryFixUnknownUniques) return emptyList()
|
||||||
val similarUniques = UniqueType.values().filter {
|
val similarUniques = UniqueType.values().filter {
|
||||||
|
@ -116,7 +116,7 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s
|
|||||||
val uniquesWithNoErrors = finalPossibleUniques.filter {
|
val uniquesWithNoErrors = finalPossibleUniques.filter {
|
||||||
val unique = Unique(it)
|
val unique = Unique(it)
|
||||||
val errors = RulesetValidator(ruleset).checkUnique(
|
val errors = RulesetValidator(ruleset).checkUnique(
|
||||||
unique, true, "",
|
unique, true, null,
|
||||||
UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
|
UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
|
||||||
)
|
)
|
||||||
errors.isEmpty()
|
errors.isEmpty()
|
||||||
|
@ -15,19 +15,19 @@ import com.unciv.models.ruleset.unique.UniqueType
|
|||||||
import com.unciv.models.translations.tr
|
import com.unciv.models.translations.tr
|
||||||
import com.unciv.ui.components.ExpanderTab
|
import com.unciv.ui.components.ExpanderTab
|
||||||
import com.unciv.ui.components.TabbedPager
|
import com.unciv.ui.components.TabbedPager
|
||||||
import com.unciv.ui.components.input.onChange
|
|
||||||
import com.unciv.ui.components.input.onClick
|
|
||||||
import com.unciv.ui.components.extensions.surroundWithCircle
|
import com.unciv.ui.components.extensions.surroundWithCircle
|
||||||
import com.unciv.ui.components.extensions.toLabel
|
import com.unciv.ui.components.extensions.toLabel
|
||||||
import com.unciv.ui.components.extensions.toTextButton
|
import com.unciv.ui.components.extensions.toTextButton
|
||||||
|
import com.unciv.ui.components.input.onChange
|
||||||
|
import com.unciv.ui.components.input.onClick
|
||||||
import com.unciv.ui.images.ImageGetter
|
import com.unciv.ui.images.ImageGetter
|
||||||
import com.unciv.ui.popups.ToastPopup
|
import com.unciv.ui.popups.ToastPopup
|
||||||
import com.unciv.ui.screens.basescreen.BaseScreen
|
import com.unciv.ui.screens.basescreen.BaseScreen
|
||||||
import com.unciv.ui.screens.newgamescreen.TranslatedSelectBox
|
import com.unciv.ui.screens.newgamescreen.TranslatedSelectBox
|
||||||
import com.unciv.utils.Log
|
|
||||||
import com.unciv.utils.Concurrency
|
import com.unciv.utils.Concurrency
|
||||||
import com.unciv.utils.launchOnGLThread
|
import com.unciv.utils.Log
|
||||||
import com.unciv.utils.debug
|
import com.unciv.utils.debug
|
||||||
|
import com.unciv.utils.launchOnGLThread
|
||||||
|
|
||||||
|
|
||||||
private const val MOD_CHECK_WITHOUT_BASE = "-none-"
|
private const val MOD_CHECK_WITHOUT_BASE = "-none-"
|
||||||
@ -203,7 +203,7 @@ class ModCheckTab(
|
|||||||
val modInvariantErrors = RulesetValidator(mod).checkUnique(
|
val modInvariantErrors = RulesetValidator(mod).checkUnique(
|
||||||
replacementUnique,
|
replacementUnique,
|
||||||
false,
|
false,
|
||||||
"",
|
null,
|
||||||
UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
|
UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
|
||||||
)
|
)
|
||||||
for (error in modInvariantErrors)
|
for (error in modInvariantErrors)
|
||||||
@ -214,7 +214,7 @@ class ModCheckTab(
|
|||||||
val modSpecificErrors = RulesetValidator(mod).checkUnique(
|
val modSpecificErrors = RulesetValidator(mod).checkUnique(
|
||||||
replacementUnique,
|
replacementUnique,
|
||||||
false,
|
false,
|
||||||
"",
|
null,
|
||||||
UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
|
UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
|
||||||
)
|
)
|
||||||
for (error in modSpecificErrors)
|
for (error in modSpecificErrors)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user