marineparkclient/assets/script/Model/data/DataManager.ts
2023-08-15 11:09:12 +08:00

179 lines
6.9 KiB
TypeScript

import { baseObj,objType,valueObj,composeObj} from "./baseObject";
import { Propbuff, PropLeaveUp, PropSale, PropUnlock} from "./propObject";
import {objCfg,expressCfg,saleCfg,levelCfg,unlockCfg,excelOutDataConfig,fileCfgType, singInCfg} from './excelDefine'
import ComputeExpression from './computed'
import gameInfo from './gameInfo'
import { hallproto } from "../../netPb/protobundle";
//import fs from "fs"
//配置表的保存和,数据对象的生成
export default class DataManager{
private static instance: any;
public static ins(): DataManager
{
this.instance = this.instance || new DataManager()
return this.instance
}
private dataConfig:excelOutDataConfig
//签到配置
private dataSignIn:Array<singInCfg>
///////////////////////////////////////////////////////////////////////////////
private mapExpress:Map<number,ComputeExpression> = new Map<number,ComputeExpression>()
protected constructor(){
this.dataConfig={
arObj: new Array<objCfg>(),
arLv : new Array<levelCfg>(),
arUnlock: new Array<unlockCfg>(),
arSale : new Array<saleCfg>(),
express : new Array<expressCfg>()
}
}
//创建对象
private createObjById(id:number,list:Map<number,baseObj>):baseObj|undefined{
if(this.dataConfig==undefined || this.dataConfig.arObj==undefined)return
let itemCfg = this.getObjCfgById(id)
if(itemCfg==undefined)return
let obj = new baseObj()
if(itemCfg._members.length>0)//有成员
{
obj = new composeObj(itemCfg._id,itemCfg._name);
for(let idx=0;idx<itemCfg._members.length;++idx){
let membs = itemCfg._members[idx]
for(let idMemb=membs[0];idMemb<=membs[1];++idMemb)
{
let membObj = this.createObjById(idMemb,list);
if(membObj)
(obj as composeObj).addMember(idMemb,membObj);
}
}
}
else//数值类型
obj = new valueObj(itemCfg._id,itemCfg._name);
//升级属性
let cfglvData = this.getLevelCfgByIdLv(id,1)
if(cfglvData)
{
obj.addProp(new PropLeaveUp())//有升级就有buff
//buff属性
obj.addProp(new Propbuff())//有升级就有buff
}
//解锁属性
let unlockData = this.getUnlockCfgById(itemCfg._id)
if(unlockData || cfglvData)
obj.addProp(new PropUnlock())
//出售
let saleData = this.getSaleById(itemCfg._id)
if(saleData)
obj.addProp(new PropSale())
//
list.set(id,obj)
return obj
}
//设置物品配置
getObjCfgById(id:number):objCfg|undefined{
if(this.dataConfig)
{
for(let idx=0;idx<this.dataConfig.arObj.length;++idx)
{
if(this.dataConfig.arObj[idx]._id==id)
return this.dataConfig.arObj[idx]
}
}
}
getLevelCfgByIdLv(id:number,lv:number):levelCfg|undefined{
if(this.dataConfig==undefined)return undefined
let arr = this.dataConfig.arLv
for(let idx=0;idx<arr.length;++idx){
if(id>=arr[idx]._idItemRange[0]&&id<=arr[idx]._idItemRange[1] && lv >= arr[idx]._levelrange[0]&& lv <= arr[idx]._levelrange[1])
return arr[idx]
}
}
getUnlockCfgById(id:number):unlockCfg|undefined{
if(this.dataConfig==undefined)return undefined
let arr = this.dataConfig.arUnlock
for(let idx=0;idx<arr.length;++idx){
if(id>=arr[idx]._idItemRange[0]&&id<=arr[idx]._idItemRange[1])
return arr[idx]
}
}
getExpress(id:number):expressCfg|undefined{
if(this.dataConfig)
{
for(let idx=0;idx<this.dataConfig.express.length;++idx)
{
if(this.dataConfig.express[idx]._id==id)
return this.dataConfig.express[idx]
}
}
}
getComputeExpression(id:number):ComputeExpression|undefined{
return this.mapExpress.get(id)
}
//卖出售
getSaleById(id:number):saleCfg|undefined{
if(this.dataConfig==undefined)return undefined
let arr = this.dataConfig.arSale
for(let idx=0;idx<arr.length;++idx){
if(id>=arr[idx]._idItemRange[0]&&id<=arr[idx]._idItemRange[1])
return arr[idx]
}
}
//获取配置
getDataConfig(){
return this.dataConfig
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//初始化玩家资产
creatGameInfo(id:number){
//生成游戏对象
let gameObj = new gameInfo(id)
let arCfg = this.getObjCfgById(0)
if(arCfg)
{
for (let idx=0;idx<arCfg._members.length;++idx){
let membs = arCfg._members[idx]
for(let idMemb=membs[0];idMemb<=membs[1];++idMemb)
{
let membObj = this.createObjById(idMemb,gameObj.m_mapMeansList);
if(membObj)
gameObj.addMember(idMemb,membObj);
}
}
}
return gameObj
}
//读取配置转对象
readConfigToObj(result:string,typeFile:fileCfgType){
// let result = fs.readFileSync('./app/config/exconfig.data', 'utf8')
if (!result)
console.log("read-loadConfig-erro");
else
{
if(typeFile==fileCfgType.obj)//对象
this.dataConfig.arObj = JSON.parse(result)
else if(typeFile==fileCfgType.level)//
this.dataConfig.arLv = JSON.parse(result)
else if(typeFile==fileCfgType.unlock)//
this.dataConfig.arUnlock = JSON.parse(result)
else if(typeFile==fileCfgType.sale)//
this.dataConfig.arSale = JSON.parse(result)
else if(typeFile==fileCfgType.ruleFunc)//
{
this.dataConfig.express = JSON.parse(result)
//console.log(dataParse)
//生成表达式对象
for (let idx=0;idx<this.dataConfig.express.length;++idx) {
let valueExp = this.dataConfig.express[idx]
if(valueExp._id/300>1)
{
let cTempEx = new ComputeExpression(valueExp._desp)
this.mapExpress.set(valueExp._id,cTempEx)
}
}
}
}
}
}