/****************************************************************** * * 同步中心界面 * ******************************************************************/ const BridgeWindow = require( "bridge.window" ); const FxSVC = require( "nx.fx.sv.expand" ); const HeroEvent = require( "hero_event" ); const HeroController = require( "hero_controller" ); const HomeMod = require( "home.mod" ); const TipsController = require( "tips_controller" ); cc.Class( { extends: BridgeWindow, properties: { nodTars: { default: null, type: cc.Node }, nodVolume: { default: null, type: cc.Node }, nodLevel: { default: null, type: cc.Node }, svcList: { default: null, type: FxSVC }, }, // 显示 onEnable: function() { // 事件监听 this.bindGEvent( HeroEvent.Hero_Resonate_Crystal_Info_Event, this.onFreshData.bind( this ) ); // 置空 this.setEmpty(); // 数据更新 HeroController.getInstance().sender26425(); }, // 关闭 onDisable: function() { }, // 置空 setEmpty: function() { // 文本置空 nx.gui.setString( this.nodLevel, "txt", "Lv.--" ); nx.gui.setString( this.nodVolume, "txt", "0/0" ); // 伙伴置空 this.svcList.rebuild( [] ); // 目标置空 this.nodTars.children.forEach( _tar => { nx.gui.setActive( _tar, "normal", false ); nx.gui.setActive( _tar, "empty", true ); } ); this.data = null; this.tarTag = ""; }, // 全刷新 onFreshData: function( _data ) { if( nx.dt.objEmpty( _data ) ) { this.setEmpty(); return; } this.data = _data; const DATA = game.configs.resonate_data; // 同步等级 let txt = nx.text.format( "LvNumber", _data.lev ); nx.gui.setString( this.nodLevel, "txt", txt ); // 容量 let count = _data.res_list.length; let max = DATA.data_const.cell_max.val; txt = count + "/" + max; nx.gui.setString( this.nodVolume, "txt", txt ); // 目标列表刷新 // **目前是全刷新,做一次重复过滤 let tag = JSON.stringify( _data.con_list ); if( tag != this.tarTag ) { this.tarTag = tag; let chds = this.nodTars.children; for( let i = 0; i < chds.length; ++i ) { this.freshTarget( chds[ i ], _data.con_list[ i ] ); } } // 伙伴槽刷新 this.slots = []; for( let i = 0; i < max; ++i ) { let tm = _data.res_list[ i ]; let ifo = tm ? nx.dt.objClone( tm ) : { pos: -1, id: 0, cool_time: 0, canUnlock: ( i == count ), } this.slots.push( ifo ); } this.svcList.rebuild( this.slots ); }, // 同步标的单刷 freshTarget: function( _node, _data ) { // 置空 if( nx.dt.objEmpty( _data ) || !nx.dt.numPositive( _data.id, false ) ) { nx.gui.setActive( _node, "normal", false ); nx.gui.setActive( _node, "empty", true ); return; } // 更新 const HC = HeroController.getInstance(); let partner = HC.getModel().getHeroById( _data.id ); if( !partner ) { nx.error( "同步目标无效:", _data.id ); nx.gui.setActive( _node, "normal", false ); nx.gui.setActive( _node, "empty", true ); return; } // 获取配置 let key = partner.bid + "_" + partner.star; let cfgs = gdata( "partner_data", "data_partner_star", key ); if( !cfgs ) { nx.error( "同步目标配置无效:", _data.id, key ); nx.gui.setActive( _node, "normal", false ); nx.gui.setActive( _node, "empty", true ); return; } nx.gui.setActive( _node, "empty", false ); nx.gui.setActive( _node, "normal", true ); // 等级 nx.gui.setString( _node, "normal/level", partner.lev ); // 角色 let path = cc.path.join( "resDB/models", cfgs.res_id, "half_show2" ); nx.gui.setSpriteFrame( _node, "normal/avatar/img", path, ( _ret ) => { if( !_ret ) { nx.gui.setSpriteFrame( _node, "normal/avatar/img", "resDB/empty/half_show2" ); } } ); }, // 点击说明 onTouchHelp: function() { const DATA = game.configs.resonate_data.data_const.rule_tips2; if( nx.dt.objNEmpty( DATA ) && nx.dt.strNEmpty( DATA.desc ) ) { const TC = TipsController.getInstance(); TC.showTextPanel( "tip", DATA.desc ); } }, // 点击扩容 // 改: 不使用道具,只能用钻石购买 onTouchExpand: function() { let count = this.data ? this.data.gold_count : 0; count = Math.max( 1, count ); const DATA = game.configs.resonate_data.data_cell_cost; let cfgs = DATA[ count ]; if( nx.dt.objEmpty( cfgs ) || nx.dt.arrEmpty( cfgs.loss2 ) || nx.dt.arrEmpty( cfgs.loss2[ 0 ] ) ) { return; } let cost = cfgs.loss2[ 0 ]; let info = gitemdata( cost[ 0 ] ); let msg = nx.text.format( "lab_hero_resonate_tab_resonate_panel_tip2", info.icon, cost[ 1 ] ); nx.mbox( msg, [ 'cancel', 'confirm' ], ( _key, _box ) => { _box.close(); if( _key == 'confirm' ) { const HC = HeroController.getInstance(); HC.sender26429( this.data.res_list.length + 1, 2 ); } } ); }, // 点击添加 onJoinPartner: function( _pos ) { const HC = HeroController.getInstance(); const HM = HC.getModel(); let partners = []; let targets = HM.getDicResonateFiveHeroVo(); let all = HC.getModel().getHeroList() || []; for( let k in all ) { let pt = all[ k ]; if( pt && nx.dt.objEmpty( targets[ pt.id ] ) && !HM.isResonateCystalHero( pt ) ) { partners.push( pt ); } } // 排序 let sort_func = Utils.tableUpperSorter( [ "star" ] ) partners.sort( sort_func ); partners.forEach( _p => { if( _p.face_id == 0 ) { _p.face_id = "null"; } } ) let args = { partners: partners, count: 1, selects: [] }; HC.openPartnerSelector( true, args, ( _partners ) => { let pt = _partners ? _partners[ 0 ] : null; if( pt ) { HC.sender26426( pt.id, _pos ); } HC.openPartnerSelector( false ); } ); }, // 点击下阵 onFreePartner: function( _data ) { if( nx.dt.objEmpty( _data ) || !nx.dt.numPositive( _data.id ) ) { return; } const DATA = game.configs.resonate_data.data_const; let time = nx.bridge.time.toNeedSeconds( DATA.cell_cool_time.val * 60 ); let msg = nx.text.format( "SyncFreePartnerAsk", time ); nx.mbox( msg, [ 'cancel', 'confirm' ], ( _key, _box ) => { _box.close(); if( _key == 'confirm' ) { const HC = HeroController.getInstance(); HC.sender26427( _data.id, _data.pos ); } } ); }, // 点击冷却 onTouchCD: function( _pos ) { const DATA = game.configs.resonate_data.data_const; let cost = DATA.cell_flush_expend.val[ 0 ]; if( nx.dt.arrEmpty( cost ) ) { return; } let cfgs = gitemdata( cost[ 0 ] ); if( nx.dt.objEmpty( cfgs ) ) { return; } let res = PathTool.queryIconPath( cfgs.icon ); let icon = cost[0][0]; let msg = nx.text.format( "lab_hero_resonate_tab_resonate_panel_tip4", cfgs.icon, cost[ 1 ] ); nx.mbox( msg, [ 'cancel', 'confirm' ], ( _key, _box ) => { _box.close(); if( _key == 'confirm' ) { const HC = HeroController.getInstance(); HC.sender26428( _pos ); } } ); }, // 点击关闭 onTouchClose: function() { HomeMod.getInstance().reqHomeData(); this.close(); }, } );