const DWTool = require("../utils/DWTool"); const GameModule = require("../utils/GameModule"); const TapTapTool = require("../utils/TapTapTool"); const AlertManager = require('../utils/AlertManager'); const WeChat = require('../net/WeChat'); const StoreApi = require('../net/StoreApi'); const {GameNotificationKey, WechatShareType, GameRedDot } = require('../utils/GameEnum'); var Promise = require('../lib/es6-promise').Promise; cc.Class({ extends: cc.Component, properties: { diamondNode: cc.Node, diamondSprite: cc.Sprite, diamondDoubleSprite: cc.Sprite, coinNode: cc.Node, coinLabel: cc.Label, coinSprite: cc.Sprite, adNode: cc.Node, adSprite: cc.Sprite, adLabel: cc.Label, buyBtn: cc.Button, buyRichText: cc.RichText, buySprite: cc.Sprite, }, // LIFE-CYCLE CALLBACKS: // onLoad () {}, start () { }, // buyType 商品购买类型(1人民币购买,2砖石购买,3看广告获得) 是 [int] 查看 // cdTime 剩余的CD时间,单位毫秒(为0就是没有CD 可以继续购买) 是 [long] 查看 // desc 商品描述 是 [string] 查看 // isBuy 是否还可以继续购买(1为已经购买过,不能在购买了),某些商品只能购买一次 是 [int] 查看 // minuteTime 购买的商品有效时间,单位分钟(为0就是永久性商品) 是 [long] 查看 // name 商品名字 是 [string] 查看 // picId 图片ID 是 [int] 查看 // price 商品的价格(人民币或者砖石) 是 [int] 查看 // shopId 商品ID 是 [string] 查看 // type 商品类型(1推荐,2砖石,3金币,4礼包) /// tabIndex为种类 init(data, tabIndex, index) { this._tabIndex = tabIndex; this._index = index; this._shopData = data; this.adNode.active = index == 0; this.coinNode.active = tabIndex == 3 && index !== 0; this.diamondNode.active = tabIndex == 2 && index !==0; /// 说明是广告的样式 if (index == 0) { /// 是砖石 if (tabIndex == 2) { /// 是金币 } else { let path = './textures/quest/altas/quest_coin'; DWTool.loadResSpriteFrame(path).then((spriteFrame) => { this.adSprite.spriteFrame = spriteFrame; }); let add = TapTapTool.multiple(GameModule.userInfo.rateGold, GameModule.skill.multiple); let gold = TapTapTool.multiple(TapTapTool.multiple(add, GameModule.userInfo.perpetualMt), {'e': 0, 'n': 36}); this._getGold = gold; this.adLabel.string = '分享到群\n' + '获得金币' + TapTapTool.parseToString(gold); } } else { /// 如果是砖石 if (tabIndex == 2) { let path = './textures/store/800' + tabIndex + index + '0'; DWTool.loadResSpriteFrame(path).then((spriteFrame) => { this.diamondSprite.spriteFrame= spriteFrame; }); if (this._shopData.isBuyDiamond == 1) { this.diamondDoubleSprite.node.active = false; } else { this.diamondDoubleSprite.node.active = index > 1; } } else { let index = this._shopData.shopId - 11; let path = './textures/store/800' + tabIndex + index + '0'; DWTool.loadResSpriteFrame(path).then((spriteFrame) => { this.coinSprite.spriteFrame= spriteFrame; }); } } this.updateTime(); }, updateTime() { /// 设置购买样式和文字 /// 说明没有时间限制 let data = this._shopData; let index = this._index; let tabIndex = this._tabIndex; if (data.minuteTime == 0 || data.cdTime == 0) { if (index != 0) { if (data.buyType == 1) { this.buyRichText.string = `¥ ${data.price}`; } else { this.buyRichText.string = `${data.price}`; } } if (tabIndex == 3 && index == 1) { this.setupBuyBtn(GameModule.userInfo.diamond >= data.price); } else { this.buyBtn.interactable = true; } } else { this.setupTime(); } }, setupTime() { this._cdTime = this._shopData.cdTime / 1000; let timeStr = DWTool.calculateTime(this._cdTime); this.buyRichText.string = timeStr; this.setupBuyBtn(false); this.schedule(this.timeAction, 1); }, setupBuyBtn(isActive) { let path = isActive ? './textures/store/store_blue_btn' : './textures/store/store_btn_gray'; DWTool.loadResSpriteFrame(path) .then((spriteFrame) => { this.buySprite.spriteFrame = spriteFrame; }); this.buyBtn.interactable = isActive; }, timeAction() { this._cdTime -= 1; this.buyRichText.string = DWTool.calculateTime(this._cdTime); if (this._cdTime == 0) { if (this._shopData.buyType == 1) { this.buyRichText.string = `${this._shopData.price}`; } else { this.buyRichText.string = `¥ ${this._shopData.price}`; } this.setupBuyBtn(true); this.unschedule(this.timeAction, this); } }, buyAction() { GameModule.audioMng.playClickButton(); /// 是钻石 并且没有买过 显示后面的礼包特惠 if (this._tabIndex === 2 && this._index > 1 && this._shopData.isBuyDiamond == 0) { //传入选择的index为购买优惠的顺序 let selectIndex = this._index - 2; AlertManager.showStoreDiamondAlert(selectIndex); /// 分享广告购买 } else if (this._index == 0) { this.buyBtn.interactable = false; GameEvent.on(GameNotificationKey.ShowShareAction, this, (type) => { this.shareActionCallback(type); }); WeChat.shareAction(WechatShareType.StoreGetGift, () => { }, () => { console.log('分享取消或失败'); this.buyBtn.interactable = true; }); } else if (this._tabIndex == 3 && this._index == 1) { this.buyBtn.interactable = false; this.buyShop().then(() => { this.buyBtn.interactable = true; GameModule.userInfo.diamond -= this._shopData.price; GameEvent.fire('store_buy_coin_updateDiamond'); let isActive = GameModule.userInfo.diamond >= this._shopData.price; if (isActive == false) { this.setupBuyBtn(false); } let iconPath = './textures/store/' + this._shopData.picId; AlertManager.showCommonAlert(iconPath, this._shopData.desc, this._shopData.name); }).catch( (err, code) => { console.log(err, code); this.buyBtn.interactable = false; }) } else { WeChat.jumpCustomerServices(); } }, shareActionCallback(type) { if (type != WechatShareType.StoreGetGift) { return; } let self = this; this.buyShop().then( () => { self._shopData.cdTime = self._shopData.minuteTime * 60 * 1000; self.setupTime(); /// 如果是钻石 let iconPath = ''; let name = ''; let desc = ''; if (this._tabIndex == 2) { GameModule.userInfo.diamond += 10; iconPath = './textures/quest/altas/quest_diamond'; name = '获得钻石'; desc = '分享获得钻石10个'; TapTapTool.removeRedDot(GameRedDot.storeDiamond); } else { GameModule.userInfo.gold = TapTapTool.add(GameModule.userInfo.gold, this._getGold); iconPath = './textures/quest/altas/quest_coin'; name = '获得金币'; desc = '分享获得金币' + TapTapTool.parseToString(this._getGold); TapTapTool.removeRedDot(GameRedDot.storeCoin); } AlertManager.showCommonAlert(iconPath, desc, name); }).catch( (code, msg) => { this.buyBtn.interactable = true; console.log(err, code); }) GameEvent.off(GameNotificationKey.ShowShareAction, this); }, onDestroy() { GameEvent.off(GameNotificationKey.ShowShareAction, this); }, buyShop() { return new Promise((resolve, reject) => { StoreApi.buyShop(this._shopData.shopId, (respondData) => { resolve(respondData); }, (code, msg) => { reject({code, msg}); }); }); }, // update (dt) {}, });