"use strict"; cc._RF.push(module, '88239rUpa5E74QE1QVobUFr', 'library.mod'); // Scripts/mod/home/library/library.mod.js "use strict"; /****************************************************************** * * 图书馆模块 * ******************************************************************/ var BridgeController = require("bridge.controller"); var LibraryModel = cc.Class({ "extends": BridgeController, // 注册协议接受事件 registerProtocals: function registerProtocals() { this.RegisterProtocal(11021, this.handle11021.bind(this)); // 图书馆信息 this.RegisterProtocal(11022, this.handle11022.bind(this)); // 领取奖励 this.RegisterProtocal(11023, this.handle11023.bind(this)); // 更新推送 }, // 从服务器初始化数据 reqBaseFromServer: function reqBaseFromServer(_cb) { var _this = this; // 配置加载 var cfgs = ["gallery_data"]; this.loadConfigs(cfgs, function (_ret, _data) { _this.parseConfigs(); _this.buildTipsView(); _this.reqBaseData(_cb); }); }, // 请求图书馆信息 reqBaseData: function reqBaseData(_cb) { this.SendProtocal(11021, {}, _cb); }, // 图书馆信息 handle11021: function handle11021(_data) { if (!_data || nx.dt.arrEmpty(_data.partner_library)) { return; } // 遍历更新奖励状态 for (var i = 0; i < _data.partner_library.length; ++i) { var data = _data.partner_library[i]; var group = this.groups[data.group]; if (!group) { nx.error("\u56FE\u9274\u7EC4" + data.group + "\u7F3A\u5931!"); continue; } group.statu = data.statu; for (var p = 0; p < group.partners.length; ++p) { var partner = group.partners[p]; var st = 0; for (var idx in data.partner_collect) { var tp = data.partner_collect[idx]; if (tp.partner_bid == partner.id) { st = tp.statu; break; } } partner.statu = st; } } // 刷新全提示 this.freshTipsView(); }, // 领取单收集奖励 reqPartnerReward: function reqPartnerReward(_pid, _cb) { this.SendProtocal(11022, { id: _pid, type: 0 }, _cb); }, // 领取全收集奖励 reqGroupReward: function reqGroupReward(_gid, _cb) { this.SendProtocal(11022, { id: _gid, type: 1 }, _cb); }, // 领取奖励结果 handle11022: function handle11022(_data) {}, // 更新推送 handle11023: function handle11023(_data) { if (!_data || nx.dt.arrEmpty(_data.library_info)) { return; } for (var i = 0; i < _data.library_info.length; ++i) { var ifo = _data.library_info[i]; var group = this.groups[ifo.group_id]; if (!group) { nx.error("\u56FE\u9274\u7EC4\u66F4\u65B0\u63A8\u9001:\u7EC4" + ifo.group_id + "\u7F3A\u5931!"); continue; } var tag = "" + Math.floor(parseInt(ifo.group_id) / 1000); var key = "home.library.tag" + tag + "." + ifo.group_id; // 大奖更新 if (!nx.dt.numPositive(ifo.partner_bid, false)) { group.statu = ifo.statu; nx.mTip.openTip(key + ".reward", group.statu == 1); continue; } // 小奖更新 var ok = false; for (var idx in group.partners) { var pt = group.partners[idx]; if (pt && pt.id == ifo.partner_bid) { pt.statu = ifo.statu; nx.mTip.openTip(key + "." + pt.id, pt.statu == 1); ok = true; break; } } if (!ok) { nx.error("\u56FE\u9274\u7EC4\u66F4\u65B0\u63A8\u9001:\u89D2\u8272" + ifo.partner_bid + "\u7F3A\u5931!"); } } }, // 查询指定角色 queryPartner: function queryPartner(_bid) { for (var id in this.groups) { var lst = this.groups[id].partners; for (var i = 0; i < lst.length; ++i) { var pt = lst[i]; if (pt && pt.id == _bid) { return pt; } } } }, // 是否收集到指定角色 havePartner: function havePartner(_bid) { var partner = this.queryPartner(_bid); return partner ? partner.statu != 0 : false; }, // ============================================================ // 配置相关 // ============================================================ // 配置解析 parseConfigs: function parseConfigs() { var DATA = game.configs.gallery_data; if (nx.dt.objEmpty(DATA)) { nx.error("图书馆配置缺失!"); return; } this.tags = {}; this.groups = {}; // 小组统计 var self = this; var degroup = function degroup(_tag, _data) { // 世界观 if (_tag == "6") { var tmp = DATA.data_world_outlook_data[_data.id]; self.groups["" + _data.id] = { tag: _tag, id: _data.id, name: _data.label_name, content: tmp.content, photo: tmp.pic }; return; } // 普通 var rew = DATA.data_group_reward_data[_data.id]; self.groups["" + _data.id] = { tag: _tag, id: _data.id, name: _data.label_name, reward: rew.reward, reward_bg: rew.bg, reward_desc: rew.desc, partners: [], statu: 0 // 0-未获得, 1-已获得, 2-已领取 }; }; // 大类统计 for (var id in DATA.data_label_data) { var ifo = DATA.data_label_data[id]; var tag = "" + Math.floor(parseInt(id) / 1000); if (nx.dt.objEmpty(this.tags[tag])) { this.tags[tag] = { name: ifo.big_label_name, subs: [] }; } this.tags[tag].subs.push({ tag: tag, id: id, name: ifo.label_name }); degroup(tag, ifo); } // 角色归类 var partners = DATA.data_partner_data; for (var _id in partners) { var _ifo = nx.dt.objClone(partners[_id]); _ifo.statu = 0; // 0-未集齐, 1-已集齐, 2-已领取 this.groups[_ifo.group].partners.push(_ifo); } }, // 获取指定伙伴所在推荐阵容 queryRecommondForms: function queryRecommondForms(_bid) { var DATA = game.configs.gallery_data; if (nx.dt.objEmpty(DATA) || nx.dt.objEmpty(DATA.data_recommond)) { nx.error("推荐阵容配置缺失!"); return []; } var forms = []; for (var id in DATA.data_recommond) { var form = DATA.data_recommond[id]; if (form && nx.dt.arrMember(form.camp, _bid)) { forms.push(form); } } return forms; }, // ============================================================ // 红点提示 // ============================================================ // 组建红点结构 buildTipsView: function buildTipsView() { var _this2 = this; var self = this; var tree = { key: "home.library", sub: {} }; // 大类.小类.角色id var _loop = function _loop() { var tmp = { key: tree.key + "." + ("tag" + tag), sub: {} }; _this2.tags[tag].subs.forEach(function (_t) { var stmp = { key: tmp.key + "." + _t.id, sub: { reward: { key: tmp.key + "." + _t.id + ".reward" } } }; var group = self.groups[_t.id]; if (group && nx.dt.arrNEmpty(group.partners)) { group.partners.forEach(function (_p) { stmp.sub["" + _p.id] = { key: stmp.key + "." + _p.id }; }); } tmp.sub[_t.id] = stmp; }); tree.sub["tag" + tag] = tmp; }; for (var tag in this.tags) { _loop(); } // 提示结构重构 nx.mTip.subAppend("home", "library", tree); return tree; }, // 刷新全提示 freshTipsView: function freshTipsView() { var fresh = function fresh(_group) { // 总奖励 var key = "home.library.tag" + _group.tag + "." + _group.id; nx.mTip.openTip(key + ".reward", _group.statu == 1); // 子奖励 if (nx.dt.arrNEmpty(_group.partners)) { for (var i = 0; i < _group.partners.length; ++i) { var partner = _group.partners[i]; var k2 = key + "." + partner.id; nx.mTip.openTip(k2, partner.statu == 1); } } }; for (var id in this.groups) { fresh(this.groups[id]); } } }); module.exports = LibraryModel; cc._RF.pop();