feat: Implement packaged games loading and update engine initialization to support seeded games

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2026-03-25 11:38:01 +01:00
parent d393ca98ec
commit d63d742695
9 changed files with 345 additions and 14 deletions
+4 -1
View File
@@ -2,15 +2,18 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:wolf_3d_flutter/wolf_3d_flutter.dart';
import 'packaged_games_loader.dart';
import 'wolf3d_gui_app.dart';
/// Creates the application shell after loading available Wolf3D data sets.
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final seededGames = await loadPackagedGames();
final Wolf3dFlutterEngine wolf3d = await Wolf3dFlutterEngine(
debug: kDebugMode,
).init();
).init(seededGames: seededGames);
if (kDebugMode) {
wolf3d.enableMenuHeaderBandDebugLogging(prefix: '[wolf_3d_gui]');
@@ -0,0 +1,54 @@
import 'package:flutter/foundation.dart';
import 'package:wolf_3d_dart/wolf_3d_data_types.dart';
import 'package:wolf_3d_flutter/wolf_3d_flutter.dart';
typedef PackagedGameDataLoader =
Future<WolfensteinData> Function({
required GameVersion version,
required String assetDirectory,
});
Future<List<WolfensteinData>> loadPackagedGames({
PackagedGameDataLoader? loader,
}) async {
final PackagedGameDataLoader effectiveLoader =
loader ??
({required version, required assetDirectory}) =>
Wolf3dFlutterEngine.loadGameDataFromAssets(
version: version,
packageName: 'wolf_3d_assets',
assetDirectory: assetDirectory,
);
final List<WolfensteinData> games = [];
Future<void> tryLoad({
required GameVersion version,
required String assetDirectory,
}) async {
try {
games.add(
await effectiveLoader(
version: version,
assetDirectory: assetDirectory,
),
);
} catch (e) {
debugPrint(
'Packaged game load skipped for ${version.label} ($assetDirectory): $e',
);
}
}
await tryLoad(version: GameVersion.retail, assetDirectory: 'assets/retail');
await tryLoad(
version: GameVersion.shareware,
assetDirectory: 'assets/shareware',
);
await tryLoad(
version: GameVersion.spearOfDestinyDemo,
assetDirectory: 'assets/sod/shareware',
);
return games;
}