Rework shit again

This commit is contained in:
2025-03-16 01:50:22 +01:00
parent 8848b0c06e
commit 197ac61774
2 changed files with 62 additions and 43 deletions

View File

@@ -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;
}