Files
fc/dev/project/assets/Scripts/mod/partner/cmps/bag/cmp.wings.page.js
T

645 lines
20 KiB
JavaScript
Raw Normal View History

2026-05-23 22:10:14 +08:00
/******************************************************************
*
* 僚机背包页
*
******************************************************************/
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();
}
} );
}
}
} );