| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 | 
							- import { JsonAsset, resources, TextAsset } from "cc";
 
- export interface DataBase{
 
-     id: number;
 
- }
 
- //一个文件 对应一个数据操作者
 
- class DataCtrl{
 
-     private _datas: Map<number, DataBase> = new Map();
 
-     constructor(asset: JsonAsset | TextAsset){
 
-         if(asset instanceof JsonAsset){
 
-             const datas: DataBase[] = <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 <cols.length; j++){
 
-                 //获取当前字符串值 根据类型定数据
 
-                 let val = cols[j];
 
-                 let v;
 
-                 switch(types[j]){
 
-                     case "boolean":
 
-                         v = Boolean(Number(val));
 
-                         break;
 
-                     case "string":
 
-                         v = val;
 
-                         break;
 
-                     case "number":
 
-                         v = Number(val);
 
-                         break;
 
-                     case "string[]":
 
-                         v = val.split(";");
 
-                         break;
 
-                     case "number[]":
 
-                         v = val.split(";");
 
-                         let arr:number[] = [];
 
-                         for(const info of v){
 
-                             arr.push(Number(info));
 
-                         }
 
-                         v = arr;
 
-                         break;
 
-                     default:
 
-                         break;
 
-                 }
 
-                 obj[keys[j]] = v;
 
-             }
 
-             const data: DataBase = <DataBase>obj;
 
-             this._datas.set(Number(data.id), data);
 
-         }
 
-     }
 
-     //通过id获取某个数据
 
-     getData<T extends DataBase>(id: number):T{
 
-         return <T>this._datas.get(id);
 
-     }
 
-     //获取当前文件解析的所有数据
 
-     getAllData<T extends DataBase>(): T[]{
 
-         return <T[]>Array.from(this._datas.values());
 
-     }
 
- }
 
- //管理所有数据操作者
 
- class DataManager{
 
-     private _dataCtrls: Map<string, DataCtrl> = 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<T extends DataBase>(id: number, ctrlName?: string):T{
 
-         //通过文件名 获取 数据操作者
 
-         if(ctrlName){
 
-             return this._dataCtrls.get(ctrlName).getData<T>(id);
 
-         }
 
-         //遍历所有的数据操作者 看看谁有id 为 id 的数据
 
-         for(const ctrl of Array.from(this._dataCtrls.values())){
 
-             const data = ctrl.getData<T>(id);
 
-             if(data){return data;}
 
-         }
 
-         //都没有
 
-         return null;
 
-     }
 
-     getAllDataByName<T extends DataBase>(name: string):T[]{
 
-         //获取文件名为 name 的数据操作者的所有数据
 
-         return this._dataCtrls.get(name).getAllData<T>();
 
-     }
 
- }
 
- export const dataMgr: DataManager = DataManager.instance = new DataManager();
 
 
  |