Fix up incompatibilities
This commit is contained in:
@@ -252,7 +252,10 @@ class ModList {
|
|||||||
LoadOrder generateLoadOrder([LoadOrder? loadOrder]) {
|
LoadOrder generateLoadOrder([LoadOrder? loadOrder]) {
|
||||||
loadOrder ??= LoadOrder();
|
loadOrder ??= LoadOrder();
|
||||||
final modMap = {for (final m in activeMods.values) m.id: m};
|
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
|
// Hard dependency graph
|
||||||
final inDegree = <String, int>{};
|
final inDegree = <String, int>{};
|
||||||
@@ -363,15 +366,16 @@ class ModList {
|
|||||||
return loadOrder;
|
return loadOrder;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _validateIncompatibilities(LoadOrder loadOrder) {
|
List<String> _validateIncompatibilities(Map<String, Mod> modMap) {
|
||||||
final enabledMods = loadOrder.order.where((m) => m.enabled).toList();
|
final errors = <String>[];
|
||||||
for (final mod in enabledMods) {
|
for (final mod in modMap.values) {
|
||||||
for (final incompatibleId in mod.incompatibilities) {
|
for (final incompatibleId in mod.incompatibilities) {
|
||||||
if (enabledMods.any((m) => m.id == incompatibleId)) {
|
if (modMap.values.any((m) => m.id == incompatibleId)) {
|
||||||
loadOrder.errors.add("Incompatible mods: ${mod.id} and $incompatibleId");
|
errors.add("Incompatible mods: ${mod.id} and $incompatibleId");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _updateReverseConstraints(
|
void _updateReverseConstraints(
|
||||||
|
Reference in New Issue
Block a user