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;
|
||
}
|
||
}
|