import { JsonAsset, resources, TextAsset } from "cc"; export interface DataBase{ id: number; } //一个文件 对应一个数据操作者 class DataCtrl{ private _datas: Map = new Map(); constructor(asset: JsonAsset | TextAsset){ if(asset instanceof JsonAsset){ const datas: DataBase[] = asset.json; for(const data of datas){ this._datas.set(Number(data.id), data); } return; } //表格数据 if(asset instanceof TextAsset){ this._parseCSV(asset.text); } } private _parseCSV(text: string){ const lines: string[] = text.split("\r\n"); //表格中 单元格以逗号,分开 const keys: string[] = lines[0].split(","); const types: string[] = lines[1].split(","); //有用的数据 for(let i = 2; i < lines.length - 1; i++){ const cols: string[] = lines[i].split(","); //每一行就是一个数据 创建一个空对象 存储数据 let obj = {}; for(let j = 1; j obj; this._datas.set(Number(data.id), data); } } //通过id获取某个数据 getData(id: number):T{ return this._datas.get(id); } //获取当前文件解析的所有数据 getAllData(): T[]{ return Array.from(this._datas.values()); } } //管理所有数据操作者 class DataManager{ private _dataCtrls: Map = new Map(); static instance: DataManager = null; async loadDataDir(dir: string){ const assets: TextAsset[] | JsonAsset[] = await new Promise((values, reject)=>{ resources.loadDir(dir,(err: Error, assets: TextAsset[] | JsonAsset[])=>{ if(err){ reject(err); } else{ values(assets); } }) }) for(const asset of assets){ this._dataCtrls.set(asset.name, new DataCtrl(asset)); } } getData(id: number, ctrlName?: string):T{ //通过文件名 获取 数据操作者 if(ctrlName){ return this._dataCtrls.get(ctrlName).getData(id); } //遍历所有的数据操作者 看看谁有id 为 id 的数据 for(const ctrl of Array.from(this._dataCtrls.values())){ const data = ctrl.getData(id); if(data){return data;} } //都没有 return null; } getAllDataByName(name: string):T[]{ //获取文件名为 name 的数据操作者的所有数据 return this._dataCtrls.get(name).getAllData(); } } export const dataMgr: DataManager = DataManager.instance = new DataManager();