runWithAssetPreload method

Future<SdkResult<void>> runWithAssetPreload({
  1. required AssetPreloadCoordinator preload,
  2. required List<AssetManifestItem> manifest,
  3. GameSessionController? session,
})

Wires this controller's run to a real AssetPreloadCoordinator (FEAT-47) + GameSessionController (FEAT-41): preload's progress feeds this controller's progress, and a successful preload calls GameSessionController.markReady+GameSessionController.start so the session phase and the transition phase land in sync.

Implementation

Future<SdkResult<void>> runWithAssetPreload({
  required AssetPreloadCoordinator preload,
  required List<AssetManifestItem> manifest,
  GameSessionController? session,
}) {
  return run((onProgress) async {
    final sub = preload.progress.listen(onProgress);
    try {
      final result = await preload.preload(manifest);
      if (result is SdkSuccess<void>) {
        session?.markReady();
        session?.start();
      }
      return result;
    } finally {
      sub.cancel();
    }
  });
}