327 lines
8.8 KiB
JavaScript
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();
|