Files
18xchat/assets/Scripts/chat18x/manager/ConfigManager.ts
T

87 lines
2.4 KiB
TypeScript

import {
resources,
BufferAsset,
assetManager,
AssetManager,
} from "cc";
import * as cfg from "../../schema/schema";
import ByteBuf from "db://assets/Scripts/luban/ByteBuf";
export default class ConfigManager {
private static _instance: ConfigManager = null;
public static get I(): ConfigManager {
if (!this._instance) {
this._instance = new ConfigManager();
}
return this._instance;
}
public static tables: cfg.Tables = null;
private static dataMap = new Map<string, Uint8Array>();
public static jsonFileNames: string[] = [];
private constructor() {}
public init() {
this.loadAllConfig();
}
public loadConfigName(): void {
ConfigManager.jsonFileNames = cfg.Tables.getTableNames();
}
public loadAllConfig() {
this.loadConfigName();
let promises: Promise<unknown>[] = [];
for (let curFileName of ConfigManager.jsonFileNames) {
let promise = new Promise((resolve, reject) => {
let bundle = assetManager.getBundle("DataTable");
if (bundle) {
bundle.load(curFileName, BufferAsset, (err, data) => {
resolve(data);
});
} else {
assetManager.loadBundle(
"DataTable",
(err: Error, _bundle: AssetManager.Bundle) => {
if (err) {
console.log(err);
reject && reject(err);
return;
} else {
_bundle.load(curFileName, BufferAsset, (err, data) => {
resolve(data);
});
}
}
);
}
});
promise.then((data: BufferAsset) => {
if (data) {
ConfigManager.dataMap.set(
curFileName,
new Uint8Array(data.buffer().slice(0, data.buffer().byteLength))
);
} else {
console.error("静态配置加载失败" + curFileName);
}
});
promises.push(promise);
}
Promise.all(promises).then((values) => {
console.log("静态配置加载完成");
ConfigManager.tables = new cfg.Tables(ConfigManager.I.getFileData);
for (let item of ConfigManager.tables.TbGirls.getDataList()) {
console.log(item);
}
});
}
private getFileData(fileName: string): ByteBuf {
if (ConfigManager.dataMap.has(fileName)) {
return new ByteBuf(ConfigManager.dataMap.get(fileName));
}
return null;
}
}