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:
@@ -94,6 +94,57 @@ void main() {
|
||||
},
|
||||
);
|
||||
|
||||
test('init can seed available games from host-provided data', () async {
|
||||
final tempDir = await Directory.systemTemp.createTemp(
|
||||
'wolf3d-seeded-games-',
|
||||
);
|
||||
addTearDown(() async {
|
||||
if (await tempDir.exists()) {
|
||||
await tempDir.delete(recursive: true);
|
||||
}
|
||||
});
|
||||
|
||||
final persistence = DefaultGameDataDirectoryPersistence(
|
||||
filePath: '${tempDir.path}/settings.json',
|
||||
);
|
||||
final wolf3d = Wolf3dFlutterEngine(
|
||||
audioBackend: _NoopAudio(),
|
||||
dataDirectoryPersistence: persistence,
|
||||
);
|
||||
final retail = _buildTestData(version: GameVersion.retail);
|
||||
final shareware = _buildTestData(version: GameVersion.shareware);
|
||||
|
||||
await wolf3d.init(seededGames: [retail, shareware]);
|
||||
|
||||
expect(wolf3d.availableGames, hasLength(2));
|
||||
expect(
|
||||
wolf3d.availableGames.map((g) => g.version),
|
||||
containsAll([GameVersion.retail, GameVersion.shareware]),
|
||||
);
|
||||
});
|
||||
|
||||
test('loadGameDataFromAssets prefixes keys for package assets', () async {
|
||||
final requestedKeys = <String>[];
|
||||
|
||||
await expectLater(
|
||||
() => Wolf3dFlutterEngine.loadGameDataFromAssets(
|
||||
version: GameVersion.retail,
|
||||
assetDirectory: 'assets/retail',
|
||||
packageName: 'wolf_3d_assets',
|
||||
assetLoader: (String key) async {
|
||||
requestedKeys.add(key);
|
||||
throw Exception('Expected test stop after first key.');
|
||||
},
|
||||
),
|
||||
throwsException,
|
||||
);
|
||||
|
||||
expect(
|
||||
requestedKeys,
|
||||
contains('packages/wolf_3d_assets/assets/retail/VSWAP.WL6'),
|
||||
);
|
||||
});
|
||||
|
||||
testWidgets('GameScreen hides debug FAB when debug mode is disabled', (
|
||||
tester,
|
||||
) async {
|
||||
@@ -168,7 +219,9 @@ class _TestWolf3d extends Wolf3dFlutterEngine {
|
||||
}
|
||||
}
|
||||
|
||||
WolfensteinData _buildTestData() {
|
||||
WolfensteinData _buildTestData({
|
||||
GameVersion version = GameVersion.retail,
|
||||
}) {
|
||||
final wallGrid = List.generate(64, (_) => List.filled(64, 0));
|
||||
final objectGrid = List.generate(64, (_) => List.filled(64, 0));
|
||||
|
||||
@@ -181,9 +234,11 @@ WolfensteinData _buildTestData() {
|
||||
objectGrid[2][2] = MapObject.playerEast;
|
||||
|
||||
return WolfensteinData(
|
||||
version: GameVersion.retail,
|
||||
version: version,
|
||||
dataVersion: DataVersion.unknown,
|
||||
registry: RetailAssetRegistry(),
|
||||
registry: version == GameVersion.shareware
|
||||
? SharewareAssetRegistry()
|
||||
: RetailAssetRegistry(),
|
||||
walls: [_sprite(1), _sprite(1), _sprite(2), _sprite(2)],
|
||||
sprites: List.generate(436, (_) => _sprite(255)),
|
||||
sounds: List.generate(200, (_) => PcmSound(Uint8List(1))),
|
||||
|
||||
Reference in New Issue
Block a user