Files
2026-07-17 10:54:32 +08:00

203 lines
8.7 KiB
TypeScript

// @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<T> = new () => T;
@ccclass('DataMgr')
export class DataMgr extends SingletonBase<DataMgr> {
datas: Map<string, any[]> = 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<T extends ConfigRecord>(dataClass: ConfigConstructor<T>, 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<string, any>): 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<string, any>)[key] = record[key]);
}
}
} while (false);
}
finally {
}
}));
}
} while (false);
}
finally {
}
}
public GetDatas<T>(dataClass: ConfigConstructor<T>): 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<string, any>[])["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<any> {
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<T>(className: string, errorMessage: string, use: (Constructor: ConfigConstructor<any>) => 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 {
}
}
}