210 lines
6.7 KiB
JavaScript
210 lines
6.7 KiB
JavaScript
"use strict";
|
|
cc._RF.push(module, '106ecVVHAlFFK55J8Q1kOck', 'halidom_model');
|
|
// Scripts/mod/home/base_kernel/halidom_model.js
|
|
|
|
"use strict";
|
|
|
|
var BridgeClass = require("bridge.class");
|
|
var HalidomConst = require("halidom_const");
|
|
var HeroController = require("hero_controller");
|
|
var HalidomController = require("halidom_controller");
|
|
var RoleController = require("role_controller");
|
|
var HalidomEvent = require("halidom_event");
|
|
var HeroConst = require("hero_const");
|
|
var HalidomModel = cc.Class({
|
|
"extends": BridgeClass,
|
|
ctor: function ctor() {
|
|
this.ctrl = HalidomController.getInstance();
|
|
},
|
|
properties: {},
|
|
initConfig: function initConfig() {
|
|
this.all_halidom_data = [];
|
|
this.halidom_red_list = [];
|
|
},
|
|
// 设置圣物数据
|
|
setAllHalidomData: function setAllHalidomData(data_list) {
|
|
this.all_halidom_data = [];
|
|
for (var k in data_list) {
|
|
var hData = data_list[k];
|
|
var HalidomVo = require('halidom_vo');
|
|
var halidom_vo = new HalidomVo();
|
|
halidom_vo.updateData(hData);
|
|
this.all_halidom_data.push(halidom_vo);
|
|
}
|
|
},
|
|
// 更新某一圣物数据(也可能是新增)
|
|
updateHalidomData: function updateHalidomData(data) {
|
|
var is_have = false;
|
|
for (var k in this.all_halidom_data) {
|
|
var halidom_vo = this.all_halidom_data[k];
|
|
if (halidom_vo.id == data.id) {
|
|
is_have = true;
|
|
halidom_vo.updateData(data);
|
|
break;
|
|
}
|
|
}
|
|
if (!is_have) {
|
|
var HalidomVo = require('halidom_vo');
|
|
var _halidom_vo = new HalidomVo();
|
|
_halidom_vo.updateData(data);
|
|
this.all_halidom_data.push(_halidom_vo);
|
|
}
|
|
return is_have;
|
|
},
|
|
getAllHaildomData: function getAllHaildomData() {
|
|
return this.all_halidom_data;
|
|
},
|
|
// 根据id获取圣物数据
|
|
getHalidomDataById: function getHalidomDataById(id) {
|
|
for (var k in this.all_halidom_data) {
|
|
var halidom_vo = this.all_halidom_data[k];
|
|
if (halidom_vo.id == id) {
|
|
return halidom_vo;
|
|
}
|
|
}
|
|
return {};
|
|
},
|
|
// 根据阵营id获取圣物数据
|
|
getHalidomDataByCampType: function getHalidomDataByCampType(camp_type) {
|
|
for (var k in this.all_halidom_data) {
|
|
var halidom_vo = this.all_halidom_data[k];
|
|
var halidom_cfg = game.configs.halidom_data.data_base[halidom_vo.id];
|
|
if (halidom_cfg && halidom_cfg.camp == camp_type) {
|
|
return halidom_vo;
|
|
}
|
|
}
|
|
},
|
|
// 根据id判断圣物是否解锁
|
|
checkHalidomIsUnlock: function checkHalidomIsUnlock(id) {
|
|
var is_unlock = false;
|
|
for (var k in this.all_halidom_data) {
|
|
var halidom_vo = this.all_halidom_data[k];
|
|
if (halidom_vo.id == id) {
|
|
is_unlock = true;
|
|
break;
|
|
}
|
|
}
|
|
return is_unlock;
|
|
},
|
|
// 获取圣物是否开启
|
|
checkHalidomIsOpen: function checkHalidomIsOpen(not_tips) {
|
|
if (!game.configs.halidom_data) {
|
|
return;
|
|
}
|
|
var role_vo = RoleController.getInstance().getRoleVo();
|
|
if (game.configs.halidom_data) {
|
|
var _limit_lv_cfg = game.configs.halidom_data.data_const["halidom_open_lev"];
|
|
if (_limit_lv_cfg && role_vo && _limit_lv_cfg.val <= role_vo.lev) {
|
|
return true;
|
|
}
|
|
}
|
|
if (!not_tips && limit_lv_cfg) {
|
|
nx.tbox(limit_lv_cfg.desc);
|
|
}
|
|
return false;
|
|
},
|
|
//@ 红点相关
|
|
updateHalidomRedStatus: function updateHalidomRedStatus(bid, status) {
|
|
this.halidom_red_list[bid] = status;
|
|
gcore.GlobalEvent.fire(HalidomEvent.Update_Halidom_Red_Event, bid, status);
|
|
},
|
|
getHalidomRedStatus: function getHalidomRedStatus() {
|
|
var red_status = false;
|
|
for (var bid in this.halidom_red_list) {
|
|
var status = this.halidom_red_list[bid];
|
|
if (status == true) {
|
|
red_status = true;
|
|
break;
|
|
}
|
|
}
|
|
return red_status;
|
|
},
|
|
// 获取圣物红点状态
|
|
getHalidomRedStatusByRedBid: function getHalidomRedStatusByRedBid(bid) {
|
|
return this.halidom_red_list[bid] || false;
|
|
},
|
|
// 计算一下红点数据
|
|
calculateHalidomRedStatus: function calculateHalidomRedStatus() {
|
|
// if( !game.configs.halidom_data ){
|
|
// return;
|
|
// }
|
|
// if (!this.checkHalidomIsOpen(true)) return;
|
|
// for (let k in this.all_halidom_data) {
|
|
// let halidom_vo = this.all_halidom_data[k];
|
|
// halidom_vo.checkHalidomRedStatus();
|
|
// }
|
|
},
|
|
checkHalidomRedStatus: function checkHalidomRedStatus() {
|
|
if (!this.checkHalidomIsOpen(true)) return;
|
|
if (!game.configs.halidom_data) {
|
|
return;
|
|
}
|
|
//是否有可以解锁的圣物
|
|
var unlock_red_status = false;
|
|
for (var k in game.configs.halidom_data.data_base) {
|
|
var v = game.configs.halidom_data.data_base[k];
|
|
if (this.checkHalidomIsCanUnlock(v.id)) {
|
|
unlock_red_status = true;
|
|
break;
|
|
}
|
|
}
|
|
this.updateHalidomRedStatus(HeroConst.RedPointType.eRPHalidom_Unlock, unlock_red_status);
|
|
|
|
//是否有可以升级的圣物
|
|
var lvup_red_status = false;
|
|
for (var _k in this.all_halidom_data) {
|
|
var halidom_vo = this.all_halidom_data[_k];
|
|
if (halidom_vo.getRedStatusByType(HalidomConst.Red_Type.Lvup)) {
|
|
lvup_red_status = true;
|
|
break;
|
|
}
|
|
}
|
|
this.updateHalidomRedStatus(HeroConst.RedPointType.eRPHalidom_Lvup, lvup_red_status);
|
|
|
|
// 是否有可以进阶的圣物
|
|
var step_red_status = false;
|
|
for (var _k2 in this.all_halidom_data) {
|
|
var _halidom_vo2 = this.all_halidom_data[_k2];
|
|
if (_halidom_vo2.getRedStatusByType(HalidomConst.Red_Type.Step)) {
|
|
step_red_status = true;
|
|
break;
|
|
}
|
|
}
|
|
this.updateHalidomRedStatus(HeroConst.RedPointType.eRPHalidom_Step, step_red_status);
|
|
},
|
|
// 根据圣物id判断是否满足解锁条件
|
|
checkHalidomIsCanUnlock: function checkHalidomIsCanUnlock(id) {
|
|
var is_can_unlock = false;
|
|
if (this.checkHalidomIsOpen(true) && !this.checkHalidomIsUnlock(id)) {
|
|
var base_cfg = game.configs.halidom_data.data_base[id];
|
|
if (base_cfg) {
|
|
is_can_unlock = true;
|
|
var hero_array = HeroController.getInstance().getModel().getAllHeroArray();
|
|
var hero_size = hero_array.length;
|
|
for (var k in base_cfg.loss) {
|
|
var v = base_cfg.loss[k];
|
|
var camp = v[1];
|
|
var star = v[2];
|
|
var num = v[3];
|
|
var have_num = 0;
|
|
for (var i = 1; i <= hero_size; i++) {
|
|
var hero_vo = hero_array[i - 1];
|
|
if (hero_vo.is_lock == 0 && hero_vo.is_in_form == 0 && hero_vo.camp_type == camp && hero_vo.star == star) {
|
|
have_num = have_num + 1;
|
|
}
|
|
if (have_num >= num) {
|
|
break;
|
|
}
|
|
}
|
|
if (have_num < num) {
|
|
is_can_unlock = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return is_can_unlock;
|
|
}
|
|
});
|
|
|
|
cc._RF.pop(); |