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