"use strict"; cc._RF.push(module, '834c6sKPK5CqocKlLLcSmal', 'cmp.achievement.wnd'); // Scripts/mod/home/achievement/cmp.achievement.wnd.js "use strict"; /****************************************************************** * * 成就界面 * ******************************************************************/ var BridgeWindow = require("bridge.window"); var FxSVC = require("nx.fx.sv.expand"); var TaskConst = require("task_const"); var TaskEvent = require("task_event"); var TaskController = require("task.mod"); // 任务状态 var 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 onEnable() { // 模板初始化 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 onDisable() { // 事件监听释放 this.unbindGEvents(); }, // 重载:关闭前 onPreClosed: function onPreClosed() { this.svcList.rebuild([]); }, // 字典重建 buildDict: function buildDict() { var 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 buildMenu(_menu, _data) { nx.gui.gocChildren(_menu, "", _data.length, this.menuT); for (var i = 0; i < _data.length; ++i) { var node = _menu.children[i]; var data = _data[i]; var 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 buildSubMenu(_menu, _data) { var root = nx.gui.find(_menu, "list"); var chds = root.children; if (chds.length != _data.elements.length) { nx.gui.gocChildren(root, "", _data.elements.length, chds[0]); } for (var i = 0; i < chds.length; ++i) { var sub = chds[i]; var 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); var name = nx.text.getKey(ifo.name); nx.gui.setString(sub, "on/txt", name); nx.gui.setString(sub, "off/txt", name); } // 红点更新 this.updateRedDots(); }, // 点击一级菜单 onTouchMenu: function onTouchMenu(_item) { // 无效菜单 var data = _item.data || _item.parent.parent.data; if (!data) { return; } this.mainKey = data.name; this.subKey = ""; // 菜单选择 var self = this; var focus = function focus(_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); }; var chds = this.nodMenu.children; for (var i = 0; i < chds.length; ++i) { var node = chds[i]; focus(node, node.data.name == data.name, data); } }, // 点击二级菜单 onTouchSubMenu: function onTouchSubMenu(_item) { // 无效菜单 var subMenu = _item ? _item.parent : null; var root = subMenu ? subMenu.root : null; var data = subMenu ? subMenu.data : null; if (!root || !data) { return; } // 菜单选择 var focus = function focus(_node, _on) { nx.gui.setActive(_node, "on", _on); nx.gui.setActive(_node, "off", !_on); }; var chds = root.children; for (var i = 0; i < chds.length; ++i) { var node = chds[i]; focus(node, node.data.name == data.name, data); } this.subKey = data.name; this.freshList(data); }, // 刷新成就列表 freshList: function freshList(_data) { // 空 if (nx.dt.objEmpty(_data)) { this.data = []; this.svcList.rebuild([]); nx.gui.setActive(this.svcList, "empty", true); return; } // 成就统计 var records = []; var concat = function concat(_item) { if (_item.deep == 1) { for (var 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 = []; var TM = TaskController.getInstance().getModel(); for (var i in records) { var rec = records[i]; var 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 onUpdateAchievements(_data) { // 积分更新 this.updateScore(); // 红点更新 this.updateRedDots(); // 成就会新增,这里直接刷新 var current = null; for (var i in this.dict) { var dt = this.dict[i]; if (!dt || dt.name != this.mainKey) { continue; } current = dt; if (nx.dt.strEmpty(this.subKey)) { break; } for (var k in dt.elements) { var dt2 = dt.elements[k]; if (!dt2 || dt2.name != this.subKey) { continue; } current = dt2; } } if (current) { this.freshList(current); } }, // 积分更新 updateScore: function updateScore() { var TM = TaskController.getInstance().getModel(); var cur = TM.achievement_score || 0; var 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)); // 进度 var 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 onTouchOverviewReward() { var _this = this; var TC = TaskController.getInstance(); TC.reqOverviewReward(function (_ret, _data) { if (!_ret) { nx.tbox(_data); return; } _this.updateScore(); }); }, // 红点更新 updateRedDots: function updateRedDots() { var FLAGS = {}; var TM = TaskController.getInstance().getModel(); var list = TM.getAchievements(); for (var i = 0; i < list.length; ++i) { var tk = list[i]; if (tk && tk.finish == TST.finish && tk.config) { var k1 = tk.config.first_label; var k2 = tk.config.name; FLAGS[k1] = 1; FLAGS[k1 + k2] = 1; } } for (var _i = 0; _i < this.dict.length; ++_i) { var menu = this.dict[_i]; if (!menu) { continue; } nx.gui.setActive(menu.ui.node, "head/off/tip", !!FLAGS[menu.name]); for (var k = 0; k < menu.elements.length; ++k) { var 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 onTouchOpenRewardPreviewWindow() { nx.bridge.createPanel("WndAchievementRewards"); } }); cc._RF.pop();