/****************************************************************** * * 僚机背包页 * ******************************************************************/ const MenuPage = require( "cmp.com.menu.page" ); const ElfinEvent = require( "elfin_event" ); const ElfinController = require( "elfin_controller" ); const TipsController = require( "tips_controller" ); const RoleController = require( "role_controller" ); const BackpackController = require( "backpack_controller" ); const NxSpine = require( "nx.fx.spine" ); const ItemBase = require( "cmp.item.base" ); const wing = "wing"; cc.Class( { extends: MenuPage, properties: { power : { default : null, type : cc.Node, }, lev : { default : null, type : cc.Node, }, stageInfo : { default : null, type : cc.Node, }, props : { default : null, type : cc.Node, }, stages : { default : [], type : cc.Node, }, skills : { default : [], type : cc.Node, }, needs : { default : null, type : cc.Node, }, ops: { default : null, type : cc.Node, }, role: { default : null, type : cc.Sprite, }, nodMax: { default : null, type : cc.Node, }, spEffect: { default: null, type: NxSpine }, }, onLoad: function() { nx.gui.setSpriteFrame( this.role, "", null ); this.spEffect.stop(); }, onEnable: function(){ // 事件监听 this.bindGEvent( ElfinEvent.Get_Elfin_Tree_Data_Event, this.onFreshFirst.bind( this ) ); this.bindGEvent( ElfinEvent.Elfin_Plan_From_Info_Event, this.onFreshDefault.bind( this ) ); this.bindGEvent( ElfinEvent.Elfin_Tree_Lv_Up_Event, this.onPlayEffect.bind( this ) ); this.onDealData(); }, onDisable: function(){ this.unbindGEvents(); }, // 首次点击如果获取不到相关的僚机数据,请求 onDealData : function(){ let Elfin = ElfinController.getInstance(); let model = Elfin.getModel(); this.elfinData = model.getElfinTreeData(); // if( nx.dt.objEmpty( this.elfinData ) ){ // Elfin.sender26510(); // }else{ // this.onFreshFirst(); // } Elfin.sender26510(); // getElfinTreeData }, // 收到消息 onFreshFirst: function( _data ){ let Elfin = ElfinController.getInstance(); let model = Elfin.getModel(); this.elfinData = model.getElfinTreeData() || _data; this.onFreshWings( this.elfinData ); }, onFreshWings : function( _data ){ let elfinData = _data; if( !this.dataAnalyst() ){ return; } // {"pos":2,"item_bid":0},{"pos":1,"item_bid":113005} let cfg = game.configs.sprite_data.data_tree_step[elfinData.break_lev]; // 等级 let txt = `${elfinData.lev}/${cfg.lev_max}`; nx.gui.setString( this.power, "", elfinData.power ); nx.gui.setStringRich( this.lev, "", nx.text.format( "WingLevel", elfinData.lev, cfg.lev_max ) ); nx.gui.setString( this.props, "ATK/txt", elfinData.atk ); nx.gui.setString( this.props, "HP/txt", elfinData.hp_max ); nx.gui.setString( this.props, "DEF/txt", elfinData.def ); nx.gui.setString( this.props, "SPD/txt", elfinData.speed ); nx.gui.setString( this.stageInfo, "", nx.text.format( "FortressLevel_", elfinData.break_lev ) ); this.reds = []; this.updateNeeds(); this.freshOps(); this.setWingsInfo( this.elfinData ); // if( ) // nx.bridge.setIcon( this.role, "", ifg.imageid ); // let ifg = gdata( "item_data","data_unit9", cmp.mdata ); // nx.bridge.setIcon( this.role, "", ifg.imageid ); // this.role_bid = cmp.mdata; }, // 操作刷新 freshOps: function() { nx.gui.setActive( this, "upstar", false ); // 尚未当阶段满级,更新升级花费 // 最大等级按照当前阶段的最高等级/如果是顶阶那么按照最大等级 let maxLv = this.data.cbc.lev_max; if( nx.dt.objEmpty( this.data.nbc ) ) { maxLv = Math.max( maxLv, this.data.scfg.lev ); } if( this.elfinData.lev < maxLv ) { nx.gui.setActive( this.ops, "uplevel", true ); nx.gui.setActive( this.nodMax, "", false ); nx.gui.setActive( this.ops, "break", false ); this.updateNeeds(); return; } // 当前满级,需要升阶判断 // 已经顶阶 if( nx.dt.objEmpty( this.data.nbc ) ) { nx.gui.setActive( this.nodMax, "", true ); nx.gui.setActive( this.needs, "", false ); nx.gui.setActive( this.ops, "uplevel", false ); nx.gui.setActive( this.ops, "break", false ); return; } if( this.elfinData.lev == maxLv && this.data.cbc.count <= this.elfinData.break_lev ) { nx.gui.setActive( this.needs, "", true ); nx.gui.setActive( this.nodMax, "", false ); nx.gui.setActive( this.ops, "uplevel", false ); nx.gui.setActive( this.ops, "break", true ); return; } // 红点提示 this.freshRed(); }, // 刷新当前位置上显示的僚机信息与对应的技能信息 setWingsInfo: function( _elfinData ){ /** * {"lev":2,"break_lev":0,"atk":5872,"def_p":0,"def_s":0,"hp_max":35261,"speed":110,"hit_rate":9999,"dodge_rate":0,"crit_rate":2000,"crit_ratio":1200,"hit_magic":0,"dodge_magic":0,"def":220, * "sprites":[{"pos":1,"item_bid":111004}],"power":75} */ let sprites = _elfinData.sprites; sprites.sort( Utils.tableLowerSorter( [ "pos" ] ) ) ; let chd = this.stages; for (let i = 0; i < chd.length; i++) { nx.gui.setString( chd[i], "name/txt", nx.text.format( "FortressLevel_Unlocked", i ) ); // nx.gui.setActive( this.skills[i], "", ); let sprite = sprites[i]; if( sprite ){ let cmp = chd[sprite.pos-1].getComponent( ItemBase ); if( cmp ){ cmp.setLocked( false ); if( sprite.item_bid >= 0 ){ cmp.setData( sprite.item_bid ); if( i == 0 ){ if( sprite.item_bid >= 0 ){ this.role_bid = sprite.item_bid > 0 ? sprite.item_bid : 0; this.onTouchFormOn( 0 ); // let ifg = gdata( "item_data","data_unit9", sprite.item_bid ) // nx.bridge.setIcon( this.role, "", ifg.imageid ); }else{ nx.gui.setSpriteFrame( this.role, "", null ); this.role_bid = null; } } let sfgc = game.configs.sprite_data.data_elfin_data[sprite.item_bid]; let scmp = this.skills[sprite.pos-1].getComponent( "cmp.skill.base" ); let sfg = gdata( "sprite_data","data_elfin_data", sprite.item_bid ); if( sfgc ){ let sfgg = gdata( "skill_data4", "data_get_skill", sfg.skill ); nx.bridge.setIcon( this.skills[ sprite.pos - 1 ], "icon", sfgg.icon ); if( scmp ){ scmp.setData( sfg.skill ); } }else{ scmp.setData( {} ); nx.gui.getComponent( this.skills[ sprite.pos - 1 ], "icon", cc.Sprite ).curKey = ""; } nx.gui.setActive( this.skills[ sprite.pos - 1 ], "skillsp", sprite.item_bid > 0 ); // if( sfgs ) { // nx.bridge.setIcon( this.skills[sprite.pos-1], "icon", parseInt( sfgs.icon ) ); // } // if( sfgc ){ // if( scmp ){ // scmp.setData( sfg.skill ); // } // }else{ // if( scmp ){ // scmp.setData( [] ); // } // } } } } } }, freshRed: function(){ let canUpLevel = true; let needs = 0; this.reds.forEach( _need =>{ if( _need.is_enough ){ needs++; } } ) canUpLevel = needs >= 2; nx.gui.setActive( this.ops, "uplevel/tip", false ); nx.gui.setActive( this.ops, "uplevel/tipSp", !!canUpLevel ); }, // 数据统计 dataAnalyst: function() { // 空目标 if( nx.dt.objEmpty( this.elfinData ) ) { return false; } let scfg = gdata( "sprite_data", "data_tree_up_lv", this.elfinData.lev ); if( nx.dt.objEmpty( scfg ) ) { nx.error( "升级刷新失败,当前配置无效!" ); return false; } let cbc = game.configs.sprite_data.data_tree_step[ this.elfinData.break_lev ]; if( nx.dt.objEmpty( cbc ) ) { nx.error( "升级刷新失败,当前配置无效!" ); return false; } let k2 = this.elfinData.break_lev + 1 ; let nbc = game.configs.sprite_data.data_tree_step[ k2 ]; this.data = { scfg: scfg, // 当前配置 cbc: cbc, // 当前阶段配置 nbc: nbc, // 下个阶段配置 }; return true; }, // 更新升级花费 updateNeeds: function() { let lev = this.elfinData.lev; let max = lev; let step = 1; let needs = {}; let model = BackpackController.getInstance().getModel(); let check = function( _costs ) { let cur = {}; let enough = true; for( let i = 0; i < _costs.length; ++i ) { let cost = _costs[ i ]; let id = cost[ 0 ]; if( cur[ id ] == null ) { cur[ id ] = 0; } cur[ id ] = cur[ id ] + cost[ 1 ]; let count = model.getItemNumByBid( id ); if( count < cur[ id ] ) { enough = false; } } return { is_enough: enough, cur_cost_list: cur } }; // 资源统计 let maxLv = Math.max( this.data.cbc.lev_max, this.data.scfg.lev ); for( let i = 1; i <= step; ++i ) { let next = this.elfinData.lev + i - 1; if( next >= maxLv ) { break; } let cfg = gdata( "sprite_data", "data_tree_up_lv", next ); if( cfg ) { let up_cost = cfg.expend || []; let ret = check( up_cost ); this.reds.push( ret ); let is_enough = ret.is_enough; let cost_list = ret.cur_cost_list; if( is_enough ) { needs = cost_list; max = next; } else { if( i == 1 ) { needs = cost_list; } break } } } let role_vo = RoleController.getInstance().getRoleVo(); let cfgs = gdata( "sprite_data", "data_tree_step", this.elfinData.break_lev ); // console.log( role_vo.lev + "当前的判断" + JSON.stringify( cfgs.step_cond[0][1] ) ); if( role_vo.lev < cfgs.step_cond[0][1] ){ nx.gui.setString( this.ops, "break/txt", nx.text.format( "BreakLevel", cfgs.step_cond[0][1] ) ); }else{ nx.gui.setString( this.ops, "break/txt", nx.text.getKey( "Break" ) ); } // 消耗刷新 nx.gui.setActive( this.nodMax, "", false ); let list = nx.gui.setActive( this.needs, "", true ); let cfg = gdata( "sprite_data", "data_tree_up_lv", this.elfinData.lev ); let expend = cfg ? ( cfg.expend || [] ) : []; for( let k = 0; k < expend.length; ++k ) { let ifo = expend[ k ]; let node = list.children[ k ]; if( nx.dt.arrEmpty( ifo ) ) { node.active = false; continue; } node.active = true; let item = gdata( "item_data", "data_unit1", ifo[ 0 ], false ); nx.bridge.setIconS( node, "icon", item.icon ); let count = ifo[1];//ifo[1]; // let have_count = model.getItemNumByBid( ifo[ 0 ] ); nx.gui.setString( node, "txt", count ); }; this.freshRed(); }, upLevel : function(){ let cfg = gdata( "sprite_data", "data_tree_up_lv", this.elfinData.lev ); let mat = cfg.expend[0][0]; let count = BackpackController.getInstance().getModel().getItemNumByBid( mat ); let TC = TipsController.getInstance(); if( count < cfg.expend[0][1] ){ let ifg = gdata( "item_data", "data_unit1", mat ); if( TC ) { if( ifg ){ nx.tbox(nx.text.format( nx.text.getKey( "lab_hero_break_window_tip1" ), ifg.name )); } TC.showItemTips( mat ); return; } } let Elfin = ElfinController.getInstance(); if( Elfin ){ Elfin.sender26511(); } }, // 要弹窗 breakLevel : function(){ let role_vo = RoleController.getInstance().getRoleVo(); let cfg = gdata( "sprite_data", "data_tree_step", this.elfinData.break_lev ); if( role_vo.lev < cfg.step_cond[0][1] ){ nx.tbox( nx.text.format( nx.text.format( "BreakLevel", cfg.step_cond[0][1] ) ) ); return; } let Elfin = ElfinController.getInstance(); if( Elfin ){ Elfin.openElfinTreeStepWindow( true ); } }, onTouchFormOn : function( _index ){ this.stages.forEach( _item => { let cmp = _item.getComponent( ItemBase ); if( cmp ){ cmp.outFocus(); } } ) if( this.role_bid == 0 ){ // nx.bridge.setIcon( this.role, "", "" ); nx.gui.setSpriteFrame( this.role, "", null ); nx.gui.getComponent( this.role, "", cc.Sprite ).curKey = ""; this.role_bid = 1; }else{ let cmp = this.stages[_index].getComponent( ItemBase ); if( cmp ){ if( !cmp.mdata ){ nx.tbox( nx.text.format( "FortressLevel_Unlocked", _index ) ); return; } if( nx.dt.objGood( cmp.mdata ) ){ nx.tbox( nx.text.getKey( "tip_Assemble_first" ) ); return; } if( !nx.dt.objGood( cmp.mdata ) ){ let ifg = gdata( "item_data","data_unit9", cmp.mdata ); nx.bridge.setIcon( this.role, "", ifg.imageid ); this.role_bid = cmp.mdata; cmp.onFocus(); } } } }, // 刷新默认操作 onFreshDefault : function( _schemeDefault ){ // 这里存储默认的方案配置信息 // console.log( "获取的默认配置信息" + JSON.stringify( _schemeDefault ) ); let Elfin = ElfinController.getInstance(); Elfin.getModel().freshDefaultScheme( _schemeDefault ); }, // 规则说明 onTouchTip: function(){ let TC = TipsController.getInstance(); if( TC ) { let txt = game.configs.sprite_data.data_const.ancient_desc; TC.showTextPanel( "tip", txt.desc ); } }, // 打开装配 onTouchAssemble: function(){ let Elfin = ElfinController.getInstance(); if( Elfin ) { // let model = Elfin.getModel(); // let schemes = model.getAllPlanData(); // if( !schemes || nx.dt.objEmpty( schemes ) ){ // Elfin.send26556(); // } Elfin.openElfinAdjustWindow( true, 100, 1 ); } }, // 打开预览 openElfinBookWindow: function(){ let Elfin = ElfinController.getInstance(); if( Elfin ) { Elfin.openElfinBookWindow( true ); } }, // 打开科研 openWingScientfic: function(){ let Elfin = ElfinController.getInstance(); if( Elfin ) { let model = Elfin.getModel(); let lst = model.getElfinHatchList(); if( !lst || nx.dt.objEmpty( lst ) ){ Elfin.sender26500(); } // Elfin.sender26500(); Elfin.openWingScientfic( true ); } }, onPlayEffect : function(){ this.spEffect.load( "resDB/effects/E80023/action", ( _e ) => { if( !_e ) { this.spEffect.action( "action", false ); } else { this.spEffect.stop(); } } ); }, // 打开采购 openElfinProcurement: function(){ let Elfin = ElfinController.getInstance(); if( Elfin ) { let model = Elfin.getModel(); let summon = model.getElfinSummonData(); if( !summon || nx.dt.arrEmpty( summon ) ){ Elfin.send26550(); } Elfin.openElfinWishWindow( true ); } }, // 点击显示技能介绍 onTouchShowSkill: function(){ let sfgc = game.configs.sprite_data.data_elfin_data[this.role_bid]; if( !this.role_bid || this.role_bid == 0 || !sfgc ){ nx.tbox( "NoneWingsInfo" ); return; } let sfg = gdata( "sprite_data","data_elfin_data", this.role_bid ); const TC = TipsController.getInstance(); if( TC ) { TC.showSkillTips( sfg.skill ); } }, // 点击技能显示相应的融合升级技能界面 onTouchSkill : function( _index ){ let EC = ElfinController.getInstance(); let chd = this.stages[_index]; let cmp = chd.getComponent( ItemBase ); let scmp = this.skills[_index].getComponent( "cmp.skill.base" ); let sid = 0; let item_bid = 0; if( scmp ){ if( !scmp.mdata ){ return; } if( nx.dt.objGood( scmp.mdata ) ){ nx.tbox( nx.text.getKey( "tip_Assemble_first" ) ); return; } if( !nx.dt.objGood( scmp.mdata ) ){ sid = scmp.mdata; } } if( cmp ){ if( !nx.dt.objGood( cmp.mdata ) ){ item_bid = cmp.mdata; } } if( item_bid == 0 || sid == 0 ){ return; } if( EC ){ let index = parseInt( _index ); let pos = index + 1; EC.openElfinCompoundWindow( true, item_bid, sid, pos, wing, 0, (_data)=>{ if( EC ){ EC.sender26508( _data.item_id, 1, pos ); // this.close(); } } ); } } } );