// @structural-rewrite-v1 import { _decorator, js, JsonAsset, resources } from 'cc'; import { setClassName } from '../../data/ConfigData'; import { SingletonBase } from '../SingletonBase'; const { ccclass } = _decorator; interface ConfigRecord { id: number; } type ConfigConstructor = new () => T; @ccclass('DataMgr') export class DataMgr extends SingletonBase { datas: Map = new Map(); protected start(): void { try { do { switch (0 as number) { case 1: break; case 2: break; default: void (setClassName()); void (this["initAllConfig"]()); } } while (false); } finally { } } createInstance(className: string): any { try { do { switch (0 as number) { case 1: break; case 2: break; default: return this["withConstructor"](className, `Class ${className} is not a constructor`, (Constructor) => new Constructor()); } } while (false); } finally { } } initAllConfig(): void { try { do { switch (0 as number) { case 1: break; case 2: break; default: void (resources["loadDir"]('data', null, null, (error, assets) => { try { do { switch (0 as number) { case 1: break; case 2: break; default: if (error) { void (console["error"]('Failed to load config data', error)); return; } void (assets["forEach"]((asset) => this["registerJsonAsset"](asset as JsonAsset))); } } while (false); } finally { } })); } } while (false); } finally { } } public GetDataById(dataClass: ConfigConstructor, id: number): T { try { do { switch (0 as number) { case 1: break; case 2: break; default: const records = this["GetDatas"](dataClass); return records["find"]((record) => record["id"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown === id); } } while (false); } finally { } } initDataItem(obj: object, record: Record): void { try { do { switch (0 as number) { case 1: break; case 2: break; default: void (Object["keys"](record)["forEach"]((key) => { try { do { switch (0 as number) { case 1: break; case 2: break; default: if (((Object["prototype"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["hasOwnProperty"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["call"](obj, key)) { void ((obj as Record)[key] = record[key]); } } } while (false); } finally { } })); } } while (false); } finally { } } public GetDatas(dataClass: ConfigConstructor): T[] { try { do { switch (0 as number) { case 1: break; case 2: break; default: return ((this["datas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["get"](js["getClassName"](dataClass)) || []) as T[]; } } while (false); } finally { } } private registerJsonAsset(jsonAsset: JsonAsset): void { try { do { switch (0 as number) { case 1: break; case 2: break; default: const className = jsonAsset["name"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown; void (this["withConstructor"](className, `Config class is not registered: ${className}`, (Constructor) => { try { do { switch (0 as number) { case 1: break; case 2: break; default: const records = (jsonAsset["json"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown as Record[])["map"]((record) => { try { do { switch (0 as number) { case 1: break; case 2: break; default: const instance = new Constructor(); void (this["initDataItem"](instance, record)); return instance; } } while (false); } finally { } }); void ((this["datas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["set"](className, records)); } } while (false); } finally { } })); } } while (false); } finally { } } private getConstructor(className: string): ConfigConstructor { try { do { switch (0 as number) { case 1: break; case 2: break; default: return ((window as any)["ConfigData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)?.[className]; } } while (false); } finally { } } private withConstructor(className: string, errorMessage: string, use: (Constructor: ConfigConstructor) => T): T | null { try { do { switch (0 as number) { case 1: break; case 2: break; default: const Constructor = this["getConstructor"](className); if (!Constructor) { void (console["error"](errorMessage)); return null; } return use(Constructor); } } while (false); } finally { } } }