import { JsonAsset } from "cc"; import { singleton, Singleton } from "@max-studio/core/Singleton"; import LogUtils from "@max-studio/core/utils/LogUtils"; import { ConfigParseUtils } from "./ConfigParseUtils"; import { PetPartConfigData, parsePetPartConfigData } from "./PetPartConfigData"; import ResManager from "@max-studio/core/res/ResManager"; /** * PetPartConfig配置管理器 * * ⚠️ 此文件由配置表生成器自动生成,请勿手动修改! * 如需修改,请编辑对应的Excel配置文件,然后重新生成 */ @singleton({ auto: true }) export class PetPartConfigManager extends Singleton { private configList: readonly PetPartConfigData[] = []; private configMap = new Map(); private isLoaded = false; protected async onInit(): Promise { await this.loadConfig(); } private async loadConfig(): Promise { try { const { err, asset } = await ResManager.getInstance().loadAsset({ path: "generated/data/PetPartConfig", type: JsonAsset, bundle: "configs", }); this.parseConfig(asset.json); this.isLoaded = true; } catch (err) { LogUtils.error("PetPartConfigManager", "加载 PetPartConfig 配置失败:", err); } } private parseConfig(data: any[]): void { this.configList = Object.freeze( data.map((item) => { const config = parsePetPartConfigData(item); const frozenConfig = ConfigParseUtils.deepFreeze(config); return ConfigParseUtils.createReadonlyProxy(frozenConfig, "PetPartConfigData配置"); }), ); this.configMap.clear(); for (const config of this.configList) { this.configMap.set((config as any).id, config); } ConfigParseUtils.deepFreeze(this.configMap); } public getConfig(id: number): PetPartConfigData | null { if (!this.isLoaded) { LogUtils.warn("PetPartConfigManager", "PetPartConfig 配置尚未加载完成,请等待加载完成"); return null; } return this.configMap.get(id) || null; } public getAllConfigs(): PetPartConfigData[] { if (!this.isLoaded) { LogUtils.warn("PetPartConfigManager", "PetPartConfig 配置尚未加载完成,请等待加载完成"); return []; } return [...this.configList]; } public isConfigLoaded(): boolean { return this.isLoaded; } }