feat: 提交资源

This commit is contained in:
han_han9
2025-10-28 21:55:41 +08:00
parent 591f398085
commit 55c4fcd9ae
2146 changed files with 172747 additions and 456 deletions

View File

@@ -0,0 +1,88 @@
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 { PetConfigData, parsePetConfigData } from "./PetConfigData";
/**
* PetConfig配置管理器
*
* ⚠️ 此文件由配置表生成器自动生成,请勿手动修改!
* 如需修改请编辑对应的Excel配置文件然后重新生成
*/
@singleton()
export class PetConfigManager extends Singleton {
private configList: readonly PetConfigData[] = [];
private configMap = new Map<number, PetConfigData>();
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/PetConfig",
JsonAsset,
"configs",
);
this.parseConfig(<any>asset.json);
this.isLoaded = true;
} catch (err) {
LogUtils.error(
"PetConfigManager",
"加载 PetConfig 配置失败:",
err,
);
}
}
private parseConfig(data: any[]): void {
this.configList = Object.freeze(
data.map((item) => {
const config = parsePetConfigData(item);
const frozenConfig = ConfigParseUtils.deepFreeze(config);
return ConfigParseUtils.createReadonlyProxy(
frozenConfig,
"PetConfigData配置",
);
}),
);
this.configMap.clear();
for (const config of this.configList) {
this.configMap.set(config.id, config);
}
// 深度冻结配置映射,防止运行时修改
ConfigParseUtils.deepFreeze(this.configMap);
}
public getConfig(id: number): PetConfigData | null {
if (!this.isLoaded) {
LogUtils.warn(
"PetConfigManager",
"PetConfig 配置尚未加载完成,请等待加载完成",
);
return null;
}
return this.configMap.get(id) || null;
}
public getAllConfigs(): PetConfigData[] {
if (!this.isLoaded) {
LogUtils.warn(
"PetConfigManager",
"PetConfig 配置尚未加载完成,请等待加载完成",
);
return [];
}
return [...this.configList];
}
public isConfigLoaded(): boolean {
return this.isLoaded;
}
}