/****************************************************************** * * 僚机装配 * ******************************************************************/ const BridgeWindow = require( "bridge.window" ); const HeroController = require( "hero_controller" ); const BackpackController = require( "backpack_controller" ); const BackPackConst = require( "backpack_const" ); const FxSVC = require( "nx.fx.sv.expand" ); const ElfinEvent = require( "elfin_event" ); const ElfinController = require( "elfin_controller" ); const 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() { 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(){ // 视图监听 this.vbind( [ [ "ShowWingPos", this.onFocusSchemeChanged.bind( this ) ] ] ); }, // 重载:参数打开 onOpenConfigs: function( _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; } let Elfin = ElfinController.getInstance(); Elfin.send26556(); if( this.type != 100 ){ Elfin.send26555( this.type ); } // 操作方案的当前所选的位置 // this.freshSchemeList(); }, // 重载:关闭前 onPreClosed: function() { nx.bridge.vset( "ShowWingPos", null ); this.svcschemeList.rebuild( [] ); this.svcwingsList.rebuild( [] ); }, // 刷新所有的方案列表 freshSchemeList : function( _scheme ){ let ElfinCtl = ElfinController.getInstance(); let 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 ); // 处理默认方案 let defaultSchemeInfo = []; if( this.default ){ defaultSchemeInfo = this.default.sprites; }else{ defaultSchemeInfo = model.getDedefaultElfinInfo(); } // console.log( JSON.stringify( _scheme ) + "当前的默认方案数据model" + JSON.stringify( defaultSchemeInfo ) ); let chd = this.defaultScheme; for (let i = 0; i < defaultSchemeInfo.length; i++) { let 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 ); } } // 获取所有的僚机信息 let BC = BackpackController.getInstance(); let BCModel = BC.getModel(); let allElfins = BCModel.getAllBackPackArray(BackPackConst.item_sub_type.ELFIN); allElfins.forEach( _elfin => { if( nx.dt.arrMember( this.defaultLst, _elfin.base_id ) ){ _elfin.sortid = 1; }else{ _elfin.sortid = 0; } } ) allElfins.sort( ( 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(){ let nodes = nx.gui.find( this.svcwingsList.bindSCV, "view/content" ).children; // console.log( "当前的方案处理www" + JSON.stringify( this.defaultLst ) ); for (let i = 0; i < nodes.length; i++) { let sitem = nodes[i]; if( sitem ){ let 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( _item ) { let defaultSelect = this.defaultScheme[this.select_pos]; let cmp = defaultSelect.getComponent( ItemBase ); let fun = []; if( cmp ){ if( _item.mdata.base_id == cmp.mdata ){ this.svcwingsList.removeFocus( _item.index ); let idx = this.defaultLst.indexOf( _item.mdata.base_id ); this.defaultLst[idx] = 0; let 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 ) ){ let nodes = nx.gui.find( this.svcwingsList.bindSCV, "view/content" ).children; // console.log( "当前的方案处理www" ); for (let i = 0; i < nodes.length; i++) { let sitem = nodes[i]; if( sitem ){ let 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 (let d = 0; d < this.defaultScheme.length; d++) { let nod = this.defaultScheme[d]; let dcmp = nod.getComponent( ItemBase ); if( dcmp ){ if( dcmp.mdata == _item.mdata.base_id ){ dcmp.setData( 0 ); let 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 ); for (let d = 0; d < this.defaultScheme.length; d++) { let nod = this.defaultScheme[d]; let dcmp = nod.getComponent( ItemBase ); if( dcmp ){ if( dcmp.mdata && typeof( dcmp.mdata ) != "number" ){ fun.push( ()=>{ this.onFocusNod( d ); } ) break; } } } if( nx.dt.arrNEmpty( fun ) ){ this.scheduleOnce( fun[0], 0.3 ); } } } }, // 选中切择pos 默认操作方案 取消可以下阵僚机的操作 onFocusNod: function( _index ) { this.sid = -1; this.freshOtherSchemeFocus(); for (let i = 0; i < this.defaultScheme.length; i++) { let selectNode = this.defaultScheme[i]; let 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( _item ) { this.unscheduleAllCallbacks(); if( !_item ){ return; } let snode = nx.gui.find( this.svcschemeList, "view/content" ); // console.log( JSON.stringify( _item ) + "当前的默认方案配置" + snode ); if( snode ){ let nodes = snode.children; // console.log( JSON.stringify( schemes ) + "当前的默认方案配置" + JSON.stringify( defaultSchemeInfo ) ); let dealui = function( _index, _node ){ let ElfinCtl = ElfinController.getInstance(); let model = ElfinCtl.getModel(); let defaultSchemeInfo = model.getDedefaultElfinInfo(); let schemes = model.getAllPlanData() ; if( schemes[_index] ){ schemes[_index].plan_sprites = defaultSchemeInfo; _node.rebind( _index, schemes[_index] ); self.scheduleOnce( () =>{ _node.onTouchSave( self.type, self.team ); }, 0.3 ); } } let self = this; let 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'], ( _key, _box ) => { _box.close(); if( _key == 'yes' ) { self.onTouchSave(); self.scheduleOnce( ()=>{ dealui( _item.index, selectNode.svItem ); }, 0.6 ); } } ); } } } }, // 处理 点击方案列表,点击选择僚机,僚机放置到对应的方案中 freshWingInScheme: function( _wing ){ let EC = ElfinController.getInstance(); let model = EC.getModel(); let schemes = model.getAllPlanData(); if( this.sid < 0 ){ let defaultSchemeInfo = model.getDedefaultElfinInfo(); let 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" ); let cmp = this.defaultScheme[this.select_pos].getComponent( ItemBase ); if( cmp ) { cmp.onFocus(); return; } } } }else{ // console.log( "当前的方案处理" ); return; } }, // 刷新默认方案 freshDefaultSchemeInfo : function( _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" ] ) ) let self = this; // this.defaultLst = []; let team = _schemeitem.team_list[0]; let sprites = team.sprites; sprites.sort( Utils.tableLowerSorter( [ "pos" ] ) ); if( team.plan_id == 0 ){ for (let i = 0; i < sprites.length; i++) { let selectNode = this.defaultScheme[i]; let 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( () => { self.onFreshFocus(); }, 0.1 ); } } }, // 刷新单个方案只可以操作默认的方案 freshDefaultScheme : function( _schemeitem ){ this.unscheduleAllCallbacks(); this.freshDefaultSchemeFocus(); let selectNode = this.defaultScheme[this.select_pos]; let 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( () => { this.onFreshFocus(); }, 0.1 ); // console.log( JSON.stringify( _schemeitem ) + "当前的上阵僚机数据" + JSON.stringify( this.defaultLst ) ); }, // 取消默认的聚焦 freshDefaultSchemeFocus : function( ){ for (let i = 0; i < this.defaultScheme.length; i++) { let item = this.defaultScheme[i]; if( item ){ let cmp = item.getComponent( ItemBase ); if( cmp ){ cmp.outFocus(); } } } }, // 取消生成的动态显示的方案的聚焦 freshOtherSchemeFocus : function( ){ let nodes = nx.gui.find( this.svcschemeList, "view/content" ).children; // console.log( "当前的方案处理www" ); for (let i = 0; i < nodes.length; i++) { if( nodes[i].svItem ){ let chd = nodes[i].svItem.sinfo; for (let j = 0; j < chd.length; j++) { let sitem = chd[j]; let cmp = sitem.getComponent( ItemBase ); if( cmp ){ cmp.outFocus(); } } } } }, // 刷新单个方案 freshSchemeItem : function( _schemeitem ){ let index = _schemeitem.id; let i = index - 1; let ElfinCtl = ElfinController.getInstance(); let model = ElfinCtl.getModel(); // let formLst = model.getFormOn(); // console.log( "当前的上阵或者方案信息" + JSON.stringify( formLst ) ); let defaultSchemeInfo = model.getDedefaultElfinInfo(); let dsprites = nx.dt.objClone( defaultSchemeInfo ); // "plan_sprites":[{"pos":1,"item_bid":113008},{"pos":2,"item_bid":113007}]} dsprites.forEach( _sprite => { if( _sprite.item_bid > 0 ){ _sprite.item_bid = 0; } } ) let plan_sprites = _schemeitem.plan_sprites; _schemeitem.plan_sprites = nx.dt.arrEmpty( _schemeitem.plan_sprites ) ? dsprites : _schemeitem.plan_sprites; let node = nx.gui.find( this.svcschemeList, "view/content" ); let item = node.children[i]; if( item.svItem ){ item.svItem.rebind( i, _schemeitem ); } // 在新增方案的时候刷新列表显示,目的是刷新可以新增的相关 if( nx.dt.arrEmpty( plan_sprites ) ) { this.freshSchemeList(); } // this.freshSchemeList(); }, // 刷新技能介绍 freshSkillDesc : function( _mdata ){ if( _mdata == 0 ){ let cmp = this.skill.getComponent( "cmp.skill.base" ); if( cmp ){ cmp.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; } let key = _mdata; let sfg = gdata( "sprite_data","data_elfin_data", key ); let sfgc = game.configs.sprite_data.data_elfin_data[key]; let cmp = this.skill.getComponent( "cmp.skill.base" ); let ifg = gdata( "item_data","data_unit9", key ); nx.gui.setString( this.skill, "type/txt", nx.text.getKey( ifg.use_desc ) ); if ( sfgc ) { let sfgs = gskilldata( 'data_get_skill', sfg.skill ); // let txt = nx.text.format( "SkillCD2", sfgs.cd ); let 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(){ // if( ) let allIds = []; this.schemes.forEach( _sch => { if( _sch.id != 9 ){ allIds.push( _sch ); } } ) let key = this.schemes.length; let key2 = allIds.length; let maxCount = game.configs.sprite_data.data_elfin_plan_length; let 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(){ let key = this.schemes.length; let EC = ElfinController.getInstance(); let pfg = game.configs.sprite_data.data_elfin_plan[ key ]; let have = BackpackController.getInstance().getModel().getItemNumByBid( pfg.expend[0][0] ); let need = pfg.expend[0][1]; // 不足弹出提示 if( have < need ){ nx.tbox( nx.text.getKey( "elfin_hatch_unlock_5" ) ); return; } let mat0 = pfg.expend[0][0]; let txt = nx.text.format( "lab_heaven_msg_tips_19n", need, key ); EC.openElfUseTipsWindow( true , txt, [mat0], [ need ], ( _deal =>{ EC.send26562( key ); EC.openElfUseTipsWindow( false ); } ) ); }, // 保存当前的方案 onTouchSave : function(){ let show = []; let cfg = gdata( "item_data", "data_unit9" ); let cfgs = game.configs.item_data.data_unit9; let have = 0; for (let i = 0; i < this.defaultLst.length; i++) { let c = this.defaultLst[i]; let 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; } let ElfinCtl = ElfinController.getInstance(); let choice = []; // console.log( "当前的类型wwwww-------" + this.type ); for (let i = 0; i < this.defaultScheme.length; i++) { let selectNode = this.defaultScheme[i]; let cmp = selectNode.getComponent( ItemBase ); if( cmp ){ if( !nx.dt.objGood( cmp.mdata ) ){ let data = {}; data.pos = i + 1; data.item_bid = nx.dt.objClone( cmp.mdata || -1 ); choice.push( data ); }else{ let data = {}; data.pos = i + 1; data.item_bid = 0; // console.log( "当前的pos2" + JSON.stringify( data ) ); choice.push( data ); } } } for (let i = 0; i < choice.length; i++) { if ( choice[i].item_bid < 0 ) { choice.splice(i, 1); // 将使后面的元素依次前移,数组长度减1 i--; // 如果不减,将漏掉一个元素 } } // {"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( _lst ){ let lst = _lst; let same = false; let count = 0; for (let i = 0; i < lst.length; i++) { let it = lst[i]; let itd = this.defaultLst[i]; if( it == itd ){ count++; } } same = count >= lst.length; return same; }, // 返回主场景 onBackToMain: function(){ this.unscheduleAllCallbacks(); let HR = HeroController.getInstance(); let EC = ElfinController.getInstance(); let lst = this.dealResult(); const 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'], ( _key, _box ) => { _box.close(); if( _key == 'yes' ) { this.onTouchSave(); this.scheduleOnce( () =>{ 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(){ let ElfinCtl = ElfinController.getInstance(); let model = ElfinCtl.getModel(); let defaultSchemeInfo = model.getDedefaultElfinInfo(); let lst = []; for (let i = 0; i < defaultSchemeInfo.length; i++) { lst.push( defaultSchemeInfo[i].item_bid ); } return lst; }, closeSelf: function(){ this.unscheduleAllCallbacks(); let lst = this.dealResult(); if( this.type == 100 ){ if( !this.dealSame( lst ) ){ nx.mbox( "ASSAskConfirmBack", ['yes'], ( _key, _box ) => { _box.close(); if( _key == 'yes' ) { this.onTouchSave(); this.scheduleOnce( () =>{ this.close(); }, 0.3 ); } } ); }else{ this.close(); } }else{ this.close(); } }, // ============================================ // 引导辅助 // ============================================ // 定位可以操作的 positionDoPlot: function() { let node = null; let 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; } } let cell = nx.gui.find( this, "plot" ); let 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; }, } );