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:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user