Files
fc/dev/project/assets/Scripts/mod/pve/dungeon/cmp/cmp.dungeon.wnd.js
T
2026-05-23 22:10:14 +08:00

324 lines
10 KiB
JavaScript

/******************************************************************
*
* 行星武器奖励弹窗
*
******************************************************************/
const BridgeWindow = require( "bridge.window" );
const PathTool = require( "pathtool" );
const ItemExpand = require( "nx.fx.sv.expand" );
const StoneDungeonController = require( "stone_dungeon_controller" );
const StoneDungeonEvent = require( "stone_dungeon_event" );
const RoleController = require( "role_controller" );
const TipsController = require( "tips_controller" );
const NxSpine = require("nx.fx.spine");
cc.Class( {
extends: BridgeWindow,
properties: {
list: {
default: null,
type: ItemExpand
},
tab_list: {
default: null,
type: ItemExpand
},
textCount: {
default: null,
type: cc.RichText
},
nodClear: {
default:null,
type:cc.Node
},
roleSp:{
default: null,
type: NxSpine
}
},
onLoad() {
this.ctrl = StoneDungeonController.getInstance();
this.model = this.ctrl.getModel();
this.role_vo = RoleController.getInstance().getRoleVo();
this.first_come_in = true
this.cur_index = 1
// this.tab_list = []
this.bindGEvent( StoneDungeonEvent.Update_StoneDungeon_Data, this.updateDungeonData.bind( this ) );
},
updateDungeonData() {
this.changeDungeonData( this.cur_index, 1 );
this.first_come_in = false;
this.redPointStatus();
},
// 重载:参数打开
onOpenConfigs: function(params) {
let tab_index = params.index || 0;
this.ctrl.send13030();
var list = game.configs.dungeon_stone_data.data_const.dungeon_type.val
var tab = [];
for( var i = 0; i < list.length; i++ ) {
tab.push( { id: list[ i ] } );
}
this.tab_list.rebuild( tab );
this.tab_list.addFocus( tab_index );
this.setTipStatus();
let eff_path = PathTool.getSpinePath("H30051","show",false);
this.roleSp.load(eff_path,(e)=>{
if(!e){
this.roleSp.action("action1",true);
}else{
this.roleSp.stop();
}
});
},
setTipStatus(){
},
onPreClosed: function() {
this.list.rebuild( [] );
this.tab_list.rebuild( [] );
},
onFocusTabItem( _item ) {
// 空
if( nx.dt.objEmpty( _item ) ||
nx.dt.objEmpty( _item.mdata ) ) {
return;
}
if( this.cur_index == _item.mdata.id ) return;
// 聚焦
this.tab_list.cleanFocus();
this.tab_list.addFocus( _item.index );
// this.model.setCurChangeSweep( _item.mdata.id );
this.cur_index = _item.mdata.id;
this.changeDungeonData( _item.mdata.id )
},
// 红点
redPointStatus: function() {
for(let i=1;i<=5;i++){
let index = i;
var change_count = this.model.getChangeSweepCount( index );
if( change_count >= 2 ) {
let key = cc.js.formatStr("pve.dungeon.%s",index);
nx.mTip.openTip(key,false);
} else {
let key = cc.js.formatStr("pve.dungeon.%s",index);
nx.mTip.openTip(key,true);
}
}
},
updateClearStatus: function(data){
let is_clear = false;
for( var i in data ) {
var clearance = this.model.getPassClearanceID( data[ i ].id );
if( this.role_vo.max_power >= data[ i ].power ) {
if( clearance && clearance.status == 1 ) {
is_clear = true;
}
}
}
nx.gui.setActive( this.nodClear, "on", is_clear );
nx.gui.setActive( this.nodClear, "off", !is_clear );
},
changeDungeonData: function( index, flag ) {
this.unscheduleAllCallbacks();
index = game.configs.dungeon_stone_data.data_type_open[ index ].id || 1;
var change_count = this.model.getChangeSweepCount( index );
var str = "";
var free_count = 1; //1:还有次数
if( change_count >= 2 ) {
free_count = 0;
if( change_count >= game.configs.dungeon_stone_data.data_buy[ index ].length ) {
str = cc.js.formatStr( nx.text.getKey( "lab_stone_dungeon_window_tip1" ) )
} else {
var vip_count = 1;
let cost = 0;
for( var i in game.configs.dungeon_stone_data.data_buy[ index ] ) {
if( game.configs.dungeon_stone_data.data_buy[ index ][ i ].vip <= this.role_vo.vip_lev ) {
vip_count = i;
cost = game.configs.dungeon_stone_data.data_buy[ index ][ i ].cost;
}
}
var remain_num = vip_count - change_count;
if( remain_num <= 0 ) {
remain_num = 0
}
this.remian_num = remain_num;
str = cc.js.formatStr( nx.text.getKey( "lab_stone_dungeon_window_tip2" ), remain_num, cost )
}
let key = cc.js.formatStr("pve.dungeon.%s",index);
nx.mTip.openTip(key,false);
} else {
this.remian_num = game.configs.dungeon_stone_data.data_const.free_num.val - change_count;
str = cc.js.formatStr( nx.text.getKey( "lab_stone_dungeon_window_tip3" ), game.configs.dungeon_stone_data.data_const.free_num.val - change_count )
let key = cc.js.formatStr("pve.dungeon.%s",index);
nx.mTip.openTip(key,true);
}
this.textCount.string = str;
var data_info = [];
for( var i in game.configs.dungeon_stone_data.data_award_list ) {
for( var m in game.configs.dungeon_stone_data.data_award_list[ i ] ) {
if( game.configs.dungeon_stone_data.data_award_list[ i ][ m ].dun_type == index ) {
data_info.push( game.configs.dungeon_stone_data.data_award_list[ i ][ m ] );
}
}
}
data_info.sort( function( a, b ) {
return a.id - b.id;
} );
var title_pos = this.getPoerTitle( data_info )
change_count = change_count + 1;
var temp_arr = Object.keys( game.configs.dungeon_stone_data.data_buy[ index ] );
if( change_count >= temp_arr.length ) {
change_count = temp_arr.length;
}
var tab = {
title_pos: title_pos, //推荐位置
count: free_count, //免费次数
expend: game.configs.dungeon_stone_data.data_buy[ index ][ change_count ].cost, //消耗钻石
}
let go = 0;
let list = [];
for( let j in data_info ) {
let data = {};
data.info = data_info[ j ];
data.tab = tab;
list.push( data );
if( data.info.difficulty == data.tab.title_pos ){
go = parseInt(( data.info.id - 1 ) % 100 )
}
}
this.list.freshRange( 0, true );
this.list.rebuild( list );
this.updateClearStatus(data_info);//更新一下扫荡状态
let cmp = nx.gui.getComponent( this.list.node, "scoreView", cc.ScrollView );
if( cmp ) {
cmp.scrollToTop( 0.0001 );
let posp = cc.v2( 0, ( go ) * 150 );
// cmp.setContentPosition( posp );
cmp.scrollToOffset( posp, 0.02 );
} // scrollTo
// if( this.vip < 5 ){
// 引导辅助
if( nx.bridge.plot && nx.bridge.plot.isDoing() ) {
this.positionPlotCells();
}
},
// 获取推荐角标
getPoerTitle: function( data ) {
var num = -1;
var totle = data.length;
for( var i in data ) {
var clearance = this.model.getPassClearanceID( data[ i ].id );
if( this.role_vo.max_power >= data[ i ].power ) {
if( clearance && clearance.status == 1 ) {
num = parseInt( i );
}
}
}
if( num + 1 >= totle ) {
num = totle;
} else {
for( var i in data ) {
if( this.role_vo.max_power >= data[ i ].power ) {
num = parseInt( i ) + 1;
}
}
// if( data[ num + 1 ] && this.role_vo.max_power >= data[ num + 1 ].power && this.role_vo.lev >= data[ num + 1 ].lev_limit ) {
// num = num + 2;
// } else {
// return num + 1;
// }
}
return num;
},
// 规则说明
onTouchTip: function() {
let TC = TipsController.getInstance();
if( TC ) {
let txt = game.configs.dungeon_stone_data.data_const.desc_rule;
TC.showTextPanel( "tip", txt.desc );
}
},
onClickAllClear() {
if(this.model.getCurChangeSweep() == null ) return;
if( this.remain_num < 1 ) {
return nx.tbox( "lab_stone_dungeon_window_tip1" );
}
this.ctrl.send13032( this.model.getCurChangeSweep(), this.remian_num );
},
// ============================================
// 引导辅助
// ============================================
// 定位副本輔助热区
positionPlotCells: function() {
let children = this.list.bindSCV.content.children;
let node = children[ 0 ];
if( !node ) {
nx.error( "$Dispatch:定位第一个派遣订单失败!" );
node = children[ 0 ];
if( !node ) {
return;
}
}
let cell = nx.gui.find( this, "plotCell" );
let btn = node.svItem.btnChange;
let pos = btn.convertToWorldSpaceAR( cc.Vec2.ZERO );
cell.position = cell.parent.convertToNodeSpaceAR( pos );
cell.width = btn.width;
cell.height = btn.height;
cell.svItem = node.svItem;
},
// 点击金币副本第一关挑战
onTouchFirstGolden: function() {
let cell = nx.gui.find( this, "plotCell" );
if( cell && cell.svItem ) {
cell.svItem.onClickChange();
}
},
} );