"use strict"; cc._RF.push(module, '4e43dsUwvhKCoV05B5gByqb', 'cmp.partner.reform.swap'); // Scripts/mod/partner/cmps/reform/cmp/cmp.partner.reform.swap.js "use strict"; /****************************************************************** * * 伙伴改造页: 置换 * ******************************************************************/ var FxTogs = require("nx.fx.togs"); var FxSVC = require("nx.fx.sv.expand"); var FxButton = require("nx.fx.button"); var BridgeComponent = require("bridge.component"); var BackpackController = require("backpack_controller"); var BackpackEvent = require("backpack_event"); var BackPackConst = require("backpack_const"); var HeroConst = require("hero_const"); var HeroEvent = require("hero_event"); var HeroControl = require("hero_controller"); var TipsController = require("tips_controller"); var HCT = HeroConst.CampType; var BBC = BackPackConst.Bag_Code; cc.Class({ "extends": BridgeComponent, properties: { togCamp: { "default": null, type: FxTogs }, svcList: { "default": null, type: FxSVC }, nodFrom: { "default": null, type: cc.Node }, nodTo: { "default": null, type: cc.Node }, nodNeed: { "default": null, type: cc.Node }, nodOp: { "default": null, type: cc.Node }, nodCost: { "default": null, type: cc.Node }, btnConvert: { "default": null, type: FxButton } }, // 载入 onLoad: function onLoad() { this._super(); this.curCamp = -1; this.selects = []; // 事件监听 this.bindGEvent(HeroEvent.Del_Hero_Event, this.onPartnerChanged.bind(this)); this.bindGEvent(HeroEvent.Hero_Data_Add, this.onPartnerChanged.bind(this)); this.bindGEvent(HeroEvent.Hero_Reset_Star_Event, this.onConverPreview.bind(this)); this.bindGEvent(BackpackEvent.ADD_GOODS, this.onBagChanged.bind(this)); this.bindGEvent(BackpackEvent.DELETE_GOODS, this.onBagChanged.bind(this)); this.bindGEvent(BackpackEvent.MODIFY_GOODS_NUM, this.onBagChanged.bind(this)); // Tog监听 this.togCamp.posTog = this.onTogCamp.bind(this); this.togCamp.togTo(0); this.onTogCamp(HCT.eNone); // 置空 this.setEmpty(); }, // // 重载:关闭前 onPreClosed: function onPreClosed() { this.svcList.rebuild([]); }, // 置空 setEmpty: function setEmpty() { this.partner = null; nx.gui.setActive(this.nodFrom, "smod", false); var spine = nx.gui.getComponent(this.nodFrom, "smod", "nx.fx.spine"); var spine2 = nx.gui.getComponent(this.nodTo, "smod", "nx.fx.spine"); if (spine) { spine.stop(); } if (spine2) { spine2.stop(); } nx.gui.setActive(this.nodTo, "smod", false); nx.gui.setActive(this.nodCost, "", false); nx.gui.setActive(this.nodNeed, "conds", false); this.selects = []; nx.gui.setActive(this.nodNeed, "empty", true); nx.gui.setActive(this.nodNeed, "icon", false); nx.gui.setString(this.nodNeed, "conds/txt", ""); this.btnConvert.lock(true); }, // 设置当前伙伴 setPartner: function setPartner(_partner) { // 先清空 this.setEmpty(); // 判空 this.partner = _partner; if (nx.dt.objEmpty(this.partner)) { this.freshCostHave(); return; } // 动画 var key = this.partner.bid + "_" + this.partner.star; var cfg = gdata("partner_data", "data_partner_star", key); var spine = nx.gui.getComponent(this.nodFrom, "smod", "nx.fx.spine"); if (cfg && spine) { var path = PathTool.getSpinePath(cfg.res_id, cfg.res_id, false); spine.load(path, function (_e) { if (!_e) { spine.action("stand2", true); } else { spine.stop(); } }); } nx.gui.setActive(this.nodFrom, "smod", true); // 价格刷新 this.freshCostHave(); }, // 整体刷新 freshList: function freshList(_reset) { if (_reset === void 0) { _reset = false; } var HC = HeroControl.getInstance(); var mod = HC.getModel(); // 统计可置换信息 var configs = game.configs.holiday_convert_data.data_convert_info; var cgroup = game.configs.holiday_convert_data.data_hero_list; if (nx.dt.objEmpty(configs) || nx.dt.objEmpty(cgroup)) { nx.error("置换配置不存在!"); this.partners = []; } else { // 可置换伙伴统计 if (_reset || nx.dt.arrEmpty(this.all) || nx.dt.objEmpty(this.dict)) { this.all = []; this.dict = {}; for (var star in configs) { this.dict[star] = this.dict[star] || {}; var list = configs[star]; for (var k in list) { var v = list[k]; this.dict[star][k] = v; var config_list = cgroup[v.src_group]; for (var i in config_list) { var bid = config_list[i]; var h_list = mod.getHeroInfoByBidStar(bid.bid, star); if (h_list) { for (var j in h_list) { if (h_list[j].is_lock == 0) { this.all.push(h_list[j]); } } } } } } } // 当前阵营统计 if (this.curCamp == HCT.eNone) { this.partners = this.all; } else { this.partners = []; for (var _i in this.all) { var pt = this.all[_i]; if (pt && pt.camp_type == this.curCamp) { this.partners.push(pt); } } } } nx.gui.setActive(this.svcList, "empty", nx.dt.arrEmpty(this.partners)); this.svcList.rebuild(this.partners); this.setPartner(null); }, // 刷新材料选择 freshSelects: function freshSelects(_selects) { var cfgs = this.dict[this.partner.star][this.partner.camp_type]; var total = cfgs ? cfgs.expend : 0; this.selects = _selects; // 空 if (nx.dt.arrEmpty(this.selects)) { nx.gui.setActive(this.nodNeed, "empty", true); nx.gui.setActive(this.nodNeed, "icon", false); nx.gui.setString(this.nodNeed, "conds/txt", "0/" + total); nx.gui.setActive(this.nodNeed, "conds", false); return; } nx.gui.setActive(this.nodNeed, "empty", false); nx.gui.setActive(this.nodNeed, "icon", true); nx.gui.setString(this.nodNeed, "conds/txt", this.selects.length + "/" + total); nx.gui.setActive(this.nodNeed, "conds", true); var pt = this.selects[0]; var icon = nx.gui.getComponent(this.nodNeed, "icon", "cmp.item.base"); if (pt && icon) { icon.setData(pt); } // 置换开关 this.btnConvert.lock(this.selects.length < total); // 动画 var key = pt.bid + "_" + pt.star; var cfg = gdata("partner_data", "data_partner_star", key); var spine = nx.gui.getComponent(this.nodTo, "smod", "nx.fx.spine"); if (cfg && spine) { var path = PathTool.getSpinePath(cfg.res_id, cfg.res_id, false); spine.load(path, function (_e) { if (!_e) { spine.action("stand2", true); } else { spine.stop(); } }); } nx.gui.setActive(this.nodTo, "smod", true); }, // 消耗资产刷新 freshCostHave: function freshCostHave() { // 配置获取 var bid = game.configs.holiday_convert_data.data_const.item_id.val; if (!nx.dt.numPositive(bid, false)) { nx.error("缺少置换货币配置!"); nx.gui.setActive(this.nodCost, "", false); return; } // 图标 var cfg = Utils.getItemConfig(bid); if (cfg) { // nx.bridge.setIcon( this.nodTotal, "icon", cfg.icon ); } // 总量 // nx.gui.setActive( this.nodTotal, "", true ); var have = BackpackController.getInstance().getModel().getItemNumByBid(bid); // nx.gui.setString( this.nodTotal, "txt", have ); // 消耗 var cfgs = null; if (nx.dt.objNEmpty(this.partner)) { cfgs = this.dict[this.partner.star][this.partner.camp_type]; } if (nx.dt.objEmpty(cfgs)) { nx.gui.setSpriteFrame(this.nodCost, "icon", null); nx.gui.setActive(this.nodCost, "", true); nx.gui.setString(this.nodCost, "txt", ""); } else { var ifo = Utils.getItemConfig(cfgs.loss[0][0]); if (ifo) { nx.bridge.setIcon(this.nodCost, "icon", cfg.icon); } nx.gui.setActive(this.nodCost, "", true); nx.gui.setString(this.nodCost, "txt", cfgs.loss[0][1]); var enough = have >= cfgs.loss[0][1]; nx.gui.setColor(this.nodCost, "txt", enough ? cc.Color.GREEN : cc.Color.RED); var btn = nx.gui.getComponent(this.nodOp, "", "nx.fx.button"); if (btn) { btn.lock(!enough); } } this.cost_id = bid; }, // 伙伴增删 onPartnerChanged: function onPartnerChanged() { // console.log( "刷新伙伴信息" ); this.setEmpty(); this.freshList(true); }, // 道具改变 onBagChanged: function onBagChanged(_code, _list) { if (_code != BBC.BACKPACK || nx.dt.objEmpty(_list)) { return; } var good = false; for (var i in _list) { if (_list[i].base_id == this.cost_id) { good = true; break; } } if (good) { this.freshCostHave(); } }, // 置换返还预览 onConverPreview: function onConverPreview(_data) { // this.onPartnerChanged(); // 参数无效 if (nx.dt.objEmpty(_data) || nx.dt.objEmpty(this.partner)) { return; } var HC = HeroControl.getInstance(); var self = this; var convert = function convert() { if (!self.partner || !self.reqParams) { nx.error("转换失败,参数过期!"); return; } HC.sender16686(self.partner.partner_id, self.reqParams.bid, self.reqParams.partners); self.reqParams = null; self.setPartner(null); self.svcList.cleanFocus(); }; // 空返还 if (nx.dt.arrEmpty(_data.list)) { if (nx.dt.objEmpty(this.reqParams)) { return; } // 二次确认 nx.mbox("CVAskConfirmNoPreview", ['no', 'yes'], function (_key, _box) { _box.close(); if (_key == 'yes') { convert(); } }); return; } // 预览 HC.openHeroConvertPreview(true, _data.list, function (_key) { convert(); }); }, // 阵营切换 onTogCamp: function onTogCamp(_index) { var idx = parseInt(_index) || 0; if (this.curCamp == idx) { return; } nx.debug("[Hero]\u9635\u8425\u5207\u6362:" + this.curCamp + " -> " + idx); this.curCamp = idx; // 整体刷新 this.freshList(); }, // 选中切换 onFocusChanged: function onFocusChanged(_item) { // 空 if (nx.dt.objEmpty(_item) || nx.dt.objEmpty(_item.mdata)) { return; } nx.audio.playSFX("audios/effects/touchitem"); // 聚焦 this.svcList.cleanFocus(); this.svcList.addFocus(_item.index); this.setPartner(_item.mdata); }, // 点击帮助 onTouchHelp: function onTouchHelp() { var TC = TipsController.getInstance(); if (TC) { var txt = game.configs.partner_data.data_partner_const.game_rule.desc; TC.showTextPanel("tip", nx.text.getKey(txt)); } }, // 点击选择 onTouchSelect: function onTouchSelect() { var _this = this; // 空伙伴 if (nx.dt.objEmpty(this.partner)) { nx.tbox("CVSelectPartnerFirst"); return; } // 配置统计 var cfgs = this.dict[this.partner.star][this.partner.camp_type]; if (nx.dt.objEmpty(cfgs)) { nx.error("置换失败,配置缺失!"); return; } var lst = game.configs.holiday_convert_data.data_target_hero_list[cfgs.target_group]; if (nx.dt.objEmpty(lst)) { nx.error("置换失败,配置缺失!", cfgs.target_group); return; } var pts = []; var HC = HeroControl.getInstance(); for (var i in lst) { var tm = lst[i]; if (!tm || tm.bid == this.partner.bid) { continue; } var arr = HC.getModel().getHeroInfoByBidStar(tm.bid, 5); if (nx.dt.arrEmpty(arr)) { continue; } for (var k in arr) { var pt = arr[k]; if (pt && !pt.isResonateHero()) { pts.push(pt); } } } var args = { partners: pts, count: cfgs.expend, selects: this.selects, flag: { type: nx.text.getKey("SameCamp"), star: 5 } }; var cbid = 0; if (nx.dt.arrNEmpty(this.selects)) { cbid = this.selects[0].bid; } // 选择器 args.fnSelector = function (_selector, _partner) { if (!_selector || !_partner) { return false; } // 首选 if (_selector.svcList.focusList.length == 0) { cbid = _partner.bid; return true; } // 同材料 return cbid == _partner.bid; }; HC.openPartnerSelector(true, args, function (_partners) { _this.freshSelects(_partners || []); HC.openPartnerSelector(false); }); }, // 点击置换 onTouchConvert: function onTouchConvert() { this.reqParams = { bid: 0, partners: [] }; // 记录信息 for (var i in this.selects) { var pt = this.selects[i]; if (pt) { this.reqParams.bid = this.reqParams.bid || pt.bid; this.reqParams.partners.push({ partner_id: pt.partner_id }); } } // 发送申请,获取材料卡的返还预览 if (nx.dt.arrNEmpty(this.reqParams.partners)) { var HC = HeroControl.getInstance(); HC.sender11087(this.reqParams.partners); } }, onTouchIcon: function onTouchIcon() { var cfgs = game.configs.holiday_convert_data.data_const.item_id.val; if (cfgs) { var mat = cfgs; var TC = TipsController.getInstance(); TC.showItemTips(mat); } } }); cc._RF.pop();