365 lines
10 KiB
TypeScript
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) {}
|
|
}
|
|
|