import Define from "./common/Define"; import Common from "./common/Common"; import WXHelper from "./common/WXHelper"; import LDataCannonManager from "./datas/LDataCannonManager"; import TimeTaskManager from "./manager/TimeTaskManager"; import LDataSceneManager from "./datas/LDataSceneManager"; // 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 UserInfo { //当前关卡等级 public static curLevel:number = 1; //发射子弹的数量 public static bulletShootMaxCount:number = 3; //可以升级 子弹的发射数量 //玩家的最大分数 public static maxScore:number = 0; public static serverMaxScore:number = 0; //火力 public static firePower:number = 1; //可以升级 增加分数 //金币掉落的等级 public static goldDropLevel:number = 1; //可以升级 增加金币掉落的产出 //玩家当前金币 public static curGold:number = 0; //离线等级 public static offLineLevel:number = 0; //可以升级 //火力加层的概率 public static firePowerAddRate:number = 1; //上次退出游戏时间 public static lastQuitTime:number = 0; //当前使用的大炮id public static curUseCannonId:number //震动 开启震动 public static brate:number = 1 //每颗子弹增加的值默认是 1 100% = 2 public static addFirePower:number = 1 //这个是多出来的 public static addFirePowerCount = 0; //当前保存数据的时间 public static curWeek:number = -99; //玩家微信头像 public static avatarUrl:string = ""; //玩家的名字 public static nickName:string = ""; //玩家的openId public static openid:string = ""; public static totalScore:number = 0; public static showAddHomeTag:number = 0 public static curSceneId:number = 0; public static loadAllData(){ //上次登录的时间 let curWeek = cc.sys.localStorage.getItem(Define.datakeyDate) //保存数据的周 if(curWeek != null && curWeek != ""){ this.curWeek = Number(curWeek) }else{ this.curWeek = -99 } console.log("curWeek = " +curWeek) //清空排行版分数 let testDate = new Date(); let week = Common.getYearWeek(testDate.getFullYear(),testDate.getMonth()+1,testDate.getDate()); if(week != this.curWeek && this.curWeek != -99){ //说明需要清空排行榜了 this.maxScore = 0; //清空本地分数和服务器的分数 this.saveMaxScore() WXHelper.instance.submitScore(); } UserInfo.saveCannonById(1000,2) let gold = cc.sys.localStorage.getItem(Define.dataKeyGold); if(gold != null && gold != ""){ this.curGold = Number(gold); }else{ this.curGold = 0; } let level = cc.sys.localStorage.getItem(Define.dataKeyLevel) if(level != null && level != ""){ this.curLevel = Number(level) }else{ this.curLevel = 1; } let shootCount = cc.sys.localStorage.getItem(Define.dataKeyShootCount); if(shootCount != null && shootCount != ""){ this.bulletShootMaxCount = Number(shootCount); }else{ this.bulletShootMaxCount = 3; } let score = cc.sys.localStorage.getItem(Define.dataKeyMaxScore); if(score != null && score != ""){ this.maxScore = Number(score); }else{ this.maxScore = 0; } let firePower = cc.sys.localStorage.getItem(Define.dataKeyFirePower); if(firePower != null && firePower != ""){ this.firePower = Number(firePower); }else{ this.firePower = 0; } //添加的默认威力 this.addFirePower = Math.floor((this.firePower*0.1 + 1)); this.addFirePowerCount = Math.floor(((this.firePower - 1)*0.1 + 1) - this.addFirePower)*this.bulletShootMaxCount let dropGoldLevel = cc.sys.localStorage.getItem(Define.dataKeyGoldDropLevel) if(dropGoldLevel != null && dropGoldLevel != ""){ this.goldDropLevel = Number(dropGoldLevel) }else{ this.goldDropLevel = 1 } let offLineLevel = cc.sys.localStorage.getItem(Define.dataKeyOffLine) if(offLineLevel != null && offLineLevel != ""){ this.offLineLevel = Number(offLineLevel) }else{ this.offLineLevel = 0 } //上次登录的时间 let lastQuitTime = cc.sys.localStorage.getItem(Define.dataKeyLastQuitTime) if(lastQuitTime != null && lastQuitTime != ""){ this.lastQuitTime = Number(lastQuitTime) }else{ this.lastQuitTime = 0 } //上次登录的时间 let totalScore = cc.sys.localStorage.getItem(Define.dataKeyTotalScore) if(totalScore != null && totalScore != ""){ this.totalScore = Number(totalScore) }else{ this.totalScore = 0 } //记录上去使用大炮的id UserInfo.curUseCannonId = cc.sys.localStorage.getItem(Define.dataKeyCurUseCannonId) if(totalScore != null && totalScore != ""){ UserInfo.curUseCannonId = Number(UserInfo.curUseCannonId) }else{ UserInfo.curUseCannonId = 0 } UserInfo.brate = cc.sys.localStorage.getItem(Define.dataKeyBrate) if(totalScore != null && totalScore != ""){ UserInfo.brate = Number(UserInfo.brate) }else{ UserInfo.brate = 1 this.saveBrateSate() } let showAddHomeTag = cc.sys.localStorage.getItem(Define.datakeyShowAddHomeTag) if(showAddHomeTag != null && showAddHomeTag != ""){ UserInfo.showAddHomeTag = Number(showAddHomeTag) }else{ UserInfo.showAddHomeTag = 0 } //当前场景 let curScene = cc.sys.localStorage.getItem(Define.datakeyScene) if(curScene != null && curScene != ""){ UserInfo.curSceneId = Number(curScene) }else{ UserInfo.curSceneId = 1000 } console.log("UserInfo.totalScore = " +UserInfo.totalScore) //老玩家如果已经超过这个这个等级自动获取 UserInfo.handlerRewardCannons(Define.cannonDropGoldLevel); //老玩家如果已经超过这个分数 UserInfo.handlerRewardCannons(Define.cannonTotalScore); } public static saveBrateSate(){ cc.sys.localStorage.setItem(Define.dataKeyBrate,this.brate); } //保存金币 public static saveGoldData(addCount:number = 0){ this.curGold = this.curGold + addCount cc.sys.localStorage.setItem(Define.dataKeyGold,this.curGold); } //保存子弹发射的数量 public static saveBulletShootMaxCount(addCount:number = 0){ this.bulletShootMaxCount = this.bulletShootMaxCount + addCount; cc.sys.localStorage.setItem(Define.dataKeyShootCount,UserInfo.bulletShootMaxCount); } //设置到下一个关卡 public static saveNextLevel(){ this.curLevel = this.curLevel + 1; cc.sys.localStorage.setItem(Define.dataKeyLevel,this.curLevel); } //保存火力 public static saveFirePower(){ this.firePower = this.firePower + 1; cc.sys.localStorage.setItem(Define.dataKeyFirePower,this.firePower); //添加的默认威力 let tempPower = (this.firePower)*0.1 + 1 this.addFirePower = Math.floor(tempPower); this.addFirePowerCount = (tempPower - this.addFirePower)*this.bulletShootMaxCount; } //保存掉落金币 public static saveDropGoldLevel(){ this.goldDropLevel = this.goldDropLevel + 1; cc.sys.localStorage.setItem(Define.dataKeyGoldDropLevel,this.goldDropLevel); UserInfo.handlerRewardCannons(Define.cannonDropGoldLevel); } //保存离线收入 public static saveOffLineLevel(){ this.offLineLevel = this.offLineLevel + 1; cc.sys.localStorage.setItem(Define.dataKeyOffLine,this.offLineLevel); UserInfo.handlerRewardCannons(Define.cannonOffLine); } //保存分数 public static saveMaxScore(){ let testDate = new Date(); let week = Common.getYearWeek(testDate.getFullYear(),testDate.getMonth()+1,testDate.getDate()); cc.sys.localStorage.setItem(Define.dataKeyMaxScore,this.maxScore); cc.sys.localStorage.setItem(Define.datakeyDate,week.toString()); //保存数据的时间 } //统计玩家最大分数 public static saveTotalScore(){ cc.sys.localStorage.setItem(Define.dataKeyTotalScore,this.totalScore); UserInfo.handlerRewardCannons(Define.cannonTotalScore); } //保存上次退出的时间 public static saveLastQuitTime(){ var testDate = new Date(); cc.sys.localStorage.setItem(Define.dataKeyLastQuitTime,testDate.getTime()); } //保存上次退出的时间 public static saveShowAddHome(){ cc.sys.localStorage.setItem(Define.datakeyShowAddHomeTag,1); } public static god(time){ Common.isGod = true; //有2秒钟无敌时间 TimeTaskManager.addTimeTask(time,function(){ Common.isGod = false; }.bind(this),"reviveGame",1); } //当前使用的大炮id public static setCurUseCannonId(id:number){ UserInfo.curUseCannonId = id cc.sys.localStorage.setItem(Define.dataKeyCurUseCannonId,UserInfo.curUseCannonId); } //当前使用的场景id public static setCurUseSceneId(id:number){ UserInfo.curSceneId = id cc.sys.localStorage.setItem(Define.datakeyScene,UserInfo.curSceneId); } //获得当前场景的id public static getCurSceneIndex():number{ let tempIndex:number = 0; for (let index = 0; index < LDataSceneManager.dataList.length; index++) { if(LDataSceneManager.GetDataById(index).saveID == UserInfo.curSceneId){ tempIndex = index } } return tempIndex } ////////////////////////////////奖励大炮相关////////////////////////////////////// //奖励大炮 public static handlerRewardCannons(getMode:number){ for (let index = 0; index < LDataCannonManager.dataList.length; index++) { let data = LDataCannonManager.dataList[index]; if(data.getmode == getMode){ //等于当前的获得方式 if(!UserInfo.isOwnCannonById(data.cannonId)){ //没有奖励过 if(data.getmode == Define.cannonTotalScore){ //分数获取方式 if(UserInfo.totalScore >= data.scoreget){ UserInfo.addNewCannon(data.cannonId,1) //获得一个大炮 } } else if(data.getmode == Define.cannonDropGoldLevel){ //金币升级的方式 console.log("UserInfo.goldDropLevel = " + UserInfo.goldDropLevel + " data.goldlevel = " + data.goldlevel); if(UserInfo.goldDropLevel >= data.goldlevel){ UserInfo.addNewCannon(data.cannonId,1) //获得一个大炮 } }else if(data.getmode == Define.cannonOffLine){ //离线等级获得大炮 console.log("UserInfo.offLineLevel = " + UserInfo.offLineLevel + " data.offline = " + data.offline); if(UserInfo.offLineLevel >= data.offline){ UserInfo.addNewCannon(data.cannonId,1) //获得一个大炮 } } } } } //处理奖励场景 for (let index = 0; index < LDataSceneManager.dataList.length; index++) { let data = LDataSceneManager.dataList[index]; if(data.getmode == getMode){ //等于当前的获得方式 if(!UserInfo.isOwnCannonById(data.saveID)){ //没有奖励过 if(data.getmode == Define.cannonTotalScore){ //分数获取方式 if(UserInfo.totalScore >= data.scoreget){ console.log("添加新的场景") UserInfo.addNewCannon(data.saveID,1) //获得一个大炮 } } else if(data.getmode == Define.cannonDropGoldLevel){ //金币升级的方式 console.log("UserInfo.goldDropLevel = " + UserInfo.goldDropLevel + " data.goldlevel = " + data.goldlevel); if(UserInfo.goldDropLevel >= data.goldlevel){ UserInfo.addNewCannon(data.saveID,1) //获得一个大炮 } } } } } } //保存一个大炮 public static saveCannonById(id:number,state:number = 1){ //刚刚添加没有查看 2 添加之后已经查看 let key = Define.dataKeyLastQuitTime + id.toString(); cc.sys.localStorage.setItem(key,state); } //是否已经拥有这辆大炮 public static isOwnCannonById(id:number){ if(id == 0){ //默认给第一个大炮 return true; } let cannon = cc.sys.localStorage.getItem(Define.dataKeyLastQuitTime + id.toString()); if(cannon != null && cannon != ""){ return true } return false } //获取大炮的状态 public static getCannnonState(id:number){ //没有获取 1 新获取 2 获取之后并且查看 let state = cc.sys.localStorage.getItem(Define.dataKeyLastQuitTime + id.toString()); if(state != null && state != ""){ state = Number(state) }else{ state = 0 } return state } //是否有获得的新大炮 public static isHaveNewCannon(){ for (let index = 0; index < LDataCannonManager.dataList.length; index++) { let state:number = UserInfo.getCannnonState(LDataCannonManager.dataList[index].cannonId) if(state == 1){ return true } } return false } //是否有新的场景 public static isHaveNewScene(){ for (let index = 0; index < LDataSceneManager.dataList.length; index++) { let state:number = UserInfo.getCannnonState(LDataSceneManager.dataList[index].saveID) if(state == 1){ return true } } return false } //添加一个新的大炮 public static addNewCannon(id:number,state:number = 1){ UserInfo.saveCannonById(id,state); } //清空所有数据 public static clearAllDatas(){ cc.sys.localStorage.clear(); } }