/****************************************************************** * * 成就界面 * ******************************************************************/ 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" ); }, } );