368 lines
9.8 KiB
JavaScript
368 lines
9.8 KiB
JavaScript
|
|
/******************************************************************
|
||
|
|
*
|
||
|
|
* 成就界面
|
||
|
|
*
|
||
|
|
******************************************************************/
|
||
|
|
|
||
|
|
const BridgeWindow = require( "bridge.window" );
|
||
|
|
const FxSVC = require( "nx.fx.sv.expand" );
|
||
|
|
const TaskConst = require( "task_const" );
|
||
|
|
const TaskEvent = require( "task_event" );
|
||
|
|
const TaskController = require( "task.mod" );
|
||
|
|
|
||
|
|
// 任务状态
|
||
|
|
const TST = TaskConst.task_status;
|
||
|
|
|
||
|
|
cc.Class( {
|
||
|
|
|
||
|
|
extends: BridgeWindow,
|
||
|
|
|
||
|
|
properties: {
|
||
|
|
|
||
|
|
nodMenu: { default: null, type: cc.Node },
|
||
|
|
nodOverview: { default: null, type: cc.Node },
|
||
|
|
svcList: { default: null, type: FxSVC },
|
||
|
|
|
||
|
|
},
|
||
|
|
|
||
|
|
// 显示
|
||
|
|
onEnable: function() {
|
||
|
|
|
||
|
|
// 模板初始化
|
||
|
|
this.menuT = nx.gui.find( this, "templates/menuT" );
|
||
|
|
if( this.menuT ) {
|
||
|
|
nx.gui.setActive( this.menuT, "list", false );
|
||
|
|
nx.gui.setActive( this.menuT, "head/on", false );
|
||
|
|
nx.gui.setActive( this.menuT, "head/off", true );
|
||
|
|
nx.gui.setActive( this.menuT, "head/off/tip", false );
|
||
|
|
nx.gui.setActive( this.menuT, "list/sub/on", false );
|
||
|
|
nx.gui.setActive( this.menuT, "list/sub/off", true );
|
||
|
|
}
|
||
|
|
|
||
|
|
// 字典重建
|
||
|
|
this.buildDict();
|
||
|
|
|
||
|
|
// 事件监听
|
||
|
|
this.bindGEvent( TaskEvent.UpdateFeatList, this.onUpdateAchievements.bind( this ) );
|
||
|
|
|
||
|
|
// 积分更新
|
||
|
|
this.updateScore();
|
||
|
|
},
|
||
|
|
|
||
|
|
// 关闭
|
||
|
|
onDisable: function() {
|
||
|
|
|
||
|
|
// 事件监听释放
|
||
|
|
this.unbindGEvents();
|
||
|
|
},
|
||
|
|
|
||
|
|
// 重载:关闭前
|
||
|
|
onPreClosed: function() {
|
||
|
|
this.svcList.rebuild( [] );
|
||
|
|
},
|
||
|
|
|
||
|
|
// 字典重建
|
||
|
|
buildDict: function() {
|
||
|
|
|
||
|
|
const TC = TaskController.getInstance();
|
||
|
|
this.dict = TC.getModel().getAchievementDict();
|
||
|
|
|
||
|
|
if( nx.dt.arrEmpty( this.dict ) ) {
|
||
|
|
this.nodMenu.removeAllChildren();
|
||
|
|
this.svcList.rebuild( [] );
|
||
|
|
nx.gui.setActive( this.svcList, "empty", true );
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 一级菜单列表重建
|
||
|
|
this.buildMenu( this.nodMenu, this.dict );
|
||
|
|
|
||
|
|
// 默认选择
|
||
|
|
this.onTouchMenu( { data: this.dict[ 0 ] } );
|
||
|
|
|
||
|
|
},
|
||
|
|
|
||
|
|
// 创建一级菜单
|
||
|
|
buildMenu: function( _menu, _data ) {
|
||
|
|
|
||
|
|
nx.gui.gocChildren( _menu, "", _data.length, this.menuT );
|
||
|
|
for( let i = 0; i < _data.length; ++i ) {
|
||
|
|
|
||
|
|
let node = _menu.children[ i ];
|
||
|
|
let data = _data[ i ];
|
||
|
|
|
||
|
|
let name = nx.text.getKey( data.name );
|
||
|
|
nx.gui.setString( node, "head/on/txt", name );
|
||
|
|
nx.gui.setString( node, "head/off/txt", name );
|
||
|
|
|
||
|
|
data.ui = { node: node };
|
||
|
|
node.data = data;
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// 创建二级菜单
|
||
|
|
buildSubMenu: function( _menu, _data ) {
|
||
|
|
|
||
|
|
let root = nx.gui.find( _menu, "list" );
|
||
|
|
let chds = root.children;
|
||
|
|
if( chds.length != _data.elements.length ) {
|
||
|
|
nx.gui.gocChildren( root, "", _data.elements.length, chds[ 0 ] );
|
||
|
|
}
|
||
|
|
|
||
|
|
for( let i = 0; i < chds.length; ++i ) {
|
||
|
|
|
||
|
|
let sub = chds[ i ];
|
||
|
|
let ifo = _data.elements[ i ];
|
||
|
|
ifo.ui = { node: root, sub: sub };
|
||
|
|
|
||
|
|
sub.data = ifo;
|
||
|
|
sub.root = root;
|
||
|
|
nx.gui.setActive( sub, "on", false );
|
||
|
|
nx.gui.setActive( sub, "off", true );
|
||
|
|
|
||
|
|
let name = nx.text.getKey( ifo.name );
|
||
|
|
nx.gui.setString( sub, "on/txt", name );
|
||
|
|
nx.gui.setString( sub, "off/txt", name );
|
||
|
|
}
|
||
|
|
|
||
|
|
// 红点更新
|
||
|
|
this.updateRedDots();
|
||
|
|
|
||
|
|
},
|
||
|
|
|
||
|
|
// 点击一级菜单
|
||
|
|
onTouchMenu: function( _item ) {
|
||
|
|
|
||
|
|
// 无效菜单
|
||
|
|
let data = _item.data || _item.parent.parent.data;
|
||
|
|
if( !data ) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
this.mainKey = data.name;
|
||
|
|
this.subKey = "";
|
||
|
|
|
||
|
|
// 菜单选择
|
||
|
|
let self = this;
|
||
|
|
let focus = function( _menu, _on, _data ) {
|
||
|
|
|
||
|
|
nx.gui.setActive( _menu, "head/on", _on );
|
||
|
|
nx.gui.setActive( _menu, "head/off", !_on );
|
||
|
|
nx.gui.setActive( _menu, "list", _on );
|
||
|
|
|
||
|
|
if( !_on ) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 子菜单展开
|
||
|
|
self.buildSubMenu( _menu, _data );
|
||
|
|
|
||
|
|
// 刷新成就列表
|
||
|
|
self.freshList( _data )
|
||
|
|
};
|
||
|
|
|
||
|
|
let chds = this.nodMenu.children;
|
||
|
|
for( let i = 0; i < chds.length; ++i ) {
|
||
|
|
let node = chds[ i ];
|
||
|
|
focus( node, ( node.data.name == data.name ), data );
|
||
|
|
}
|
||
|
|
|
||
|
|
},
|
||
|
|
|
||
|
|
// 点击二级菜单
|
||
|
|
onTouchSubMenu: function( _item ) {
|
||
|
|
|
||
|
|
// 无效菜单
|
||
|
|
let subMenu = _item ? _item.parent : null;
|
||
|
|
let root = subMenu ? subMenu.root : null;
|
||
|
|
let data = subMenu ? subMenu.data : null;
|
||
|
|
if( !root || !data ) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 菜单选择
|
||
|
|
let focus = function( _node, _on ) {
|
||
|
|
nx.gui.setActive( _node, "on", _on );
|
||
|
|
nx.gui.setActive( _node, "off", !_on );
|
||
|
|
};
|
||
|
|
|
||
|
|
let chds = root.children;
|
||
|
|
for( let i = 0; i < chds.length; ++i ) {
|
||
|
|
let node = chds[ i ];
|
||
|
|
focus( node, ( node.data.name == data.name ), data );
|
||
|
|
}
|
||
|
|
|
||
|
|
this.subKey = data.name;
|
||
|
|
this.freshList( data );
|
||
|
|
|
||
|
|
},
|
||
|
|
|
||
|
|
// 刷新成就列表
|
||
|
|
freshList: function( _data ) {
|
||
|
|
|
||
|
|
|
||
|
|
// 空
|
||
|
|
if( nx.dt.objEmpty( _data ) ) {
|
||
|
|
this.data = [];
|
||
|
|
this.svcList.rebuild( [] );
|
||
|
|
nx.gui.setActive( this.svcList, "empty", true );
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 成就统计
|
||
|
|
let records = [];
|
||
|
|
let concat = function( _item ) {
|
||
|
|
if( _item.deep == 1 ) {
|
||
|
|
for( let i = 0; i < _item.elements.length; ++i ) {
|
||
|
|
concat( _item.elements[ i ] );
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
records = records.concat( _item.elements );
|
||
|
|
}
|
||
|
|
};
|
||
|
|
concat( _data );
|
||
|
|
|
||
|
|
// 筛选
|
||
|
|
// let TM = TaskController.getInstance().getModel();
|
||
|
|
// for( let i in records ) {
|
||
|
|
// let rec = records[ i ];
|
||
|
|
// let task = TM.getAchievementById( rec.id );
|
||
|
|
// rec.task = task;
|
||
|
|
// rec.sortRP = task ? task.finish_sort : 999;
|
||
|
|
// }
|
||
|
|
// records.sort( Utils.tableLowerSorter( [ "sortRP", "id" ] ) );
|
||
|
|
|
||
|
|
// 筛选
|
||
|
|
this.data = [];
|
||
|
|
let TM = TaskController.getInstance().getModel();
|
||
|
|
for( let i in records ) {
|
||
|
|
let rec = records[ i ];
|
||
|
|
let task = TM.getAchievementById( rec.id );
|
||
|
|
if( !task ) { continue; }
|
||
|
|
rec.task = task;
|
||
|
|
rec.sortRP = task.finish_sort;
|
||
|
|
this.data.push( rec );
|
||
|
|
}
|
||
|
|
this.data.sort( Utils.tableLowerSorter( [ "sortRP", "id" ] ) );
|
||
|
|
|
||
|
|
this.svcList.rebuild( this.data );
|
||
|
|
nx.gui.setActive( this.svcList, "empty", nx.dt.arrEmpty( this.data ) );
|
||
|
|
|
||
|
|
},
|
||
|
|
|
||
|
|
// 更新成就的事件
|
||
|
|
onUpdateAchievements: function( _data ) {
|
||
|
|
|
||
|
|
// 积分更新
|
||
|
|
this.updateScore();
|
||
|
|
|
||
|
|
// 红点更新
|
||
|
|
this.updateRedDots();
|
||
|
|
|
||
|
|
// 成就会新增,这里直接刷新
|
||
|
|
let current = null;
|
||
|
|
for( let i in this.dict ) {
|
||
|
|
|
||
|
|
let dt = this.dict[ i ];
|
||
|
|
if( !dt || dt.name != this.mainKey ) {
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
|
||
|
|
current = dt;
|
||
|
|
if( nx.dt.strEmpty( this.subKey ) ) {
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
for( let k in dt.elements ) {
|
||
|
|
let dt2 = dt.elements[ k ];
|
||
|
|
if( !dt2 || dt2.name != this.subKey ) {
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
|
||
|
|
current = dt2;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if( current ) {
|
||
|
|
this.freshList( current );
|
||
|
|
}
|
||
|
|
|
||
|
|
},
|
||
|
|
|
||
|
|
// 积分更新
|
||
|
|
updateScore: function() {
|
||
|
|
|
||
|
|
let TM = TaskController.getInstance().getModel();
|
||
|
|
let cur = TM.achievement_score || 0;
|
||
|
|
let tar = TM.achievement_score_tar || 100;
|
||
|
|
|
||
|
|
// 点数
|
||
|
|
nx.gui.setString( this.nodOverview, "point/cur", cur );
|
||
|
|
nx.gui.setString( this.nodOverview, "point/tar", nx.text.format( "AchivevePoint", tar ) );
|
||
|
|
|
||
|
|
// 进度
|
||
|
|
let prog = nx.gui.getComponent( this.nodOverview, "prog/progress", cc.ProgressBar );
|
||
|
|
prog.progress = Math.min( 1, cur / tar );
|
||
|
|
|
||
|
|
// 操作
|
||
|
|
nx.gui.setActive( this.nodOverview, "ops/once", cur >= tar );
|
||
|
|
|
||
|
|
},
|
||
|
|
|
||
|
|
// 总览奖励领取
|
||
|
|
onTouchOverviewReward: function() {
|
||
|
|
|
||
|
|
let TC = TaskController.getInstance();
|
||
|
|
TC.reqOverviewReward( ( _ret, _data ) => {
|
||
|
|
|
||
|
|
if( !_ret ) {
|
||
|
|
nx.tbox( _data );
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
this.updateScore();
|
||
|
|
} );
|
||
|
|
},
|
||
|
|
|
||
|
|
// 红点更新
|
||
|
|
updateRedDots: function() {
|
||
|
|
|
||
|
|
let FLAGS = {};
|
||
|
|
|
||
|
|
let TM = TaskController.getInstance().getModel();
|
||
|
|
let list = TM.getAchievements();
|
||
|
|
for( let i = 0; i < list.length; ++i ) {
|
||
|
|
let tk = list[ i ];
|
||
|
|
if( tk && tk.finish == TST.finish && tk.config ) {
|
||
|
|
let k1 = tk.config.first_label;
|
||
|
|
let k2 = tk.config.name;
|
||
|
|
FLAGS[ k1 ] = 1;
|
||
|
|
FLAGS[ k1 + k2 ] = 1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
for( let i = 0; i < this.dict.length; ++i ) {
|
||
|
|
|
||
|
|
let menu = this.dict[ i ];
|
||
|
|
if( !menu ) {
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
nx.gui.setActive( menu.ui.node, "head/off/tip", !!FLAGS[ menu.name ] );
|
||
|
|
|
||
|
|
for( let k = 0; k < menu.elements.length; ++k ) {
|
||
|
|
let submenu = menu.elements[ k ];
|
||
|
|
if( submenu.ui && submenu.ui.sub ) {
|
||
|
|
nx.gui.setActive( submenu.ui.sub, "off/tip", !!FLAGS[ menu.name + submenu.name ] );
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
},
|
||
|
|
|
||
|
|
// 点击打开奖励预览
|
||
|
|
onTouchOpenRewardPreviewWindow: function() {
|
||
|
|
nx.bridge.createPanel( "WndAchievementRewards" );
|
||
|
|
},
|
||
|
|
|
||
|
|
} );
|