| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import { math } from 'cc';
- import { SceneId } from '../../../framework/scene/SceneNavigator';
- import { LaunchContext, LaunchState, LaunchStateId } from './LaunchState';
- export class PreloadLobbyState implements LaunchState {
- readonly id = LaunchStateId.PreloadLobby;
- private _context: LaunchContext;
- async enter(context: LaunchContext): Promise<LaunchStateId> {
- this._context = context;
- const i18n = context.kernel.i18n;
- let last_percent = 0;
- this.setProgress(0, i18n.t('launch.preload_res'));
- const kernel = context.kernel;
- try {
- await Promise.all([
- await kernel.sound.preload(),
- await kernel.scenes.preload(SceneId.Lobby, {
- onProgress: (percent) => {
- /// web preload 进度会回退
- if (percent < last_percent) return;
- last_percent = percent;
- this.setProgress(percent);
- }
- }),
- ]);
- } catch (error) {
- context.error = error;
- const retry = await context.dialog({
- title: "",
- message: i18n.t('launch.res_load_fail'),
- lblOK: i18n.t('launch.retry'),
- });
- if (retry) {
- return LaunchStateId.CheckVersion;
- }
- throw error;
- }
- this.setProgress(1);
- return LaunchStateId.EnterLobby;
- }
- private setProgress(percent: number, title?: string) {
- const from = this._context.totalProgress;
- const progress = math.lerp(from, 1, percent);
- this._context.progress({ state: this.id, title, progress })
- }
- }
|