Rework shit again
This commit is contained in:
@@ -7,9 +7,9 @@ import 'package:xml/xml.dart';
|
||||
class ModList {
|
||||
final String configPath;
|
||||
final String modsPath;
|
||||
// O(1) lookup
|
||||
Map<String, bool> activeMods = {};
|
||||
Map<String, Mod> mods = {};
|
||||
Set<String> activeMods = {};
|
||||
Set<String> availableMods = {};
|
||||
|
||||
ModList({required this.configPath, required this.modsPath});
|
||||
|
||||
@@ -47,7 +47,9 @@ class ModList {
|
||||
logger.info('Loaded mod from directory: ${mod.name} (ID: ${mod.id})');
|
||||
|
||||
if (mods.containsKey(mod.id)) {
|
||||
logger.warning('Mod $mod.id already exists in mods list, overwriting');
|
||||
logger.warning(
|
||||
'Mod $mod.id already exists in mods list, overwriting',
|
||||
);
|
||||
final existingMod = mods[mod.id]!;
|
||||
mods[mod.id] = Mod(
|
||||
name: mod.name,
|
||||
@@ -59,32 +61,14 @@ class ModList {
|
||||
loadAfter: mod.loadAfter,
|
||||
loadBefore: mod.loadBefore,
|
||||
incompatabilities: mod.incompatabilities,
|
||||
enabled: activeMods.contains(
|
||||
mod.id,
|
||||
), // Set enabled based on config
|
||||
size: mod.size,
|
||||
enabled: existingMod.enabled,
|
||||
isBaseGame: existingMod.isBaseGame,
|
||||
isExpansion: existingMod.isExpansion,
|
||||
);
|
||||
logger.info('Updated existing mod: ${mod.name} (ID: ${mod.id})');
|
||||
} else {
|
||||
mods[mod.id] = Mod(
|
||||
name: mod.name,
|
||||
id: mod.id,
|
||||
path: mod.path,
|
||||
versions: mod.versions,
|
||||
description: mod.description,
|
||||
hardDependencies: mod.hardDependencies,
|
||||
loadAfter: mod.loadAfter,
|
||||
loadBefore: mod.loadBefore,
|
||||
incompatabilities: mod.incompatabilities,
|
||||
enabled: activeMods.contains(
|
||||
mod.id,
|
||||
), // Set enabled based on config
|
||||
size: mod.size,
|
||||
isBaseGame: mod.isBaseGame,
|
||||
isExpansion: mod.isExpansion,
|
||||
);
|
||||
mods[mod.id] = mod;
|
||||
logger.info('Added new mod: ${mod.name} (ID: ${mod.id})');
|
||||
}
|
||||
|
||||
@@ -144,29 +128,33 @@ class ModList {
|
||||
modId.startsWith('ludeon.rimworld.') &&
|
||||
knownExpansionIds.contains(modId);
|
||||
|
||||
activeMods.add(modId);
|
||||
final existingMod = mods[modId];
|
||||
final mod = Mod(
|
||||
name:
|
||||
isBaseGame
|
||||
? "RimWorld"
|
||||
existingMod?.name ??
|
||||
(isBaseGame
|
||||
? "Rimworld"
|
||||
: isExpansion
|
||||
? "RimWorld ${_expansionNameFromId(modId)}"
|
||||
: modId,
|
||||
id: modId,
|
||||
path: '',
|
||||
versions: [],
|
||||
? "Rimworld ${_expansionNameFromId(modId)}"
|
||||
: modId),
|
||||
id: existingMod?.id ?? modId,
|
||||
path: existingMod?.path ?? '',
|
||||
versions: existingMod?.versions ?? [],
|
||||
description:
|
||||
isBaseGame
|
||||
existingMod?.description ??
|
||||
(isBaseGame
|
||||
? "RimWorld base game"
|
||||
: isExpansion
|
||||
? "RimWorld expansion"
|
||||
: "",
|
||||
hardDependencies: [],
|
||||
loadAfter: isExpansion ? ['ludeon.rimworld'] : [],
|
||||
loadBefore: [],
|
||||
incompatabilities: [],
|
||||
enabled: true,
|
||||
size: 0,
|
||||
: ""),
|
||||
hardDependencies: existingMod?.hardDependencies ?? [],
|
||||
loadAfter:
|
||||
existingMod?.loadAfter ??
|
||||
(isExpansion ? ['ludeon.rimworld'] : []),
|
||||
loadBefore: existingMod?.loadBefore ?? [],
|
||||
incompatabilities: existingMod?.incompatabilities ?? [],
|
||||
enabled: existingMod?.enabled ?? false,
|
||||
size: existingMod?.size ?? 0,
|
||||
isBaseGame: isBaseGame,
|
||||
isExpansion: isExpansion,
|
||||
);
|
||||
@@ -174,6 +162,7 @@ class ModList {
|
||||
logger.warning('Mod $modId already exists in mods list, overwriting');
|
||||
}
|
||||
mods[modId] = mod;
|
||||
activeMods[modId] = true;
|
||||
yield mod;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user