Added dynamic discovery of available game data

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2026-03-15 11:23:41 +01:00
parent 34b167e03f
commit 2db9dad00d
9 changed files with 288 additions and 54 deletions

View File

@@ -0,0 +1,48 @@
import 'dart:typed_data';
import 'classes/game_version.dart';
import 'classes/wolfenstein_data.dart';
// --- The Magic Conditional Import ---
// If dart:io is available, use the real scanner. Otherwise, use the stub.
import 'io/discovery_stub.dart'
if (dart.library.io) 'io/discovery_io.dart'
as platform;
import 'wl_parser.dart';
class WolfensteinLoader {
/// Scans a directory for Wolfenstein 3D data files and loads all available versions.
///
/// NOTE: This will throw an [UnsupportedError] on Web platforms.
static Future<Map<GameVersion, WolfensteinData>> discover({
String? directoryPath,
bool recursive = false,
}) {
return platform.discoverInDirectory(
directoryPath: directoryPath,
recursive: recursive,
);
}
/// Parses WolfensteinData directly from raw ByteData.
/// This is 100% pure Dart and is safe to use on all platforms, including Web.
static WolfensteinData loadFromBytes({
required GameVersion version,
required ByteData vswap,
required ByteData mapHead,
required ByteData gameMaps,
required ByteData vgaDict,
required ByteData vgaHead,
required ByteData vgaGraph,
}) {
// We just act as a clean pass-through to the core parser
return WLParser.load(
version: version,
vswap: vswap,
mapHead: mapHead,
gameMaps: gameMaps,
vgaDict: vgaDict,
vgaHead: vgaHead,
vgaGraph: vgaGraph,
);
}
}