Smarter asset loading. Better audio rendering.

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2026-03-15 13:40:47 +01:00
parent 649a1419a8
commit 27713dbbfb
5 changed files with 122 additions and 86 deletions

View File

@@ -23,30 +23,53 @@ class WolfensteinLoader {
);
}
/// Parses WolfensteinData directly from raw ByteData.
/// This is 100% pure Dart and is safe to use on all platforms, including Web.
/// Parses WolfensteinData from raw ByteData.
/// Throws an [ArgumentError] if any required file is null.
static WolfensteinData loadFromBytes({
required GameVersion version,
required ByteData vswap,
required ByteData mapHead,
required ByteData gameMaps,
required ByteData vgaDict,
required ByteData vgaHead,
required ByteData vgaGraph,
required ByteData audioHed,
required ByteData audioT,
required ByteData? vswap,
required ByteData? mapHead,
required ByteData? gameMaps,
required ByteData? vgaDict,
required ByteData? vgaHead,
required ByteData? vgaGraph,
required ByteData? audioHed,
required ByteData? audioT,
}) {
// We just act as a clean pass-through to the core parser
// 1. Validation Check
final Map<String, ByteData?> files = {
'VSWAP': vswap,
'MAPHEAD': mapHead,
'GAMEMAPS': gameMaps,
'VGADICT': vgaDict,
'VGAHEAD': vgaHead,
'VGAGRAPH': vgaGraph,
'AUDIOHED': audioHed,
'AUDIOT': audioT,
};
final missing = files.entries
.where((e) => e.value == null)
.map((e) => "${e.key}.${version.fileExtension}")
.toList();
if (missing.isNotEmpty) {
throw ArgumentError(
'Cannot load ${version.name}: Missing files: ${missing.join(", ")}',
);
}
// 2. Pass-through to parser now that we are guaranteed non-null
return WLParser.load(
version: version,
vswap: vswap,
mapHead: mapHead,
gameMaps: gameMaps,
vgaDict: vgaDict,
vgaHead: vgaHead,
vgaGraph: vgaGraph,
audioHed: audioHed,
audioT: audioT,
vswap: vswap!,
mapHead: mapHead!,
gameMaps: gameMaps!,
vgaDict: vgaDict!,
vgaHead: vgaHead!,
vgaGraph: vgaGraph!,
audioHed: audioHed!,
audioT: audioT!,
);
}
}