Fix up incompatibilities

This commit is contained in:
2025-03-18 00:03:29 +01:00
parent 512bd644ab
commit 9daae41e1c

View File

@@ -252,7 +252,10 @@ class ModList {
LoadOrder generateLoadOrder([LoadOrder? loadOrder]) {
loadOrder ??= LoadOrder();
final modMap = {for (final m in activeMods.values) m.id: m};
_validateIncompatibilities(loadOrder);
final errors = _validateIncompatibilities(modMap);
if (errors.isNotEmpty) {
loadOrder.errors.addAll(errors);
}
// Hard dependency graph
final inDegree = <String, int>{};
@@ -363,15 +366,16 @@ class ModList {
return loadOrder;
}
void _validateIncompatibilities(LoadOrder loadOrder) {
final enabledMods = loadOrder.order.where((m) => m.enabled).toList();
for (final mod in enabledMods) {
List<String> _validateIncompatibilities(Map<String, Mod> modMap) {
final errors = <String>[];
for (final mod in modMap.values) {
for (final incompatibleId in mod.incompatibilities) {
if (enabledMods.any((m) => m.id == incompatibleId)) {
loadOrder.errors.add("Incompatible mods: ${mod.id} and $incompatibleId");
if (modMap.values.any((m) => m.id == incompatibleId)) {
errors.add("Incompatible mods: ${mod.id} and $incompatibleId");
}
}
}
return errors;
}
void _updateReverseConstraints(