Files
fc/dev/project/library/imports/83/834c6b0a-3cae-42aa-870a-94b2dc4a66a5.js
T
2026-05-24 10:21:26 +08:00

327 lines
8.8 KiB
JavaScript

"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();