PreloadLobbyState.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { SceneId } from '../../../framework/scene/SceneNavigator';
  2. import { LaunchContext, LaunchState, LaunchStateId } from './LaunchState';
  3. export class PreloadLobbyState implements LaunchState {
  4. readonly id = LaunchStateId.PreloadLobby;
  5. async enter(context: LaunchContext): Promise<LaunchStateId> {
  6. const i18n = context.kernel.i18n;
  7. context.progress({ state: this.id, title: i18n.t('launch.preload_res') });
  8. const kernel = context.kernel;
  9. try {
  10. await Promise.all([
  11. await kernel.sound.preload(),
  12. await kernel.scenes.preload(SceneId.Lobby, {
  13. onProgress: (percent) => {
  14. context.progress({ state: this.id, progress: percent });
  15. }
  16. }),
  17. ]);
  18. } catch (error) {
  19. context.error = error;
  20. const retry = await context.dialog({
  21. title: "",
  22. message: i18n.t('launch.res_load_fail'),
  23. lblOK: i18n.t('launch.retry'),
  24. });
  25. if (retry) {
  26. return LaunchStateId.CheckVersion;
  27. }
  28. throw error;
  29. }
  30. context.progress({ state: this.id, progress: 1 });
  31. return LaunchStateId.EnterLobby;
  32. }
  33. }