You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
AdLike2048/assets/mx/module/res/LoadPolicy.ts

58 lines
1.8 KiB

import { Asset } from 'cc';
import { ResPakage } from './ResourcesManager';
/** 加载优先级:critical > interactive > background > silent */
export type LoadPriority = 'critical' | 'interactive' | 'background' | 'silent';
/** local=本地 bundle;network=需联网且失败时展示 loading */
export type LoadPolicyKind = 'local' | 'network';
export interface LoadOptions {
priority?: LoadPriority;
policy?: LoadPolicyKind;
/** 是否启用运行时 loading(实际延迟由 RuntimeLoadingConfig.showAfterMs 统一控制) */
showLoadingAfterMs?: number;
onProgress?: (current: number, total: number) => void;
}
export interface AssetDesc {
name: string;
bundle: string;
path: string;
type: typeof Asset;
}
export const DEFAULT_LOAD_OPTIONS: Required<Pick<LoadOptions, 'priority' | 'policy' | 'showLoadingAfterMs'>> = {
priority: 'interactive',
policy: 'local',
showLoadingAfterMs: 1,
};
export function mergeLoadOptions(opts?: LoadOptions): Required<Pick<LoadOptions, 'priority' | 'policy' | 'showLoadingAfterMs'>> & LoadOptions {
return {
...DEFAULT_LOAD_OPTIONS,
...opts,
};
}
export type LoadTask = () => Promise<void>;
export interface ScheduledTask {
id: number;
priority: LoadPriority;
run: LoadTask;
resolve: () => void;
reject: (err: unknown) => void;
}
export function assetKey(name: string, path: string, bundle: string, type: typeof Asset): string {
const n = type === Asset ? name : name;
return `${bundle}|${path}|${n}|${type.name}`;
}
export function packageToTasks(pkg: ResPakage, opts?: LoadOptions): Array<{ desc: AssetDesc; options: LoadOptions }> {
return pkg.ress.map((r) => ({
desc: { name: r.name, path: r.path, bundle: r.bundle, type: r.type },
options: mergeLoadOptions(opts),
}));
}