feat: multi-package loading with base framework support

- Add RuntimeOptions.basePackages for loading framework packages before game package
- Add ScriptEngine.loadPackages() for multi-package module merging
- LuaDardoScriptEngine merges modules from all packages, game overrides framework
- PackageActivationController loads base packages first, then game package
- GamePackageManifest parses optional 'base' field
- Update docs: README, quick-start, lua-package-format, architecture
- Update all test mocks with loadPackages() implementation
This commit is contained in:
gem
2026-06-10 00:04:00 +08:00
parent 0d4fbd030c
commit 8ddc3be3a7
13 changed files with 255 additions and 7 deletions

View File

@@ -15,6 +15,7 @@ class GamePackageManifest {
this.display = const GameDisplayConfig(),
this.resources = const {},
this.modules = const {},
this.base,
});
final String gameId;
@@ -29,6 +30,9 @@ class GamePackageManifest {
final Map<String, GameResource> resources;
final Map<String, String> modules;
/// 依赖的框架包 gameId。加载时会先加载框架包再加载游戏包。
final String? base;
static GamePackageManifest fromJsonString(String source) {
return fromMap(jsonDecode(source) as Map<String, Object?>);
}
@@ -58,6 +62,8 @@ class GamePackageManifest {
}
}
final base = map['base'] as String?;
final defaultLocale = (map['defaultLocale'] as String?) ?? 'en';
final supportedLocales = _stringList(
map,
@@ -89,6 +95,7 @@ class GamePackageManifest {
display: display,
resources: resources,
modules: modules,
base: base,
);
}