chore:代码重构
This commit is contained in:
@@ -1,80 +1,202 @@
|
||||
import { _decorator, Component, js, JsonAsset, Node, resources, TypeScript } from 'cc';
|
||||
import { SingletonBase } from '../SingletonBase';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, js, JsonAsset, resources } from 'cc';
|
||||
import { setClassName } from '../../data/ConfigData';
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
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 {
|
||||
setClassName()
|
||||
this.initAllConfig()
|
||||
}
|
||||
|
||||
datas: Map<string, Array<any>> = new Map();
|
||||
|
||||
|
||||
createInstance(className: string): any {
|
||||
const Constructor = (window as any).ConfigData[className];
|
||||
|
||||
if (typeof Constructor === 'function') {
|
||||
return new Constructor();
|
||||
} else {
|
||||
console.error(`Class ${className} is not a constructor`);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
initAllConfig() {
|
||||
resources.loadDir(`data`, null, null, (err, assets) => {
|
||||
for (let i = 0; i < assets.length; i++) {
|
||||
let jsonAsset = assets[i] as JsonAsset
|
||||
let className = jsonAsset.name
|
||||
let array = new Array<any>()
|
||||
// this.datas.set((window as any)[className].name, array)
|
||||
console.log("是否有类", (window as any).ConfigData, className, (window as any).ConfigData[className])
|
||||
this.datas.set(js.getClassName((window as any).ConfigData[className]), array)
|
||||
|
||||
console.log("设置data", className, js.getClassName((window as any).ConfigData[className]))
|
||||
|
||||
for (let j = 0; j < jsonAsset.json.length; j++) {
|
||||
let myClassInstance = new (window as any).ConfigData[className]();
|
||||
let targetData: Record<string, any> = jsonAsset.json[j]
|
||||
this.initDataItem(myClassInstance, targetData)
|
||||
array.push(myClassInstance)
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (setClassName());
|
||||
void (this["initAllConfig"]());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public GetDataById<T>(dataClass: new () => T, id: number): T {
|
||||
let name = js.getClassName(dataClass)
|
||||
console.log("GetDataById", name)
|
||||
let datas = this.datas.get(name) as Array<T>
|
||||
for (let i = 0; i < datas.length; i++) {
|
||||
if (datas[i].id == id) {
|
||||
return datas[i]
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
initDataItem(obj, record: Record<string, any>) {
|
||||
for (const key in record) {
|
||||
if (record.hasOwnProperty(key) && obj.hasOwnProperty(key)) {
|
||||
obj[key] = record[key];
|
||||
}
|
||||
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 {
|
||||
}
|
||||
}
|
||||
|
||||
public GetDatas<T>(dataClass: new () => T): Array<T> {
|
||||
let name = js.getClassName(dataClass)
|
||||
console.log(this.datas.get(name))
|
||||
console.log(dataClass)
|
||||
console.log(name)
|
||||
console.log(this.datas)
|
||||
return this.datas.get(name) as Array<T>
|
||||
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 {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user