292 lines
8.3 KiB
JavaScript
292 lines
8.3 KiB
JavaScript
|
|
/******************************************************************
|
||
|
|
*
|
||
|
|
* 同步中心界面
|
||
|
|
*
|
||
|
|
******************************************************************/
|
||
|
|
|
||
|
|
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();
|
||
|
|
},
|
||
|
|
|
||
|
|
} );
|