Initial flame_lua_runtime package

This commit is contained in:
gem
2026-06-07 22:53:58 +08:00
commit 733b2fb798
262 changed files with 28439 additions and 0 deletions

View File

@@ -0,0 +1,84 @@
import 'dart:io';
import 'package:flame_lua_runtime/runtime/packages/game_package.dart';
import 'package:flame_lua_runtime/runtime/packages/game_package_manifest.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('GamePackage', () {
test('resolves manifest resource keys', () {
final package = _package();
expect(
package.resolveResourcePath('board'),
'example/assets/games/ludo/assets/board.png',
);
});
test('resolves package-relative paths and assetsBase fallback', () {
final package = _package();
expect(
package.resolveResourcePath('scripts/main.lua'),
'example/assets/games/ludo/scripts/main.lua',
);
expect(
package.resolveResourcePath('unknown.png'),
'example/assets/games/ludo/assets/unknown.png',
);
expect(
package.resolveResourcePath(
'example/assets/games/ludo/assets/board.png',
),
'example/assets/games/ludo/assets/board.png',
);
});
test('keeps runtime Lua root configurable per package', () {
final package = GamePackage.asset(
rootPath: 'example/assets/games/ludo',
manifest: _manifest(),
runtimeLuaRoot: 'packages/flame_lua_runtime/assets/runtime/lua',
);
expect(
package.runtimeLuaRoot,
'packages/flame_lua_runtime/assets/runtime/lua',
);
});
test('reads file package text and bytes', () async {
final root = await Directory.systemTemp.createTemp('game_package_test_');
addTearDown(() => root.deleteSync(recursive: true));
Directory('${root.path}/scripts').createSync(recursive: true);
File('${root.path}/scripts/main.lua').writeAsStringSync('return true');
final package = GamePackage.file(
rootPath: root.path,
manifest: _manifest(),
);
expect(await package.readText('scripts/main.lua'), 'return true');
expect((await package.readBytes('scripts/main.lua')).lengthInBytes, 11);
});
});
}
GamePackage _package() {
return GamePackage.asset(
rootPath: 'example/assets/games/ludo',
manifest: _manifest(),
);
}
GamePackageManifest _manifest() {
return const GamePackageManifest(
gameId: 'ludo',
name: 'Ludo',
version: '0.1.0',
runtimeApiVersion: 1,
entry: 'scripts/main.lua',
assetsBase: 'assets',
resources: {'board': GameResource(type: 'image', path: 'assets/board.png')},
);
}