Added audio loading and decompressing
Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
@@ -58,47 +58,68 @@ class GameSelectScreen extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
Future<List<WolfensteinData>> loadData([
|
||||
bool? isShareware,
|
||||
]) async {
|
||||
Future<List<WolfensteinData>> loadData([String? directory]) async {
|
||||
final List<WolfensteinData> loadedGames = [];
|
||||
if (kIsWeb) {
|
||||
switch (isShareware) {
|
||||
case false:
|
||||
loadedGames.add(
|
||||
WolfensteinLoader.loadFromBytes(
|
||||
version: GameVersion.retail,
|
||||
vswap: await rootBundle.load('assets/retail/VSWAP.WL6'),
|
||||
mapHead: await rootBundle.load('assets/retail/MAPHEAD.WL6'),
|
||||
gameMaps: await rootBundle.load('assets/retail/GAMEMAPS.WL6'),
|
||||
vgaDict: await rootBundle.load('assets/retail/VGADICT.WL6'),
|
||||
vgaHead: await rootBundle.load('assets/retail/VGAHEAD.WL6'),
|
||||
vgaGraph: await rootBundle.load('assets/retail/VGAGRAPH.WL6'),
|
||||
),
|
||||
);
|
||||
break;
|
||||
default:
|
||||
loadedGames.add(
|
||||
WolfensteinLoader.loadFromBytes(
|
||||
version: GameVersion.shareware,
|
||||
vswap: await rootBundle.load('assets/shareware/VSWAP.WL1'),
|
||||
mapHead: await rootBundle.load('assets/shareware/MAPHEAD.WL1'),
|
||||
gameMaps: await rootBundle.load('assets/shareware/GAMEMAPS.WL1'),
|
||||
vgaDict: await rootBundle.load('assets/shareware/VGADICT.WL1'),
|
||||
vgaHead: await rootBundle.load('assets/shareware/VGAHEAD.WL1'),
|
||||
vgaGraph: await rootBundle.load('assets/shareware/VGAGRAPH.WL1'),
|
||||
),
|
||||
);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
final Map<GameVersion, WolfensteinData> discoveredVersions =
|
||||
await WolfensteinLoader.discover(
|
||||
directoryPath: 'assets',
|
||||
recursive: true,
|
||||
);
|
||||
|
||||
loadedGames.addAll(discoveredVersions.values);
|
||||
// 1. Always attempt to load bundled assets first (works on ALL platforms)
|
||||
final versionsToTry = [
|
||||
(version: GameVersion.retail, path: 'retail'),
|
||||
(version: GameVersion.shareware, path: 'shareware'),
|
||||
];
|
||||
|
||||
for (final config in versionsToTry) {
|
||||
try {
|
||||
final data = WolfensteinLoader.loadFromBytes(
|
||||
version: config.version,
|
||||
vswap: await rootBundle.load(
|
||||
'assets/${config.path}/VSWAP.${config.version.fileExtension}',
|
||||
),
|
||||
mapHead: await rootBundle.load(
|
||||
'assets/${config.path}/MAPHEAD.${config.version.fileExtension}',
|
||||
),
|
||||
gameMaps: await rootBundle.load(
|
||||
'assets/${config.path}/GAMEMAPS.${config.version.fileExtension}',
|
||||
),
|
||||
vgaDict: await rootBundle.load(
|
||||
'assets/${config.path}/VGADICT.${config.version.fileExtension}',
|
||||
),
|
||||
vgaHead: await rootBundle.load(
|
||||
'assets/${config.path}/VGAHEAD.${config.version.fileExtension}',
|
||||
),
|
||||
vgaGraph: await rootBundle.load(
|
||||
'assets/${config.path}/VGAGRAPH.${config.version.fileExtension}',
|
||||
),
|
||||
audioHed: await rootBundle.load(
|
||||
'assets/${config.path}/AUDIOHED.${config.version.fileExtension}',
|
||||
),
|
||||
audioT: await rootBundle.load(
|
||||
'assets/${config.path}/AUDIOT.${config.version.fileExtension}',
|
||||
),
|
||||
);
|
||||
loadedGames.add(data);
|
||||
} catch (e) {
|
||||
debugPrint(
|
||||
"Bundled ${config.version.name} not found or failed to load.",
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 2. On non-web, also check for external files in a specific "games" folder
|
||||
// if you want to support side-loading.
|
||||
if (!kIsWeb) {
|
||||
try {
|
||||
final externalGames = await WolfensteinLoader.discover(
|
||||
directoryPath: directory,
|
||||
recursive: true,
|
||||
);
|
||||
for (var entry in externalGames.entries) {
|
||||
if (!loadedGames.any((g) => g.version == entry.key)) {
|
||||
loadedGames.add(entry.value);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
debugPrint("External discovery failed: $e");
|
||||
}
|
||||
}
|
||||
|
||||
return loadedGames;
|
||||
|
||||
Reference in New Issue
Block a user