"use strict"; cc._RF.push(module, '2f317JA1UBK1b595x7hWNxj', 'cmp.wing.assemble.wnd'); // Scripts/mod/partner/wings/cmp/cmp.wing.assemble.wnd.js "use strict"; /****************************************************************** * * 僚机装配 * ******************************************************************/ var BridgeWindow = require("bridge.window"); var HeroController = require("hero_controller"); var BackpackController = require("backpack_controller"); var BackPackConst = require("backpack_const"); var FxSVC = require("nx.fx.sv.expand"); var ElfinEvent = require("elfin_event"); var ElfinController = require("elfin_controller"); var ItemBase = require("cmp.item.base"); cc.Class({ "extends": BridgeWindow, properties: { defaultScheme: { "default": [], type: cc.Node, displayName: "默认" }, svcschemeList: { "default": null, type: FxSVC, displayName: "方案列表" }, svcwingsList: { "default": null, type: FxSVC, displayName: "僚机列表" }, skill: { "default": null, type: cc.Node, displayName: "技能展示" }, buy: { "default": null, type: cc.Node, displayName: "解锁按钮" } }, onLoad: function onLoad() { this.bindGEvent(ElfinEvent.Elfin_Plan_Info_Event, this.freshSchemeList.bind(this)); this.bindGEvent(ElfinEvent.Elfin_Plan_Update_Event, this.freshSchemeItem.bind(this)); this.bindGEvent(ElfinEvent.Elfin_Plan_From_Info_Event, this.freshDefaultSchemeInfo.bind(this)); this.type = 100; this.team = 1; this.select_wing = -1; this.sid = -1; this.defaultLst = []; }, onEnable: function onEnable() { // 视图监听 this.vbind([["ShowWingPos", this.onFocusSchemeChanged.bind(this)]]); }, // 重载:参数打开 onOpenConfigs: function onOpenConfigs(_params) { // this.schemes = []; // 当前选择的僚机序号 this.select_pos = 0; this.team = _params.team; this.type = _params.type >= 0 ? _params.type : this.type; // console.log( _params.type + "当前的类型-------" + this.type ); if (_params.setting) { this["default"] = _params.setting.cur_plan_data || this["default"]; } var Elfin = ElfinController.getInstance(); Elfin.send26556(); if (this.type != 100) { Elfin.send26555(this.type); } // 操作方案的当前所选的位置 // this.freshSchemeList(); }, // 重载:关闭前 onPreClosed: function onPreClosed() { nx.bridge.vset("ShowWingPos", null); this.svcschemeList.rebuild([]); this.svcwingsList.rebuild([]); }, // 刷新所有的方案列表 freshSchemeList: function freshSchemeList(_scheme) { var _this = this; var ElfinCtl = ElfinController.getInstance(); var model = ElfinCtl.getModel(); // if( _scheme && _scheme.plan_list ){ // _scheme.plan_list.sort( Utils.tableLowerSorter( [ "id" ] ) ) // } this.schemes = model.getAllPlanData(); // let formLst = model.getFormOn(); // console.log( "当前的上阵或者方案信息" + JSON.stringify( formLst ) ); this.defaultLst = []; this.svcschemeList.rebuild(this.schemes); // console.log( "当前的选择是" + this.select_pos ); // 处理默认方案 var defaultSchemeInfo = []; if (this["default"]) { defaultSchemeInfo = this["default"].sprites; } else { defaultSchemeInfo = model.getDedefaultElfinInfo(); } // console.log( JSON.stringify( _scheme ) + "当前的默认方案数据model" + JSON.stringify( defaultSchemeInfo ) ); var chd = this.defaultScheme; for (var i = 0; i < defaultSchemeInfo.length; i++) { var cmp = chd[i].getComponent(ItemBase); if (cmp) { if (i == 0) { cmp.onFocus(); } cmp.setLocked(false); cmp.setData(defaultSchemeInfo[i].item_bid); if (defaultSchemeInfo[i].item_bid == 0) { this.defaultLst.push(defaultSchemeInfo[i].item_bid); } else { if (!nx.dt.arrMember(this.defaultLst, defaultSchemeInfo[i].item_bid)) { this.defaultLst.push(defaultSchemeInfo[i].item_bid); } } this.onFocusNod(0); } } // 获取所有的僚机信息 var BC = BackpackController.getInstance(); var BCModel = BC.getModel(); var allElfins = BCModel.getAllBackPackArray(BackPackConst.item_sub_type.ELFIN); allElfins.forEach(function (_elfin) { if (nx.dt.arrMember(_this.defaultLst, _elfin.base_id)) { _elfin.sortid = 1; } else { _elfin.sortid = 0; } }); allElfins.sort(function (a, b) { return b.sortid - a.sortid; }); // console.log( "当前的上阵僚机数据初始" + JSON.stringify( allElfins ) ); nx.gui.setActive(this.svcwingsList, "empty", nx.dt.arrEmpty(allElfins)); this.svcwingsList.rebuild(allElfins); this.svcwingsList.cleanFocus(); // 引导辅助 if (nx.bridge.plot && nx.bridge.plot.isDoing()) { this.positionDoPlot(); } // this.scheduleOnce( ()=>{ this.onFreshFocus(); // }, 0.1 ); // this.freshBuy(); }, onFreshFocus: function onFreshFocus() { var nodes = nx.gui.find(this.svcwingsList.bindSCV, "view/content").children; // console.log( "当前的方案处理www" + JSON.stringify( this.defaultLst ) ); for (var i = 0; i < nodes.length; i++) { var sitem = nodes[i]; if (sitem) { var cmp = sitem.svItem; // console.log( defaultSchemeInfo[0].item_bid + "当前的方案处理www" + Object.keys( sitem ) ); if (cmp) { if (nx.dt.arrMember(this.defaultLst, cmp.mdata.base_id)) { this.svcwingsList.addFocus(i); } else { this.svcwingsList.removeFocus(i); } } } } }, // 选中切换 僚机机库 onFocusChanged: function onFocusChanged(_item) { var _this2 = this; var defaultSelect = this.defaultScheme[this.select_pos]; var cmp = defaultSelect.getComponent(ItemBase); var fun = []; if (cmp) { if (_item.mdata.base_id == cmp.mdata) { this.svcwingsList.removeFocus(_item.index); var idx = this.defaultLst.indexOf(_item.mdata.base_id); this.defaultLst[idx] = 0; var data = nx.dt.objClone(_item.mdata) || {}; data.base_id = 0; this.freshWingInScheme(data); } else { this.unscheduleAllCallbacks(); if (nx.dt.arrMember(this.defaultLst, _item.mdata.base_id)) { var nodes = nx.gui.find(this.svcwingsList.bindSCV, "view/content").children; // console.log( "当前的方案处理www" ); for (var i = 0; i < nodes.length; i++) { var sitem = nodes[i]; if (sitem) { var _cmp = sitem.svItem; // console.log( defaultSchemeInfo[0].item_bid + "当前的方案处理www" + Object.keys( sitem ) ); if (_cmp) { if (_cmp.mdata.base_id == _item.mdata.base_id) { // if( nx.dt.arrMember( this.defaultLst, cmp.mdata.base_id ) ){ // this.svcwingsList.removeFocus( i ); for (var d = 0; d < this.defaultScheme.length; d++) { var nod = this.defaultScheme[d]; var dcmp = nod.getComponent(ItemBase); if (dcmp) { if (dcmp.mdata == _item.mdata.base_id) { dcmp.setData(0); var _idx = this.defaultLst.indexOf(_item.mdata.base_id); this.defaultLst[_idx] = 0; this.svcwingsList.removeFocus(_item.index); this.onFocusNod(d); // this.freshSkillDesc( _item.index ,_item.mdata ); // this.defaultLst = this.svcwingsList.focusList; return; } } } // } } } } } } this.svcwingsList.addFocus(_item.index); this.defaultLst[this.select_pos] = _item.mdata.base_id; // this.freshSkillDesc( _item.index ,_item.mdata ); this.freshWingInScheme(_item.mdata); var _loop = function _loop(_d) { var nod = _this2.defaultScheme[_d]; var dcmp = nod.getComponent(ItemBase); if (dcmp) { if (dcmp.mdata && typeof dcmp.mdata != "number") { fun.push(function () { _this2.onFocusNod(_d); }); return "break"; } } }; for (var _d = 0; _d < this.defaultScheme.length; _d++) { var _ret = _loop(_d); if (_ret === "break") break; } if (nx.dt.arrNEmpty(fun)) { this.scheduleOnce(fun[0], 0.3); } } } }, // 选中切择pos 默认操作方案 取消可以下阵僚机的操作 onFocusNod: function onFocusNod(_index) { this.sid = -1; this.freshOtherSchemeFocus(); for (var i = 0; i < this.defaultScheme.length; i++) { var selectNode = this.defaultScheme[i]; var cmp = selectNode.getComponent(ItemBase); if (cmp) { if (_index == i) { if (!cmp.mdata) { nx.tbox(nx.text.format("FortressLevel_Unlocked", i)); this.defaultScheme[this.select_pos].getComponent(ItemBase).onFocus(); return; } else { cmp.onFocus(); this.select_pos = _index; // console.log( this.select_pos + "当前的数据节点" + JSON.stringify( cmp.mdata ) ); if (!nx.dt.objGood(cmp.mdata)) { this.freshSkillDesc(cmp.mdata); // this.onFocusChanged( data ); } else { this.freshSkillDesc(0); } } } else { cmp.outFocus(); } } } }, // 选中切换 僚机方案 onFocusSchemeChanged: function onFocusSchemeChanged(_item) { this.unscheduleAllCallbacks(); if (!_item) { return; } var snode = nx.gui.find(this.svcschemeList, "view/content"); // console.log( JSON.stringify( _item ) + "当前的默认方案配置" + snode ); if (snode) { var nodes = snode.children; // console.log( JSON.stringify( schemes ) + "当前的默认方案配置" + JSON.stringify( defaultSchemeInfo ) ); var dealui = function dealui(_index, _node) { var ElfinCtl = ElfinController.getInstance(); var model = ElfinCtl.getModel(); var defaultSchemeInfo = model.getDedefaultElfinInfo(); var schemes = model.getAllPlanData(); if (schemes[_index]) { schemes[_index].plan_sprites = defaultSchemeInfo; _node.rebind(_index, schemes[_index]); self.scheduleOnce(function () { _node.onTouchSave(self.type, self.team); }, 0.3); } }; var self = this; var selectNode = nodes[_item.index]; // console.log( JSON.stringify( this.defaultLst ) +"当前预设方案的数据" + JSON.stringify( _item ) ); if (selectNode) { if (nx.dt.arrCompare(this.defaultLst, _item.lst)) { if (selectNode.svItem) { selectNode.svItem.onTouchSave(self.type, self.team); } } else { nx.mbox("ASSAskConfirm", ['yes'], function (_key, _box) { _box.close(); if (_key == 'yes') { self.onTouchSave(); self.scheduleOnce(function () { dealui(_item.index, selectNode.svItem); }, 0.6); } }); } } } }, // 处理 点击方案列表,点击选择僚机,僚机放置到对应的方案中 freshWingInScheme: function freshWingInScheme(_wing) { var EC = ElfinController.getInstance(); var model = EC.getModel(); var schemes = model.getAllPlanData(); if (this.sid < 0) { var defaultSchemeInfo = model.getDedefaultElfinInfo(); var scheme = nx.dt.objClone(defaultSchemeInfo); if (scheme) { if (scheme[this.select_pos]) { scheme[this.select_pos].item_bid = _wing.base_id; this.freshDefaultScheme(scheme); } else { nx.tbox("locked"); var cmp = this.defaultScheme[this.select_pos].getComponent(ItemBase); if (cmp) { cmp.onFocus(); return; } } } } else { // console.log( "当前的方案处理" ); return; } }, // 刷新默认方案 freshDefaultSchemeInfo: function freshDefaultSchemeInfo(_schemeitem) { /***** * [26555]:{"type":0,"team_list":[{"team":1,"sprites":[{"pos":3,"item_bid":113005},{"pos":2,"item_bid":113007},{"pos":1,"item_bid":113008}],"plan_id":0}]} */ this.unscheduleAllCallbacks(); if (!nx.dt.arrEmpty(_schemeitem.team_list)) { _schemeitem.team_list.sort(Utils.tableLowerSorter(["team"])); var self = this; // this.defaultLst = []; var team = _schemeitem.team_list[0]; var sprites = team.sprites; sprites.sort(Utils.tableLowerSorter(["pos"])); if (team.plan_id == 0) { for (var i = 0; i < sprites.length; i++) { var selectNode = this.defaultScheme[i]; var cmp = selectNode.getComponent(ItemBase); if (cmp) { cmp.setData(sprites[i].item_bid); this.defaultLst[i] = sprites[i].item_bid; if (i == this.select_pos) { cmp.onFocus(); // this.freshSkillDesc( cmp.mdata.item_bid ); } else { cmp.outFocus(); } } } this.scheduleOnce(function () { self.onFreshFocus(); }, 0.1); } } }, // 刷新单个方案只可以操作默认的方案 freshDefaultScheme: function freshDefaultScheme(_schemeitem) { var _this3 = this; this.unscheduleAllCallbacks(); this.freshDefaultSchemeFocus(); var selectNode = this.defaultScheme[this.select_pos]; var cmp = selectNode.getComponent(ItemBase); if (cmp) { // this.defaultLst[this.select_pos] = _schemeitem[this.select_pos].item_bid ; cmp.setData(_schemeitem[this.select_pos].item_bid); cmp.onFocus(); // 切换节点 控制技能说明 this.onFocusNod(this.select_pos); } this.scheduleOnce(function () { _this3.onFreshFocus(); }, 0.1); // console.log( JSON.stringify( _schemeitem ) + "当前的上阵僚机数据" + JSON.stringify( this.defaultLst ) ); }, // 取消默认的聚焦 freshDefaultSchemeFocus: function freshDefaultSchemeFocus() { for (var i = 0; i < this.defaultScheme.length; i++) { var item = this.defaultScheme[i]; if (item) { var cmp = item.getComponent(ItemBase); if (cmp) { cmp.outFocus(); } } } }, // 取消生成的动态显示的方案的聚焦 freshOtherSchemeFocus: function freshOtherSchemeFocus() { var nodes = nx.gui.find(this.svcschemeList, "view/content").children; // console.log( "当前的方案处理www" ); for (var i = 0; i < nodes.length; i++) { if (nodes[i].svItem) { var chd = nodes[i].svItem.sinfo; for (var j = 0; j < chd.length; j++) { var sitem = chd[j]; var cmp = sitem.getComponent(ItemBase); if (cmp) { cmp.outFocus(); } } } } }, // 刷新单个方案 freshSchemeItem: function freshSchemeItem(_schemeitem) { var index = _schemeitem.id; var i = index - 1; var ElfinCtl = ElfinController.getInstance(); var model = ElfinCtl.getModel(); // let formLst = model.getFormOn(); // console.log( "当前的上阵或者方案信息" + JSON.stringify( formLst ) ); var defaultSchemeInfo = model.getDedefaultElfinInfo(); var dsprites = nx.dt.objClone(defaultSchemeInfo); // "plan_sprites":[{"pos":1,"item_bid":113008},{"pos":2,"item_bid":113007}]} dsprites.forEach(function (_sprite) { if (_sprite.item_bid > 0) { _sprite.item_bid = 0; } }); var plan_sprites = _schemeitem.plan_sprites; _schemeitem.plan_sprites = nx.dt.arrEmpty(_schemeitem.plan_sprites) ? dsprites : _schemeitem.plan_sprites; var node = nx.gui.find(this.svcschemeList, "view/content"); var item = node.children[i]; if (item.svItem) { item.svItem.rebind(i, _schemeitem); } // 在新增方案的时候刷新列表显示,目的是刷新可以新增的相关 if (nx.dt.arrEmpty(plan_sprites)) { this.freshSchemeList(); } // this.freshSchemeList(); }, // 刷新技能介绍 freshSkillDesc: function freshSkillDesc(_mdata) { if (_mdata == 0) { var _cmp2 = this.skill.getComponent("cmp.skill.base"); if (_cmp2) { _cmp2.setData({}); } nx.gui.setActive(this.skill, "type/title", false); nx.gui.setActive(this.skill, "type/txt", false); nx.gui.setStringRich(this.skill, "skill/desc/cd", ""); return; } var key = _mdata; var sfg = gdata("sprite_data", "data_elfin_data", key); var sfgc = game.configs.sprite_data.data_elfin_data[key]; var cmp = this.skill.getComponent("cmp.skill.base"); var ifg = gdata("item_data", "data_unit9", key); nx.gui.setString(this.skill, "type/txt", nx.text.getKey(ifg.use_desc)); if (sfgc) { var sfgs = gskilldata('data_get_skill', sfg.skill); // let txt = nx.text.format( "SkillCD2", sfgs.cd ); var desc = nx.text.format("CD", sfgs.cd, parseInt(this.select_pos) + 1); // console.log( "des说明" + desc ); nx.gui.setStringRich(this.skill, "skill/desc/cd", desc); nx.gui.setActive(this.skill, "type/txt", true); nx.gui.setActive(this.skill, "type/title", true); if (cmp) { cmp.setData(sfg.skill); } } else { if (cmp) { cmp.setData({}); nx.gui.setStringRich(this.skill, "skill/desc/cd", ""); } } }, // 刷新购买按钮 freshBuy: function freshBuy() { // if( ) var allIds = []; this.schemes.forEach(function (_sch) { if (_sch.id != 9) { allIds.push(_sch); } }); var key = this.schemes.length; var key2 = allIds.length; var maxCount = game.configs.sprite_data.data_elfin_plan_length; var need = gdata("sprite_data", "data_elfin_plan", key); nx.gui.setString(this.buy, "txt", key2 < maxCount ? need.expend[0][1] : 0); nx.gui.setActive(this.buy, "", key2 < maxCount); }, // 购买方案 onTouchAdd: function onTouchAdd() { var key = this.schemes.length; var EC = ElfinController.getInstance(); var pfg = game.configs.sprite_data.data_elfin_plan[key]; var have = BackpackController.getInstance().getModel().getItemNumByBid(pfg.expend[0][0]); var need = pfg.expend[0][1]; // 不足弹出提示 if (have < need) { nx.tbox(nx.text.getKey("elfin_hatch_unlock_5")); return; } var mat0 = pfg.expend[0][0]; var txt = nx.text.format("lab_heaven_msg_tips_19n", need, key); EC.openElfUseTipsWindow(true, txt, [mat0], [need], function (_deal) { EC.send26562(key); EC.openElfUseTipsWindow(false); }); }, // 保存当前的方案 onTouchSave: function onTouchSave() { var show = []; var cfg = gdata("item_data", "data_unit9"); var cfgs = game.configs.item_data.data_unit9; var have = 0; for (var i = 0; i < this.defaultLst.length; i++) { var c = this.defaultLst[i]; var icon = gdata("item_data", "data_unit9", c).icon; // console.log( "圖標顯示" + JSON.stringify( ) ); if (c > 0 && nx.dt.arrMember(show, icon)) { have++; } else { show.push(icon); } } if (have > 0) { nx.tbox("AssembleTip"); return; } var ElfinCtl = ElfinController.getInstance(); var choice = []; // console.log( "当前的类型wwwww-------" + this.type ); for (var _i = 0; _i < this.defaultScheme.length; _i++) { var selectNode = this.defaultScheme[_i]; var cmp = selectNode.getComponent(ItemBase); if (cmp) { if (!nx.dt.objGood(cmp.mdata)) { var data = {}; data.pos = _i + 1; data.item_bid = nx.dt.objClone(cmp.mdata || -1); choice.push(data); } else { var _data = {}; _data.pos = _i + 1; _data.item_bid = 0; // console.log( "当前的pos2" + JSON.stringify( data ) ); choice.push(_data); } } } for (var _i2 = 0; _i2 < choice.length; _i2++) { if (choice[_i2].item_bid < 0) { choice.splice(_i2, 1); // 将使后面的元素依次前移,数组长度减1 _i2--; // 如果不减,将漏掉一个元素 } } // {"sprites":[{"pos":1,"item_bid":112002}]} // {"sprites":[{"pos":1,"item_bid":112001}]} // console.log( "当前方案信息" + JSON.stringify( choice ) ); if (this.type == 100 || this.type == 0) { ElfinCtl.sender26514(choice, this.type == 100); } else { /********_type, sprites, team, flag, only_save */ ElfinCtl.send26560(this.type, choice, this.team); } }, dealSame: function dealSame(_lst) { var lst = _lst; var same = false; var count = 0; for (var i = 0; i < lst.length; i++) { var it = lst[i]; var itd = this.defaultLst[i]; if (it == itd) { count++; } } same = count >= lst.length; return same; }, // 返回主场景 onBackToMain: function onBackToMain() { var _this4 = this; this.unscheduleAllCallbacks(); var HR = HeroController.getInstance(); var EC = ElfinController.getInstance(); var lst = this.dealResult(); var BC = BackpackController.getInstance(); // if( BC ) { // } if (this.type == 100) { // console.log( this.type + "类型" + JSON.stringify( lst ) + "当前的默认方案数据" + JSON.stringify( this.defaultLst ) ); if (!this.dealSame(lst)) { nx.mbox("ASSAskConfirmBack", ['yes'], function (_key, _box) { _box.close(); if (_key == 'yes') { _this4.onTouchSave(); _this4.scheduleOnce(function () { BC.openMainWindow(false); HR.openHeroMainInfoWindow(false); HR.openHeroBagWindow(false); EC.openElfinAdjustWindow(false); }, 0.6); } }); } else { BC.openMainWindow(false); HR.openHeroMainInfoWindow(false); HR.openHeroBagWindow(false); EC.openElfinAdjustWindow(false); } } else { BC.openMainWindow(false); HR.openHeroMainInfoWindow(false); HR.openHeroBagWindow(false); EC.openElfinAdjustWindow(false); } }, dealResult: function dealResult() { var ElfinCtl = ElfinController.getInstance(); var model = ElfinCtl.getModel(); var defaultSchemeInfo = model.getDedefaultElfinInfo(); var lst = []; for (var i = 0; i < defaultSchemeInfo.length; i++) { lst.push(defaultSchemeInfo[i].item_bid); } return lst; }, closeSelf: function closeSelf() { var _this5 = this; this.unscheduleAllCallbacks(); var lst = this.dealResult(); if (this.type == 100) { if (!this.dealSame(lst)) { nx.mbox("ASSAskConfirmBack", ['yes'], function (_key, _box) { _box.close(); if (_key == 'yes') { _this5.onTouchSave(); _this5.scheduleOnce(function () { _this5.close(); }, 0.3); } }); } else { this.close(); } } else { this.close(); } }, // ============================================ // 引导辅助 // ============================================ // 定位可以操作的 positionDoPlot: function positionDoPlot() { var node = null; var chd = nx.gui.find(this.svcwingsList.bindSCV, "view/content").children; node = chd[0]; // let node = null; // let children = this.svcList.bindSCV.content.children; // for( let i = 0; i < children.length; ++i ) { // let temp = children[ i ]; // if( temp.svItem && temp.svItem.mdata && temp.svItem.mdata.bid == 20401 ) { // node = temp; // break; // } // } if (!node) { nx.error("$ParterPage:定位特定英雄失败!"); node = chd[0]; if (!node) { return; } } var cell = nx.gui.find(this, "plot"); var pos = node.convertToWorldSpaceAR(cc.Vec2.ZERO); cell.position = cell.parent.convertToNodeSpaceAR(pos); cell.width = node.width; cell.height = node.height; cell.mdata = node.svItem.mdata; } }); cc._RF.pop();