Files
2026-05-23 22:10:14 +08:00

258 lines
8.6 KiB
JavaScript

/******************************************************************
*
* 联盟活跃
*
******************************************************************/
const BridgeWindow = require( "bridge.window" );
const ItemLayout = require( "cmp.item.layout" );
const GuildEvent = require( "guild_event" );
const GuildController = require( "guild_controller" );
const FID = require( "bridge.function.ids" );
cc.Class( {
extends: BridgeWindow,
properties: {
nodBase: { default: null, type: cc.Node },
nodList: { default: null, type: cc.Node },
nodLvUp: { default: null, type: cc.Node },
nodRewards: { default: null, type: ItemLayout },
},
// 显示
onEnable: function() {
this.ctrl = GuildController.getInstance();
this.model = this.ctrl.getModel();
this.finishs = [];
// 监听
this.bindGEvent( GuildEvent.UpdateMyInfoEvent, this.updateMyInfo.bind( this ) );
this.bindGEvent( GuildEvent.UpdataGuildGoalBasicData, this.updateBase.bind( this ) );
this.bindGEvent( GuildEvent.UpdataGuildGoalTaskData, this.updateTaskList.bind( this ) );
this.bindGEvent( GuildEvent.UpdataGuildGoalSingleTaskData, this.updateTask.bind( this ) );
// 信息请求
this.ctrl.reqActBaseInfo();
this.ctrl.reqActTaskInfo();
},
// 关闭
onDisable: function() {
// 监听解除
this.unbindGEvents();
},
// 联盟信息更新
updateMyInfo: function( _key, _val ) {
console.log( "updateMyInfo:", _key, _val );
if( _key == "vitality" ) {
nx.gui.setString( this.nodBase, "vitality/txt", _val );
}
},
// 活跃信息更新
updateBase: function( _data ) {
// 工会活跃等级
let gifo = this.model.getMyGuildInfo();
nx.gui.setString( this.nodBase, "vitality/txt", gifo.vitality );
// 个人活跃等级
let txt = nx.text.format( "LvNumber", _data.lev );
nx.gui.setString( this.nodBase, "level/txt", txt );
nx.gui.setString( this.nodBase, "today/txt", _data.day_exp );
nx.gui.setString( this.nodBase, "week/txt", _data.week_exp );
// 进度
let DATA = game.configs.guild_quest_data.data_lev_data;
let prog = nx.gui.getComponent( this.nodBase, "prog", cc.ProgressBar );
let self = this;
let attrs = function( _fat, _tat ) {
for( let i = 0; i < 2; ++i ) {
let node = nx.gui.find( self.nodBase, "props/p" + ( i + 1 ) );
let from = _fat[ i ];
if( nx.dt.arrEmpty( from ) ) {
node.active = false;
continue;
}
node.active = true;
nx.bridge.attrs.setAttribute( nx.gui.find( node, "from" ), from );
if( _tat ){
let to = _tat[ i ];
if( nx.dt.arrEmpty( to ) ) {
nx.gui.setActive( node, "arrow", false );
nx.gui.setActive( node, "to", false );
continue;
}
nx.gui.setActive( node, "arrow", true );
nx.gui.setActive( node, "to", true );
nx.bridge.attrs.setAttribute( nx.gui.find( node, "to" ), to );
}
}
};
if( ( _data.lev + 1 ) >= game.configs.guild_quest_data.data_lev_data_length ) {
prog.progress = 1;
attrs( DATA[ _data.lev ].attr );
nx.gui.setActive( this.nodLvUp, "", false );
}
else {
prog.progress = Math.floor( _data.exp / DATA[ _data.lev ].exp * 100 ) / 100;
attrs( DATA[ _data.lev ].attr, DATA[ _data.lev + 1 ].attr );
if( _data.exp >= DATA[ _data.lev ].exp ) {
nx.gui.setActive( this.nodLvUp, "", true );
this.nodRewards.rebuild( DATA[ _data.lev + 1 ].items );
} else {
nx.gui.setActive( this.nodLvUp, "", false );
}
}
},
// 活跃任务列表更新
updateTaskList: function( _data ) {
let DATA = game.configs.guild_quest_data.data_task_data;
let tasks = [];
for( let i in _data.list ) {
let tk = nx.dt.objClone( _data.list[ i ] );
for( let k in DATA ) {
let cfg = DATA[ k ];
if( cfg && cfg.id == tk.id ) {
tk.cfgs = cfg;
tasks.push( tk );
if( parseInt( tk.cfgs.show_jump ) == FID.GuildDonate && !nx.dt.arrMember( this.finishs, parseInt( tk.cfgs.show_jump ) ) && tk.finish == 2 ){
this.finishs.push( FID.GuildDonate );
}
}
}
}
tasks.sort( ( _a, _b ) => {
return _a.finish - _b.finish;
} );
let self = this;
// 任务设置
let setask = function( _node, _task ) {
_node.task = _task;
// 日常/周长
nx.gui.setActive( _node, "type/day", _task.cfgs.type == 1 );
nx.gui.setActive( _node, "type/week", _task.cfgs.type == 2 );
// 信息
nx.gui.setString( _node, "name", nx.text.getKey( _task.cfgs.name ) );
nx.gui.setString( _node, "exp/txt", "+" + _task.cfgs.exp );
// 进度
let txt = _task.value + "/" + _task.target_val;
nx.gui.setString( _node, "progress/txt", txt );
// 操作
nx.gui.setActive( _node, "ops/done", _task.finish == 2 );
nx.gui.setActive( _node, "ops/goto", _task.finish == 0 );
let btn = nx.gui.getComponent( _node, "ops/goto", cc.Button );
btn.interactable = !nx.dt.arrMember( self.finishs, parseInt( _task.cfgs.show_jump ) ) && _task.finish == 0;
nx.gui.setOutlineColor( _node, "ops/goto/txt", !nx.dt.arrMember( self.finishs, parseInt( _task.cfgs.show_jump ) ) && _task.finish == 0 ?
new cc.color( "#236491" ) : cc.Color.BLACK );
};
let chds = this.nodList.children;
nx.gui.gocChildren( this.nodList, "", tasks.length, chds[ 0 ] );
for( let i = 0; i < tasks.length; ++i ) {
setask( chds[ i ], tasks[ i ] );
}
},
// 活跃单任务更新
updateTask: function( _data ) {
if( !_data || nx.dt.arrEmpty( _data.list ) ) {
return;
}
let chds = this.nodList.children;
for( let i = 0; i < _data.list.length; ++i ) {
let info = _data.list[ i ];
let idsss = parseInt( game.configs.guild_quest_data.data_task_data[info.id].show_jump );
if( idsss == FID.GuildDonate ){
if( !nx.dt.arrMember( this.finishs, idsss ) ){
this.finishs.push( FID.GuildDonate );
}
}
for( let k = 0; k < chds[ k ]; ++k ) {
let node = chds[ k ];
if( node && node.task && node.task.id == info.id ) {
node.task.finish = info.finish;
node.task.target_val = info.target_val;
node.task.value = info.value;
// 进度
let txt = info.value + "/" + info.target_val;
nx.gui.setString( node, "progress/txt", txt );
// 操作
nx.gui.setActive( node, "ops/done", info.finish == 2 );
nx.gui.setActive( node, "ops/goto", info.finish == 0 );
let btn = nx.gui.getComponent( node, "ops/goto", cc.Button );
btn.interactable = !nx.dt.arrMember( this.finishs, parseInt( node.task.cfgs.show_jump ) ) && node.task.finish == 0;
nx.gui.setOutlineColor( node, "ops/goto/txt", !nx.dt.arrMember( this.finishs, parseInt( node.task.cfgs.show_jump ) ) && node.task.finish == 0 ?
new cc.color( "#236491" ) : cc.Color.BLACK );
break;
}
}
}
},
// 点击前往
onTouchGoto: function( _btn ) {
let task = _btn.parent.parent.task;
if( task && task.cfgs ) {
let ret = nx.bridge.jumper.jump2Window( task.cfgs.show_jump );
// if( ret ) {
nx.bridge.closePanel( "WndGuildActive" );
// }
}
},
// 点击领取
onTouchGet: function() {
this.ctrl.reqActLevelUp( ( _ret, _data ) => {
if( !_ret ) {
nx.tbox( _data );
return;
}
} );
},
} );