89 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { JsonAsset } from "cc";
 | 
						||
 | 
						||
import { ResManager } from "@max-studio/core/res/ResManager";
 | 
						||
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";
 | 
						||
 | 
						||
/**
 | 
						||
 * PetPartConfig配置管理器
 | 
						||
 *
 | 
						||
 * ⚠️ 此文件由配置表生成器自动生成,请勿手动修改!
 | 
						||
 * 如需修改,请编辑对应的Excel配置文件,然后重新生成
 | 
						||
 */
 | 
						||
@singleton()
 | 
						||
export class PetPartConfigManager extends Singleton {
 | 
						||
    private configList: readonly PetPartConfigData[] = [];
 | 
						||
    private configMap = new Map<number, PetPartConfigData>();
 | 
						||
    private isLoaded = false;
 | 
						||
 | 
						||
    protected async onInit(): Promise<void> {
 | 
						||
        await this.loadConfig();
 | 
						||
    }
 | 
						||
 | 
						||
    private async loadConfig(): Promise<void> {
 | 
						||
        try {
 | 
						||
            const asset = await ResManager.getInstance().loadAsset<JsonAsset>(
 | 
						||
                "generated/data/PetPartConfig",
 | 
						||
                JsonAsset,
 | 
						||
                "configs",
 | 
						||
            );
 | 
						||
            this.parseConfig(<any>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.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;
 | 
						||
    }
 | 
						||
}
 |