// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
// 这里填写详细说明,主要填写该模块的功能简要
//
Create: 2019-02-18 14:15:05
// --------------------------------------------------------------------
var HallowsVo = require("hallows_vo");
var MainuiController = require("mainui_controller");
var HeroController = require("hero_controller");
var RoleController = require("role_controller");
var BackpackController = require("backpack_controller");
var HallowsEvent = require("hallows_event");
var HallowsConst = require("hallows_const");
var MainuiConst = require("mainui_const");
var HallowsModel = cc.Class({
extends: BaseClass,
ctor: function () {
this.ctrl = require("hallows_controller").getInstance();
this.initConfig();
},
properties: {
},
initConfig: function () {
this.hallows_list = [];
this.open_flag = false; // 该玩家是否打开过神器界面
this.had_request = false;
this.attr_ratio_list = [];
this.hallows_red_list = []; // 红点数据
},
//更新圣器数据
updateHallowsInfo:function(data){
if(!data)return;
for(var i in data.hallows){
var hallows_vo = this.hallows_list[data.hallows[i].id];
if(!hallows_vo){
hallows_vo = new HallowsVo();
this.hallows_list[data.hallows[i].id] = hallows_vo;
}
hallows_vo.initAttributeData(data.hallows[i]);
}
//计算神器红点
this.updateRedPoint()
},
//新增或者更新一个圣器
updateHallowsData:function(data){
var hallows_vo = this.getHallowsById(data.id);
if(!hallows_vo){
hallows_vo = new HallowsVo();
this.hallows_list[data.id] = hallows_vo ;
}
hallows_vo.initAttributeData(data);
// 计算神器红点
this.updateRedPoint()
},
//监测红点
updateHallowsRedStatus:function( bid, status ){
var _status = this.hallows_red_list[bid];
if(_status == status)return;
this.hallows_red_list[bid] = status;
MainuiController.getInstance().setBtnRedPoint(MainuiConst.btn_index.hallows, { bid: bid, status: status });
gcore.GlobalEvent.fire(HallowsEvent.HallowsRedStatus, bid, status);
},
// 根据红点类型判断是否显示红点
checkRedIsShowByRedType:function( redType ){
return this.hallows_red_list[redType] || false;
},
//判断神器是否有红点
getHallowsRedStatus:function( ){
var red_status = false;
for(var i in this.hallows_red_list){
if(this.hallows_red_list[i]){
red_status = true
break
}
}
return red_status
},
updateRedPoint: function() {
RedMgr.getInstance().addCalHandler(this.checkHallowsRedStatus.bind(this), RedIds.Hallow);
},
checkHallowsRedStatus:function(){
var show_red = false;
if(this.checkIsHaveAllHallows()){//是否激活所有神器
//按照等级、进度、id排序,取出第一个神器来判断红点
var sort_func = function(objA, objB){
if(objA.step!=objB.step){
return objB.step - objA.step;
}else if(objA.lucky != objB.lucky){
return objB.lucky - objA.lucky;
}else{
return objB.id - objA.id;
}
}
var hallows_list = Utils.deepCopy(this.hallows_list);
hallows_list.sort(sort_func);
var hallows_vo = hallows_list[0];
if(hallows_vo){
this.setRedHallowsId(hallows_vo.id);
var role_vo = RoleController.getInstance().getRoleVo();
// 神器升级
var hallows_config = gdata("hallows_data","data_info",Utils.getNorKey(hallows_vo.id, hallows_vo.step));
var cost_config = hallows_config.loss;
if(cost_config && Utils.next(cost_config)!=null){
for(var i in cost_config){
var bid = cost_config[i][0];
var num = cost_config[i][1];
var have_num = 0;
var assert = Config.item_data.data_assets_id2label[bid];
if(assert){
have_num = role_vo[assert];
}else{
have_num = BackpackController.getInstance().getModel().getItemNumByBid(bid);
}
if(have_num < num){
show_red = false;
break
}else{
show_red = true;
}
}
}
this.updateHallowsRedStatus(HallowsConst.Red_Index.hallows_lvup, show_red);
// 神器技能升级
show_red = false;
// 神器技能升级
var skill_config = gdata("hallows_data","data_skill_up",Utils.getNorKey(hallows_vo.id, hallows_vo.skill_lev));
if(skill_config && skill_config.lev_limit != 0 && skill_config.lev_limit <= hallows_vo.step){
var cost_config = skill_config.lose;
if(cost_config && Utils.next(cost_config)!=null){
for(var j in cost_config){
var bid = cost_config[j][0];
var num = cost_config[j][1];
var have_num = 0;
var assert = Config.item_data.data_assets_id2label[bid];
if(assert){
have_num = role_vo[assert];
}else{
have_num = BackpackController.getInstance().getModel().getItemNumByBid(bid);
}
if(have_num < num){
show_red = false
break
}else{
show_red = true
}
}
}
}
this.updateHallowsRedStatus(HallowsConst.Red_Index.skill_lvup, show_red);
// 是否可以使用圣印石
show_red = false
var trace_config = gdata("hallows_data","data_trace_cost",Utils.getNorKey(hallows_vo.id, hallows_vo.step));
var id_stone_config = Config.hallows_data.data_const["id_stone"];
if(trace_config && id_stone_config){
var have_num = BackpackController.getInstance().getModel().getBackPackItemNumByBid(id_stone_config.val);
if(hallows_vo.seal < trace_config.num && have_num > 0){
show_red = true;
}
}
this.updateHallowsRedStatus(HallowsConst.Red_Index.stone_use, show_red);
}
// 当从神器任务界面变为神器界面时,要先清一下任务的红点
if(this.checkRedIsShowByRedType(HallowsConst.Red_Index.task_award)){
this.updateHallowsRedStatus(HallowsConst.Red_Index.task_award, false);
}
}else{
show_red = this.checkHallowsAwardTips();
this.updateHallowsRedStatus(HallowsConst.Red_Index.task_award, show_red)
}
},
// 保存一下显示红点的神器id(等级最高的)
setRedHallowsId:function( id ){
var old_id = this.red_hallows_id;
this.red_hallows_id = id;
if(old_id != this.red_hallows_id){
gcore.GlobalEvent.fire(HallowsEvent.HallowsRedStatus);
}
},
getRedHallowsId:function( ){
return this.red_hallows_id;
},
//返回圣器数据
getHallowsById:function(id){
return this.hallows_list[id];
},
//当前总结束
curTotalStep:function(){
var step = 0;
for(var i in this.hallows_list){
step = step + this.hallows_list[i].step;
}
return step;
},
//获取圣器列表
getHallowsList:function(){
var list = [];
for(var i in this.hallows_list){
list.push(this.hallows_list[i]);
}
return list;
},
//圣器共鸣等级
getResonateLev:function(){
return 0;
//return self.resonate_lev
},
//获取上阵伙伴数据
getFormInfo:function(){
if(Utils.next(this.attr_ratio_list) == null){
for(var i in Config.hallows_data.data_attr_radio){
var info = Config.hallows_data.data_attr_radio[i];
for(var j in info.ratio){
var attr_key = info.ratio[i][0];
var ratio = info.ratio[i][1];
this.attr_ratio_list[Utils.getNorKey(info.type, attr_key)] = ratio
}
}
}
var type_list = {};
var partner_model = HeroController.getInstance().getModel();
if(partner_model){
var form_pos_list = partner_model.getMyPosList();
for(var k in form_pos_list){
var vo = partner_model.getHeroById(form_pos_list[k].id);
if(vo){
if(type_list[vo.type] == null){
type_list[vo.type] = 0
}
type_list[vo.type] = type_list[vo.type] + 1
}
}
}
return type_list;
},
getRatio:function(type, attr_key){
return this.attr_ratio_list[Utils.getNorKey(type, attr_key)]
},
// 圣器任务列表
updateHallowsTask:function(list){
if(list == null || Utils.next(list) == null)return;
if(this.hallows_task_list == null){
this.hallows_task_list = {};
}
for(var i in list){
this.hallows_task_list[list[i].id] = list[i];
}
this.updateRedPoint();
gcore.GlobalEvent.fire(HallowsEvent.UpdateHallowsTaskEvent);
},
// 获取指定圣器的任务列表, 这个id是圣器的id,
getHallowsTaskList:function(id){
var task_list = [];
var hallows_task_config = Config.hallows_data.data_task;
if(this.hallows_task_list){
for(var i in this.hallows_task_list){
var config = hallows_task_config[this.hallows_task_list[i].id];
if(config.hid == id){
this.hallows_task_list[i].sort = config.sort;
task_list.push(this.hallows_task_list[i]);
}
}
}
if(Utils.next(task_list)){
task_list.sort(function (a, b) {
return a.id - b.id;
})
}
return task_list;
},
// 获取指定任务数据
getHallowsTaks:function(id){
if(this.hallows_task_list){
return this.hallows_task_list[id];
}
},
// 获取当前待激活的圣器id
getCurActivityHallowsId:function(){
if(this.hallows_list == null || Utils.next(this.hallows_list) == null){//-- 第一个圣器
return 1;
}
var next_id = 0;
for(var i in this.hallows_list){
if(next_id=max_count);
},
// 设置是否打开过神器界面的标记
setOpenHallowsFlag:function( flag ){
this.open_flag = flag;
},
//1 为打开过,2为没打开过
getHallowsOpenFlag:function( ){
return this.open_flag;
},
// 根据神器id,从配置表数据中获取该神器最高属性数据
makeHighestHallowVo:function( hallows_id ){
if(hallows_id){
var hallows_vo = new HallowsVo();
var max_lv = Config.hallows_data.data_max_lev[hallows_id];
var max_skill_lv = Config.hallows_data.data_skill_max_lev[hallows_id];
var config_info = gdata("hallows_data","data_info",Utils.getNorKey(hallows_id, max_lv));
var config_skill = gdata("hallows_data","data_skill_up",Utils.getNorKey(hallows_id, max_skill_lv));;
var attr_data = [];
for(var i in config_info.attr){
var attr_str = config_info.attr[i][0];
var attr_temp = {}
attr_temp.attr_id = Config.attr_data.data_key_to_id[attr_str]
attr_temp.attr_val = config_info.attr[i][1]
attr_data.push(attr_temp);
}
hallows_vo.id = hallows_id;
hallows_vo.step = max_lv;
hallows_vo.add_attr = attr_data;
hallows_vo.skill_bid = config_skill.skill_bid;
hallows_vo.skill_lev = max_skill_lv;
return hallows_vo;
}
},
__delete:function(){
},
});