Browse Source

DataManager

0224995 1 month ago
parent
commit
0ab1be9f26

+ 9 - 0
assets/Script/DataItem.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "1.2.0",
+  "importer": "directory",
+  "imported": true,
+  "uuid": "9dfeca28-dfa6-4853-b6b6-0642667efaf1",
+  "files": [],
+  "subMetas": {},
+  "userData": {}
+}

+ 10 - 0
assets/Script/DataItem/ItemData.ts

@@ -0,0 +1,10 @@
+import { DataBase } from "../Frames/DataManager";
+
+//通过接口的属性 去 访问实际表格当中的属性
+export interface GameResData extends DataBase{
+    resName: string,
+    path: string,
+    replace: string[],
+    atlas: boolean
+}
+

+ 9 - 0
assets/Script/DataItem/ItemData.ts.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "4.0.23",
+  "importer": "typescript",
+  "imported": true,
+  "uuid": "6ffcf050-ff9a-4e94-a536-c9156cca53d0",
+  "files": [],
+  "subMetas": {},
+  "userData": {}
+}

+ 88 - 0
assets/Script/Frames/DataManager.ts

@@ -1,6 +1,94 @@
+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++){
+                obj[keys[j]] = cols[j];
+            }
+            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();

+ 1 - 1
assets/Script/Frames/ResourcesMgr.ts

@@ -1,4 +1,4 @@
-import { Asset, AssetManager, Prefab, resources, SpriteFrame, TiledMap, TiledMapAsset } from "cc";
+import { Asset, AssetManager, Prefab, resources, SpriteFrame, TiledMapAsset } from "cc";
 
 class ResourcesMgr{
 

+ 3 - 1
assets/Script/SelectScene.ts

@@ -1,6 +1,7 @@
 import { _decorator, Component, Node ,Button,director, PageView, NodeEventType, Prefab, instantiate, Animation, Vec3} from 'cc';
 import { GameInfo } from './GameInfo';
 import { resMgr } from './Frames/ResourcesMgr';
+import { dataMgr } from './Frames/DataManager';
 const { ccclass, property } = _decorator;
 
 @ccclass('SelectScene')
@@ -27,7 +28,8 @@ export class SelectScene extends Component {
     btnLeft: Node = null;
 
     start() {
-        console.log(resMgr)
+        console.log("resMgr:" + resMgr)
+        console.log("dataMgr:" + dataMgr.getAllDataByName("GameResPath"));
          //总页数
          this.totalPages = this.pageView.getComponent(PageView).getPages().length;
          //当前索引值

+ 2 - 0
assets/Script/StartScene.ts

@@ -1,5 +1,6 @@
 import { _decorator, Button, Component, Node,director ,tween, Vec3, Vec2, UIOpacity, Animation,} from 'cc';
 import { resMgr } from './Frames/ResourcesMgr';
+import { dataMgr } from './Frames/DataManager';
 const { ccclass, property } = _decorator;
 
 @ccclass('StartScene')
@@ -30,6 +31,7 @@ export class NewComponent extends Component {
         
     }
     async start() {
+        await dataMgr.loadDataDir("Data");
         await resMgr.loadAllRes("Res");
 
         this._logo();

+ 10 - 1
assets/resources/Data/GameResPath.csv

@@ -1 +1,10 @@
-锘�
+数据的属性,id,resName,path,replace,atlas
+数据类型,number,string,string,string[],boolean
+瓦片地图,1,theme-lv-tmx,Themetheme/BGlv/BGPath,theme;lv,0
+地图画面,2,theme-lv-pathBg,Themetheme/BGlv/BG-hd.pvr.ccz/spriteFrame,theme;lv,0
+背景1,3,theme-1,Themetheme/BG0/BG1-hd.pvr.ccz/spriteFrame,theme,0
+背景2,4,theme-2,Themetheme/BG0/BG2-hd.pvr.ccz/spriteFrame,theme,0
+怪物图集1,5,theme-,Themetheme/Items/Monsters01-hd,theme,1
+怪物图集2,6,theme-,Themetheme/Items/Monsters02-hd,theme,1
+障碍物图集1,7,theme-1-,Themetheme/Items/Object01-hd,theme,1
+障碍物图集2,8,theme-2-,Themetheme/Items/Object02-hd,theme,1

+ 1 - 1
assets/resources/Data/GameResPath.csv.meta

@@ -2,7 +2,7 @@
   "ver": "1.0.2",
   "importer": "text",
   "imported": true,
-  "uuid": "cd73799d-ad57-4a1a-ac62-d70acbe94aba",
+  "uuid": "79bda8dd-373a-4fe8-8ddc-4267b02f3f6f",
   "files": [
     ".json"
   ],

+ 29 - 0
assets/resources/Data/LevelDt.csv

@@ -0,0 +1,29 @@
+名称,id,towerid,totalwave
+类型,number,arr_number,number
+关卡,1001,1;2,15
+关卡,1002,1;2;3,15
+关卡,1003,1;2;4,20
+关卡,1004,2;5,20
+关卡,1005,2;4,20
+关卡,1006,2;3,25
+关卡,1007,1;5,20
+关卡,1008,4;3;5,25
+关卡,1009,1;2;4;3;5,20
+关卡,2001,1;2;3;4;5,15
+关卡,2002,2;4;6,20
+关卡,2003,3;6;7,20
+关卡,2004,4;7;8,20
+关卡,2005,3;6;7;8,25
+关卡,2006,5;7;8;9,20
+关卡,2007,3;4;5;6;8;9,20
+关卡,2008,2;4;3;5;6;7;8;9,25
+关卡,2009,1;4;6;7,20
+关卡,3001,6;7;8;9,15
+关卡,3002,1;7;10,20
+关卡,3003,3;4;6;7;8;10;5,20
+关卡,3004,1;7;10;11,20
+关卡,3005,1;4;5;6;12;7;10;11,25
+关卡,3006,1;4;6;7;8;12,20
+关卡,3007,10;11;12;13;7,20
+关卡,3008,6;7;8;9;10;11;12;13,30
+关卡,3009,1;10;13,20

+ 11 - 0
assets/resources/Data/LevelDt.csv.meta

@@ -0,0 +1,11 @@
+{
+  "ver": "1.0.2",
+  "importer": "text",
+  "imported": true,
+  "uuid": "a955bde6-62bf-4101-b698-f3c104a2d2bc",
+  "files": [
+    ".json"
+  ],
+  "subMetas": {},
+  "userData": {}
+}

+ 15 - 0
assets/resources/Data/TowerDt.csv

@@ -0,0 +1,15 @@
+名称,id,lvIcon,cardImg,chassis,fireAniImg,fireAniCount,effectAni,bulletAniImg,bulletAniCount,buff,fireType
+,number,string,string[],string[],string,number,string[],string,number,string[],string
+绿瓶,1,TBottle,Bottle00;Bottle01,Bottle-11,Bottle,3,PBottle01;PBottle02,PBottle,3,none,shoot
+屎,2,TShit,Shit00;Shit01,Shit-11;Shit-12;Shit-13,Shit,3,PShit01;PShit02,PShit,2,PShit-11;PShit-12,shoot
+叶子,3,TLeaf,Fan00;Fan01,Fan-11;Fan-12;Fan-13,Fan,3,PFan01;PFan02,PFan,1,none,shoot
+金色五角星,4,TRedStart,Star00;Star01,Star-11;Star-12;Star-13,Star,3,PStar01;PStar02,PStar,1,PStar-11;PStar-12;PStar-13;PStar-14;PStar-15;PStar-16,shoot
+电球,5,TThunder,Ball00;Ball01,Ball-11;Ball-12;Ball-13,Ball,4,PBall01;PBall02,PBall,4,none,stick
+火瓶子,6,TFireBottle,FBottle00;FBottle01,FBottle-11,FBottle,3,PFBottle01;PFBottle02,PFBottle,2,none,stick
+冰五角,7,TBlueStart,BStar00;BStar01,BStar-11;BStar-12;BStar-13,BStar,3,PBStar01;PBStar02,PBStar,1,PBStar-11;PBStar-12;PBStar-13;PBStar-14;PBStar-15;PBStar-16,shoot
+太阳,8,TSun,Sun00;Sun01,Sun-11;Sun-12;Sun-13,Sun,1,PSun01;PSun02;PSun03;PSun04;PSun05;PSun06;PSun07;PSun08;PSun09,PSun,5,none,expand
+火箭,9,TRocket,Rocket00;Rocket01,Rocket-11;Rocket-12;Rocket-13,Rocket,3,PRocket01;PRocket02,PRocket,5,PRocket-11;PRocket-12;PRocket-13;PRocket-14;PRocket-15;PRocket-16,shoot
+毒针,10,TPin,Pin00;Pin01,Pin-11;Pin-12;Pin-13,Pin,3,PPin01;PPin02;PPin03;PPin04,PPin,2,none,shoot
+弩,11,TBow,Arrow00;Arrow01,Arrow-11;Arrow-12;Arrow-13,Arrow,3,PArrow01;PArrow02,PArrow,2,none,mshoot
+雪花,12,TIce,Snow00;Snow01,Snow-11;Snow-12;Snow-13,Snow,3,none,PSnow,5,PSnow-21,expand
+飞机,13,TPlane,Plane00;Plane01,Plane-11,Plane,3,PPlane01;PPlane02;PPlane03;PPlane04;PPlane05,PPlane,3,none,laser

+ 11 - 0
assets/resources/Data/TowerDt.csv.meta

@@ -0,0 +1,11 @@
+{
+  "ver": "1.0.2",
+  "importer": "text",
+  "imported": true,
+  "uuid": "1c110378-5877-4b06-9d68-894e62cc7f8e",
+  "files": [
+    ".json"
+  ],
+  "subMetas": {},
+  "userData": {}
+}