games/BladeStruggle/assets/script/tscript/core/DataManager.ts

365 lines
10 KiB
TypeScript

import ResourcesManager from "./ResourcesManager";
import DataStorage from "./DataStorage";
import PlayerData from "../data/PlayerData";
import LevelData from "../data/LevelData";
import NameConfigData from "../configdata/NameConfigData";
import LevelConfigData from "../configdata/LevelConfigData";
import KnifeConfigData from "../configdata/KnifeConfigData";
import CustomEventType from "../event/CustomEventType";
import AccountRankData from "../configdata/AccountRankData";
// Learn TypeScript:
// - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/typescript.html
// - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/typescript.html
// Learn Attribute:
// - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html
// - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
// - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html
// - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/life-cycle-callbacks.html
const {ccclass, property} = cc._decorator;
@ccclass
export default class DataManager extends cc.Component {
private static _instance: DataManager;
public static get instance(): DataManager {
if(this._instance == null)
{
this._instance = new DataManager();
this._instance.init();
}
return DataManager._instance;
}
/**
* 玩家数据
*/
private _playerData:PlayerData = null;
private _levelData:LevelData = null;
private _nameConfigDatas: NameConfigData[] = null;
public get nameConfigDatas(): NameConfigData[]
{
return this._nameConfigDatas;
}
private _levelConfigDatas: LevelConfigData[] = null;
public get levelConfigDatas(): LevelConfigData[]
{
return this._levelConfigDatas;
}
private _knifeConfigDatas: KnifeConfigData[] = null;
public get knifeConfigDatas(): KnifeConfigData[] {
return this._knifeConfigDatas;
}
private _accountRankConfigDatas: AccountRankData[] = null;
public get accountRankConfigDatas(): AccountRankData[] {
return this._accountRankConfigDatas;
}
private _accountRankCnfDatasDic: {
[key: number]: AccountRankData[];
} = {};
public get accountRankCnfDatasDic(): {
[key: number]: AccountRankData[];
} {
return this._accountRankCnfDatasDic;
}
private _ctlevelConfigDatas: LevelConfigData[] = [];
public get ctlevelConfigDatas(): LevelConfigData[]
{
return this._ctlevelConfigDatas;
}
private _isJosnLoaded = false;
private init()
{
/**发布版本一点要删除 */
//DataStorage.removeItem("playerData");
//DataStorage.removeItem("levelData");
//DataStorage.removeItem("day");
}
//加载配置数据
public loadComfigDatas(callback:Function)
{
if(this._isJosnLoaded)
{
callback();
return;
}
var jsonArr = ["LevelTable","NameTable","KnifeTable","AccountRankTable"];
var resMgr = ResourcesManager.instance;
resMgr.loadJson("LevelTable",(data,jsonName)=>{this._levelConfigDatas = data; removeJsonitem(jsonName);});
resMgr.loadJson("NameTable",(data,jsonName)=>{this._nameConfigDatas = data;removeJsonitem(jsonName);});
resMgr.loadJson("KnifeTable",(data,jsonName)=>{this._knifeConfigDatas = data;removeJsonitem(jsonName);});
resMgr.loadJson("AccountRankTable",(data,jsonName)=>{this._accountRankConfigDatas = data;removeJsonitem(jsonName);});
this.schedule(wait,0.02);
var self = this;
function wait()
{
if(jsonArr.length == 0)
{
this.onConfigDataLoadComp();
callback();
self.unschedule(wait);
self._isJosnLoaded = true;
}
}
function removeJsonitem(item:string)
{
var index = jsonArr.indexOf(item);
if(index >= 0)
{
jsonArr.splice(index,1);
}
}
}
private onConfigDataLoadComp()
{
var len:number = this._accountRankConfigDatas.length;
for(var i = 0 ; i < len; i++)
{
var arcnfdata = this._accountRankConfigDatas[i];
if(!this._accountRankCnfDatasDic[arcnfdata.level])
{
this._accountRankCnfDatasDic[arcnfdata.level] = [];
}
this._accountRankCnfDatasDic[arcnfdata.level].push(arcnfdata);
}
len = this._levelConfigDatas.length;
for(var i = 0 ; i < len; i++)
{
var levelcnfdata:LevelConfigData = this._levelConfigDatas[i];
if(levelcnfdata.contentType == 0)
{
continue;
}
this._ctlevelConfigDatas.push(levelcnfdata);
}
this.updateDataEveryDay();
}
private updateDataEveryDay()
{
//DataStorage.setItem("day","2018/11/22");
var yesterday:Date = new Date();
yesterday.setDate(yesterday.getDate() - 1);
var lastDay:string = DataStorage.getItem("day",this.getLocaleDateString(yesterday));
//cc.log("上次登录时间",lastDay,DataStorage.getItem("day","没存储"));
//var date1:Date = new Date("2018/11/15 00:00:00");
var lastDate:Date = new Date(lastDay); //上一次的日期
var nowDate:Date = new Date(this.getLocaleDateString(new Date())); //现在的日期
var dateDifc = (nowDate.getTime() - lastDate.getTime()) / 86400000;
//cc.log("dateDifc",dateDifc,this.getLocaleDateString(nowDate),this.getLocaleDateString(new Date()),this.getSignInData().lastLoginDay);
var checkTimer = function(dt)
{
nowDate = new Date();
if(nowDate.getHours()>=6)//每天凌晨6点钟刷新数据
{
cc.log("新的一天到了");
this.getPlayerData().logindays ++;
this.getPlayerData().todayUseFace = false; //每天重置表情是否试用
this.savePlayerData();
this.unschedule(checkTimer);
DataStorage.setItem("day",this.getLocaleDateString(nowDate));
cc.systemEvent.emit(CustomEventType.NewDay);
}
}.bind(this);
//this.scheduleOnce(checkTimer,1.25);//首次快速更新一下
if(dateDifc >= 1)//如果是新的一天
{
this.schedule(checkTimer,5);
checkTimer(0);
}else if(dateDifc < 0)
{
//cc.log("用户手动调了系统时间");
//this.schedule(checkTimer,5);
//checkTimer(0);
DataStorage.setItem("day",this.getLocaleDateString(nowDate));//重新存储当前时间
}
}
public getLocaleDateString(date:Date):string
{
//"2018/11/22"
var year:string = date.getFullYear().toString();
var mon:number = date.getMonth() + 1;
var month:string = mon < 10 ? "0" + mon : mon.toString();
var day:string = date.getDate() < 10 ? "0" + date.getDate() : date.getDate().toString();
return year + "/" + month + "/" + day;
}
public getNowTime():number
{
return Date.now();
}
public getPlayerData():PlayerData
{
if(this._playerData == null)
{
this._playerData = new PlayerData();
var localData:PlayerData = JSON.parse(DataStorage.getItem("playerData"));
if(localData)
{
for(var key in localData)
{
if(typeof this._playerData[key] != "undefined")
{
this._playerData[key] = localData[key];
}
}
}
//cc.log("playerdata",this._playerData);
}
return this._playerData;
}
public savePlayerData():void
{
DataStorage.setItem("playerData",JSON.stringify(this._playerData));
}
public getLevelData():LevelData
{
if(this._levelData == null)
{
this._levelData = new LevelData();
var localData:PlayerData = JSON.parse(DataStorage.getItem("levelData"));
if(localData)
{
for(var key in localData)
{
if(typeof this._levelData[key] != "undefined")
{
this._levelData[key] = localData[key];
}
}
}
}
return this._levelData;
}
public saveLevelData():void
{
DataStorage.setItem("levelData",JSON.stringify(this._levelData));
}
public getNameConfigData(id:number):NameConfigData
{
if(id <= 0)
return null;
return this._nameConfigDatas[id - 1];
}
public getLevelConfigData(id:number):LevelConfigData
{
if(id <= 0)
return null;
return this._levelConfigDatas[id - 1];
}
public getKnifeConfigData(id:number):KnifeConfigData
{
if(id <= 0)
return null;
return this._knifeConfigDatas[id - 1];
}
public getLevelId(star:number):number
{
var leveCnfdatas = this.levelConfigDatas;
var index:number = 0;
if(star >= leveCnfdatas[leveCnfdatas.length - 1].stars)
{
index = leveCnfdatas.length - 1;
}else
{
for(var i = 0 ; i < leveCnfdatas.length - 1; i++)
{
if(star >= leveCnfdatas[i].stars && star < leveCnfdatas[i + 1].stars)
{
index = i;
break;
}
}
}
return leveCnfdatas[index].id;
}
public getLevel(star:number):number
{
var levelId = this.getLevelId(star);
var levelcnfdata:LevelConfigData = DataManager.instance.levelConfigDatas[levelId - 1];
return levelcnfdata.level
}
// update (dt) {}
}