const GameModule = require("../utils/GameModule");
const DWTool = require("../utils/DWTool");
const Api = require('../net/Api');
const GameNotificationKey = require('../utils/GameEnum').GameNotificationKey;
const TapTapTool = require("../utils/TapTapTool");
// var cityList = require('../data/city');
// const BuildingModel = require('./utils/BuildingModel');
// const AlertManager = require('./utils/AlertManager');
// const ReportType = require("./utils/GameEnum").ReportType;
cc.Class({
extends: cc.Component,
properties: {
_reportFailDuration: 0,
grossIncomeLabel: cc.Label,
grossCoin: sp.Skeleton,
grossIncomeRichText: cc.RichText,
rateRichText: cc.RichText,
clickCoinRichText: cc.RichText,
rateCoinRichText: cc.RichText,
headSprite: cc.Sprite,
starsLabel: cc.Label,
starsProgress: cc.ProgressBar,
diamondLabel: cc.Label,
recordModify: [],
recordUnlockModify: [],
buildingData: [],
_stars: 0,
stars: {
get: function () {
return this._stars;
},
set: function (value) {
console.log('星星增加数 ' + value);
this._stars = value;
}
},
_gold: 0,
gold: {
get: function () {
return this._gold;
},
set: function (value) {
cc.sys.localStorage.setItem(`localGold_${GameGlobal.user.uid}`, JSON.stringify(this._gold));
this._gold = value;
this.grossIncomeRichText.string = `${TapTapTool.parseToString(this._gold)}`;
}
},
//建筑每秒自动生成的金币数
_rateGold: 0,
rateGold: {
get: function () {
return this._rateGold;
},
set: function (value) {
this._rateGold = value;
if (this._rateGold.n > 0) {
this.rateRichText.node.active = true;
let rate = TapTapTool.multiple(GameModule.skill.multiple, this.perpetualMt);
rate = TapTapTool.multiple(rate, GameModule.shop.multiple);
let newValue = TapTapTool.multiple(rate, this._rateGold);
this.rateRichText.string = `+${TapTapTool.parseToString(newValue)}`;
this.rateCoinRichText.string = `${TapTapTool.parseToString(newValue)}`;
} else {
this.rateRichText.node.active = false;
this.rateCoinRichText.string = "0";
}
}
},
//自动每次点击需要的秒数
_secondClick: 0,
secondClick: {
get: function () {
return this._secondClick;
},
set: function (value) {
this._secondClick = value < 0 ? 0 : parseFloat(value);
this.unschedule(this.autoClickGetGold, this);
if (this._secondClick > 0) {
this.schedule(this.autoClickGetGold, this._secondClick);
}
}
},
_diamond: 0,
diamond: {
get: function () {
return this._diamond;
},
set: function (value) {
this._diamond = value;
this.diamondLabel.string = this._diamond;
}
},
_clickCount: 0,
clickCount: {
get: function () {
return this._clickCount;
},
set: function (value) {
this._clickCount = value;
}
},
_buyStarCount: 0,
buyStarCount: {
get: function () {
return this._buyStarCount;
},
set: function (value) {
this._buyStarCount = value;
}
},
_buildingLevel: 1,
buildingLevel: {
get: function () {
return this._buildingLevel;
},
set: function (value) {
this._buildingLevel = value;
if (CC_WECHATGAME) {
// 把用户的总部等级上报给微信
DWTool.submitWechatScore(this._buildingLevel);
} else if (CC_QQPLAY) {
// 把用户的总部等级上报给QQ玩一玩
DWTool.submitQQScore(this._buildingLevel);
}
}
},
levelHomeItemFullCount: 0
},
onLoad() {
GameModule.userInfo = this;
this._rate = 0;
this._isPlayAnimation = false;
this.seq = 1;
this._rateGold = {'n': 0, 'e': 0};
this._gold = {'n': 0, 'e': 0};
this.coinTap = {'n': 0, 'e': 0};
this.buildingLevel = GameGlobal.userData.buildingLevel;
// let objc = TapTapTool.goldStrToClass('3.265;29');
// let str = TapTapTool.parseToString(objc);
// let sub = TapTapTool.compare({'n': 323, 'e': 25}, objc);
// let n = {'n': 423, 'e': 0};
// let m = {'n': 1.1, 'e': 0};
// console.log(TapTapTool.multiple(n, m));
// console.log(sub);
// console.log(str);
// 初始化用户信息
this.initUserInfo();
// 轮询上报游戏数据
this.reportFunc = () => {
if (this._reportFailDuration > 0) {
this._reportFailDuration -= 3;
return;
}
this.doReport();
};
this.schedule(this.reportFunc, 3.0);
//建筑每秒自动赚的钱
this.addMoneyFunc = () => {
this.buildingAddMoney();
};
this.schedule(this.addMoneyFunc, 1.0);
this.reportFirst();
},
/**
* 每秒增加金币
*/
buildingAddMoney() {
if (this.rateGold.n > 0) {
// this.gold = TapTapTool.add(this.rateGold, this.gold);
let add = TapTapTool.multiple(this.rateGold, GameModule.skill.multiple);
add = TapTapTool.multiple(add, GameModule.shop.multiple);
this.gold = TapTapTool.add(this.gold, TapTapTool.multiple(add, this.perpetualMt));
// this.gold += (this.rateGold * GameModule.skill.multiple * this.perpetualMt);
this.secondRateTextAnimation();
}
},
secondRateTextAnimation() {
let fadeIn = cc.fadeIn(0.2);
let delay = cc.delayTime(0.3);
let fadeOut = cc.fadeOut(0.3);
let action = cc.sequence(fadeIn, delay, fadeOut);
this.rateRichText.node.runAction(action);
},
refreshSecondText() {
if (this._rateGold.n > 0) {
this.rateRichText.node.active = true;
let rate = TapTapTool.multiple(GameModule.skill.multiple, this.perpetualMt);
rate = TapTapTool.multiple(rate, GameModule.shop.multiple);
let newValue = TapTapTool.multiple(rate, this._rateGold);
this.rateRichText.string = `+${TapTapTool.parseToString(newValue)}`;
this.rateCoinRichText.string = `${TapTapTool.parseToString(newValue)}`;
} else {
this.rateRichText.node.active = false;
}
if (GameModule.userInfo.coinTap.n > 0) {
this.clickCoinRichText.string = `${TapTapTool.parseToString(GameModule.userInfo.coinTap)}`;
} else {
this.clickCoinRichText.string = "0";
}
},
/**
* 每秒自动点击次数
*/
autoClickGetGold() {
GameEvent.fire(GameNotificationKey.AutoClickGold);
},
/**
* 上报用户数据
*/
doReport() {
// return;
let goldStr = this._gold.n + ";" + this._gold.e;
DWTool.reportInfo(this.seq, goldStr, this.stars, this.clickCount, this.recordModify, this.recordUnlockModify, () => {
this._reportFailDuration = 0;
this.recordModify = [];
this.recordUnlockModify = [];
this.seq += 1;
}, (err) => {
if (err.code === -4) {
this._reportFailDuration = 60;
}
console.log('上报失败 ' + err.msg);
})
},
reportFirst() {
//如果为true则以网络数据为主不用覆盖
if (GameGlobal.localData) {
return;
}
this.compareRoomsLocalData();
let goldStr = this._gold.n + ";" + this._gold.e;
DWTool.reportRoomsInfo(goldStr, this.buildingData);
},
/**
* 初始化用户数据
*/
initUserInfo() {
let userInfo = this.userInfo = GameGlobal.userData;
if (userInfo != undefined) {
let goldObj = this.compareGoldLocalData();
this.updateUserRes({
gold: goldObj,
stars: userInfo.ogStars,
diamond: userInfo.diamond,
ticket: userInfo.ticket,
clickCount: userInfo.clickCount
});
this.perpetualMt = userInfo.mtObj;
this.perpetualClickMt = userInfo.clickMtObj;
this.buyStarCount = userInfo.buyStarCount;
}
},
compareGoldLocalData() {
let localGold = cc.sys.localStorage.getItem(`localGold_${GameGlobal.user.uid}`);
if (this.userInfo != undefined && localGold!= undefined && localGold && !GameGlobal.localData) {
let goldObj = JSON.parse(localGold);
if (goldObj != undefined) {
return goldObj;
} else {
return this.userInfo.goldObj;
}
} else {
return this.userInfo.goldObj;
}
},
compareRoomsLocalData() {
let localData = cc.sys.localStorage.getItem(`localRooms_${GameGlobal.user.uid}`);
this.buildingData = GameGlobal.BuildingManager.networkRooms;
if (this.userInfo != undefined && localData!= undefined && localData && !GameGlobal.localData) {
let userRooms = JSON.parse(localData);
if (GameGlobal.BuildingManager.networkRooms && GameGlobal.BuildingManager.networkRooms.length > 0 && userRooms.length > 0) {
userRooms.forEach(room => {
this.buildingData.forEach(n => {
if (room.roomId == n.roomId) {
n.roomLevel = Math.max(room.level, n.roomLevel);
}
});
});
}
}
},
/**
* 更新用户资源数据
* @param {object} data 更新资源对象
* @param {number} data.grossIncome 增加的金币
* @param {number} data.stars 星星
* @param {number} data.diamond 钻石
* @param {number} data.ticket 艺人券
*/
updateUserRes(data) {
// console.log("Update userData: ", JSON.stringify(data));
if (data.gold) {
this.gold = TapTapTool.add(data.gold, this.gold);
}
if (data.stars) {
this.stars += parseInt(data.stars);
}
if (data.diamond) {
this.diamond += parseInt(data.diamond);
}
if (data.ticket) {
this.ticket += parseInt(data.ticket);
}
if (data.clickCount) {
this.clickCount += parseInt(data.clickCount);
}
},
updateRecordModify(buildingInfo) {
for (let i = 0; i < this.recordModify.length; i++) {
let temp = this.recordModify[i];
if (buildingInfo.roomId == temp.roomId) {
this.recordModify.splice(i, 1, buildingInfo);
return;
}
}
this.recordModify.push(buildingInfo);
}
});