"use strict";
cc._RF.push(module, '5d6b5Pw8BNGuKO7vASj0fv2', 'elitesummon_panel');
// Scripts/mod/elitesummon/view/elitesummon_panel.js
"use strict";
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
// 这里是描述这个窗体的作用的
//
Create: 2019-08-09 15:58:31
// --------------------------------------------------------------------
var PathTool = require("pathtool");
var ActionController = require("action_controller");
var EliteSummonEvent = require("elitesummon_event");
var ElitesummonController = require("elitesummon_controller");
var RoleController = require("role_controller");
var BackpackController = require("backpack_controller");
var BackpackEvent = require("backpack_event");
var BackPackConst = require("backpack_const");
var SummonEvent = require("partnersummon_event");
var MainUiController = require("mainui_controller");
var PartnersummonController = require("partnersummon_controller");
var TimeTool = require("timetool");
var ElitesummonPanel = cc.Class({
"extends": BasePanel,
ctor: function ctor() {
this.prefabPath = PathTool.getPrefabPath("action", "action_time_summon_panel");
this.holiday_bid = arguments[0];
this.ctrl = ElitesummonController.getInstance();
},
// 可以初始化声明一些变量的
initConfig: function initConfig() {
this._summon_type_1 = 1; // 单抽的抽取类型(1免费 3钻石 4道具)
this._summon_type_10 = 3; // 十连抽抽取类型(3钻石 4道具)
this.role_vo = RoleController.getInstance().getRoleVo();
this.arard_data = Config.recruit_holiday_elite_data.data_award;
this.const_data = Config.recruit_holiday_elite_data.data_const;
this.summon_item_bid = this.const_data["common_s"].val;
this.summon_data = Config.recruit_holiday_elite_data.data_summon;
this.action_config = Config.recruit_holiday_elite_data.data_action;
},
// 初始化一些配置数据,可以用于声明一些变量之类的
initPanel: function initPanel() {
this.setPosition(0, -20);
var main_container = this.root_wnd.getChildByName("main_container");
this.progress_txt = main_container.getChildByName("progress_txt").getComponent(cc.Label);
var image_bg_sp = main_container.getChildByName("image_bg").getComponent(cc.Sprite);
this.progress = main_container.getChildByName("progress").getComponent(cc.ProgressBar);
this.baodi_bg = main_container.getChildByName("baodi_bg");
var str_bg = "txt_cn_elitesummon_1";
var tab_vo = ActionController.getInstance().getActionSubTabVo(this.holiday_bid);
if (tab_vo && tab_vo.aim_title != "" && tab_vo.aim_title) {
str_bg = tab_vo.aim_title;
}
var path = PathTool.getBigBg(str_bg, "jpg", "timesummon");
this.loadRes(path, function (res) {
image_bg_sp.spriteFrame = res;
}.bind(this));
this.item_num_txt = main_container.getChildByName("item_num_txt").getComponent(cc.Label);
this.award_btn = main_container.getChildByName("award_btn");
this.award_btn.getChildByName("label").getComponent(cc.Label).string = Utils.TI18N("奖励预览");
main_container.getChildByName("preview_btn").active = false;
this.summon_btn_1 = main_container.getChildByName("summon_btn_1");
this.summon_btn_1.getChildByName("label").getComponent(cc.Label).string = Utils.TI18N("招募1次");
this.summon_txt_1_rt = this.summon_btn_1.getChildByName("summon_txt_1").getComponent(cc.RichText);
this.summon_prop_1_nd = this.summon_btn_1.getChildByName("summon_prop");
this.summon_prop_num_lb = this.summon_prop_1_nd.getChildByName("summon_prop_num").getComponent(cc.Label);
this.summon_btn_10 = main_container.getChildByName("summon_btn_10");
this.summon_btn_10.getChildByName("label").getComponent(cc.Label).string = Utils.TI18N("招募10次");
this.summon_prop_10_nd = this.summon_btn_10.getChildByName("summon_prop");
this.summon_prop_sp = this.summon_prop_10_nd.getChildByName("summon_prop_item").getComponent(cc.Sprite);
this.summon_10_num_lb = this.summon_prop_10_nd.getChildByName("summon_prop_num").getComponent(cc.Label);
this.time_txt = main_container.getChildByName("time_txt").getComponent(cc.Label);
this.time_txt.node.setPosition(414, 283);
this.time_txt.node.color = new cc.Color(255, 252, 187);
var line = this.time_txt.node.addComponent(cc.LabelOutline);
line.color = new cc.Color(112, 18, 18);
line.width = 2;
this.time_txt.lineHeight = 30; // this.time_txt.node.active = false;
this.baodi_text_rt = this.seekChild("baodi_text", cc.RichText);
this.baodi_text_rt.node.setAnchorPoint(1, 0.5);
this.baodi_text_rt.node.x = 75;
this.award_item = ItemsPool.getInstance().getItem("backpack_item");
this.award_item.setParent(main_container);
this.award_item.setPosition(60, 728);
this.award_item.initConfig(false, 0.6, false, false);
this.award_item.show();
this.award_item.addCallBack(this._onClickAwardItem.bind(this));
var item_config = Utils.getItemConfig(this.summon_item_bid);
var path1 = PathTool.getItemRes(item_config.icon);
this.loadRes(path1, function (res) {
this.summon_prop_1_nd.getChildByName("summon_prop_item").getComponent(cc.Sprite).spriteFrame = res;
main_container.getChildByName("item_icon").getComponent(cc.Sprite).spriteFrame = res;
}.bind(this));
this.baodi_bg.getChildByName("tip").active = true;
this.btn_rule = this.baodi_bg.getChildByName("tip");
},
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
registerEvent: function registerEvent() {
this.addGlobalEvent(EliteSummonEvent.EliteSummon_Message, function (data) {
if (!data) return;
var status = this.ctrl.getModel().isHolidayHasID(data.camp_id);
if (status) {
this.setData(data);
}
}.bind(this)); // --物品道具增加
this.addGlobalEvent(BackpackEvent.ADD_GOODS, function (bag_code, data_list) {
this.updateItemNum(bag_code, data_list);
}.bind(this)); //物品道具删除
this.addGlobalEvent(BackpackEvent.DELETE_GOODS, function (bag_code, data_list) {
this.updateItemNum(bag_code, data_list);
}.bind(this)); //物品道具改变
this.addGlobalEvent(BackpackEvent.MODIFY_GOODS_NUM, function (bag_code, data_list) {
this.updateItemNum(bag_code, data_list);
}.bind(this)); // 召唤成功
this.addGlobalEvent(SummonEvent.PartnerSummonSuccess, function () {
this.playRecruitEffect();
}.bind(this));
this.award_btn.on("click", function () {
if (this.data && this.data.camp_id) {
var config = this.action_config[this.data.camp_id];
if (config) {
var TimesummonController = require("timesummon_controller");
TimesummonController.getInstance().openTimeSummonAwardView(true, config.group_id, this.data, true);
}
}
}, this);
this.btn_rule.on('click', function (event) {
if (this.data && this.data.camp_id) {
var config = this.action_config[this.data.camp_id];
if (config) {
var pos = event.node.convertToWorldSpaceAR(cc.v2(0, 0));
require("tips_controller").getInstance().showCommonTips(config.desc, pos, null, null, 500);
}
}
}, this);
this.summon_btn_1.on('click', function () {
Utils.playButtonSound(1);
if (this.checkHeroBagIsFull(1)) return;
if (this.last_time && gcore.SmartSocket.getTime() - this.last_time < 2) {
return;
}
this.last_time = gcore.SmartSocket.getTime();
if (this._summon_type_1 == 3) {
if (this.data && this.data.camp_id) {
var group_id = this.action_config[this.data.camp_id].group_id;
var config = this.summon_data[group_id];
var num = config.loss_gold_once[0][1];
var call_back = function call_back() {
this.ctrl.send23221(1, this._summon_type_1);
};
var item_icon_2 = Utils.getItemConfig(config.loss_gold_once[0][0]).icon;
var val_str = Utils.getItemConfig(config.gain_once[0][0]).name || "";
var val_num = config.gain_once[0][1];
var call_num = 1;
this.showGoldTips(item_icon_2, num, call_num, val_num, val_str, call_back);
}
} else {
this.ctrl.send23221(1, this._summon_type_1);
}
}, this);
this.summon_btn_10.on("click", function () {
Utils.playButtonSound(1);
if (this.checkHeroBagIsFull(10)) return;
if (this.last_time && Math.abs(gcore.SmartSocket.getTime() - this.last_time) < 0.5) {
return;
}
this.last_time = gcore.SmartSocket.getTime();
if (this._summon_type_10 == 3) {
if (this.data && this.data.camp_id) {
var group_id = this.action_config[this.data.camp_id].group_id;
var config = this.summon_data[group_id];
var num = config.loss_gold_ten[0][1];
var call_back = function call_back() {
this.ctrl.send23221(10, this._summon_type_10);
};
var item_icon_2 = Utils.getItemConfig(config.loss_gold_ten[0][0]).icon;
var val_str = Utils.getItemConfig(config.gain_ten[0][0]).name || "";
var val_num = config.gain_ten[0][1];
var call_num = 10;
this.showGoldTips(item_icon_2, num, call_num, val_num, val_str, call_back);
}
} else {
this.ctrl.send23221(10, this._summon_type_10);
}
}, this);
this.ctrl.send23220();
},
// 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
onShow: function onShow(params) {},
// 面板设置不可见的回调,这里做一些不可见的屏蔽处理
onHide: function onHide() {},
setData: function setData(data) {
this.data = data;
this.updateSummonBtnStatus();
this.nextRewardLevel();
this.updateItemNum();
var str_time = cc.js.formatStr("%s-%s", TimeTool.getMD2(data.start_time), TimeTool.getMD2(data.end_time));
this.time_txt.string = str_time;
this.baodi_text_rt.string = Utils.TI18N(cc.js.formatStr(StringUtil.parseStr("
剩余
%d
次招募内必出UP英雄
").string, data.must_count));
},
updateSummonBtnStatus: function updateSummonBtnStatus() {
if (this.data && this.data.camp_id) {
var config = this.action_config[this.data.camp_id];
var data = this.summon_data[config.group_id];
var summon_have_num = BackpackController.getInstance().getModel().getItemNumByBid(this.summon_item_bid); // -- 单抽
var cur_time = gcore.SmartSocket.getTime();
if (this.data.free_time == 0 && this.data.free_time <= cur_time) {
var txt_str_1 = Utils.TI18N(StringUtil.parseStr("免费召唤
").string);
this._summon_type_1 = 1;
this.openSummonFreeTimer(false);
this.summon_txt_1_rt.node.active = true; //免费 或者 倒计时
this.summon_prop_1_nd.active = false; //道具
this.summon_txt_1_rt.string = txt_str_1;
} else if (summon_have_num >= 1) {
this._summon_type_1 = 4;
this.openSummonFreeTimer(false);
this.summon_txt_1_rt.node.active = false; //免费 或者 倒计时
this.summon_prop_1_nd.active = true; //道具
this.summon_prop_num_lb.string = summon_have_num;
} else if (this.data.free_time) {
this.left_time = this.data.free_time - cur_time;
this.summon_txt_1_rt.node.active = true; //免费 或者 倒计时
this.summon_prop_1_nd.active = false; //道具
this._summon_type_1 = 3;
this.openSummonFreeTimer(true);
} // -- 十连抽
if (summon_have_num >= 10) {
var item_config = Utils.getItemConfig(this.summon_item_bid);
if (item_config) {
var path = PathTool.getItemRes(item_config.icon);
this.summon_10_num_lb.string = summon_have_num;
this.summon_prop_sp.node.scale = 0.4;
this.loadRes(path, function (res) {
this.summon_prop_sp.spriteFrame = res;
}.bind(this));
}
this._summon_type_10 = 4;
} else {
var bid = data.loss_gold_ten[0][0];
var num = data.loss_gold_ten[0][1];
var _path = PathTool.getItemRes(bid);
this.summon_prop_sp.node.scale = 0.3;
this.loadRes(_path, function (res) {
this.summon_prop_sp.spriteFrame = res;
}.bind(this));
this.summon_10_num_lb.string = num;
this._summon_type_10 = 3;
}
}
},
openSummonFreeTimer: function openSummonFreeTimer(status) {
if (status) {
if (this.left_time > 0 && this.summon_txt_1_rt) {
if (!this.summon_timer) {
this.setTimeFormatString();
this.summon_timer = gcore.Timer.set(function () {
this.setTimeFormatString();
}.bind(this), 1000, -1);
}
} else {
if (this.summon_timer) {
gcore.Timer.del(this.summon_timer);
this.summon_timer = null;
}
}
} else {
if (this.summon_timer != null) {
gcore.Timer.del(this.summon_timer);
this.summon_timer = null;
}
}
},
setTimeFormatString: function setTimeFormatString() {
if (this.data && this.data.free_time - gcore.SmartSocket.getTime() > 0) {
this.left_time = this.data.free_time - gcore.SmartSocket.getTime();
this.summon_txt_1_rt.string = cc.js.formatStr(Utils.TI18N(StringUtil.parseStr("%s
后免费
").string), TimeTool.getTimeFormat(this.left_time));
this._summon_type_1 = 3;
} else {
this.summon_txt_1_rt.string = Utils.TI18N(StringUtil.parseStr("免费召唤
").string);
this._summon_type_1 = 1;
if (this.summon_timer) {
gcore.Timer.del(this.summon_timer);
this.summon_timer = null;
}
}
},
nextRewardLevel: function nextRewardLevel() {
var count = this.nextCount(this.data.times);
if (this.arard_data[this.data.camp_id] && this.arard_data[this.data.camp_id][count]) {
var data = this.arard_data[this.data.camp_id];
var _award_is_over = false;
if (this.award_item) {
var bid = data[count].reward[0][0];
var num = data[count].reward[0][1];
this.award_item.setData({
bid: bid,
num: num
});
var obj = this.getBaoDIStatus();
this.is_can_award = obj.status;
var can_id = obj.id;
if (this.is_can_award == true) {
if (can_id) {
var _bid = data[can_id].reward[0][0];
var _num = data[can_id].reward[0][1];
this.award_item.setData({
bid: _bid,
num: _num
});
}
this.award_item.showItemEffect(true, 263, PlayerAction.action_1, true, 1.1);
} else {
this.award_item.showItemEffect(false);
} // --全部领取完毕的时候
if (this.is_can_award == false && this.data.times >= data[Utils.getArrLen(data)].times) {
// setChildUnEnabled(true, this.award_item)
this.award_item.setReceivedIcon(true);
_award_is_over = true;
}
}
var num_times = data[count].times;
var label = "";
if (_award_is_over) {
label = Utils.TI18N("招募次数 ") + this.data.times + "/" + num_times;
} else {
label = Utils.TI18N("下一阶段 ") + this.data.times + "/" + num_times;
}
this.progress_txt.string = label;
var cur_num = 0;
var totle_num = num_times;
if (count == 1) {
cur_num = this.data.times;
} else {
cur_num = this.data.times - data[count - 1].times;
totle_num = num_times - data[count - 1].times;
}
var percent = cur_num / totle_num;
if (this.data.times >= data[Utils.getArrLen(data)].times) {
percent = 1;
}
this.progress.progress = percent;
}
},
_onClickAwardItem: function _onClickAwardItem() {
if (this.data) {
if (this.is_can_award) {
this.ctrl.send23222();
} else {
var TimesummonController = require("timesummon_controller");
TimesummonController.getInstance().openTimeSummonProgressView(true, this.data.times, this.data.camp_id);
}
}
},
// --根据当前阶段计算下一次奖励
nextCount: function nextCount(cur_num) {
var count = 1;
var data = this.arard_data[this.data.camp_id];
if (this.arard_data && data) {
var len = Utils.getArrLen(data);
if (cur_num >= data[len].times) {
return data[len].id;
}
for (var i in data) {
var m = i + 1;
if (m >= len) {
m = len;
}
if (data[i].times > cur_num && cur_num <= data[m].times) {
count = data[i].id;
break;
}
}
}
return count;
},
// --领取保底状态
getBaoDIStatus: function getBaoDIStatus() {
var status = false;
var id = null;
if (this.data) {
if (this.arard_data[this.data.camp_id]) {
for (var i in this.arard_data[this.data.camp_id]) {
var v = this.arard_data[this.data.camp_id][i];
var cur_status = false;
var cur_id = null;
if (this.data.times >= v.times) {
cur_status = true;
cur_id = v.id;
}
var true_status = true;
if (cur_status == true) {
for (var j = 0; j < this.data.reward_list.length; ++j) {
var k = this.data.reward_list[j];
if (k.id == cur_id) {
true_status = false;
break;
}
}
}
if (cur_id && true_status == true) {
status = true;
id = cur_id;
}
}
}
}
return {
status: status,
id: id
};
},
updateItemNum: function updateItemNum(bag_code, data_list) {
if (this.summon_item_bid) {
if (bag_code && data_list) {
if (bag_code == BackPackConst.Bag_Code.BACKPACK) {
for (var i in data_list) {
var v = data_list[i];
if (v && v.base_id && this.summon_item_bid == v.base_id) {
var summon_have_num = BackpackController.getInstance().getModel().getItemNumByBid(this.summon_item_bid);
this.item_num_txt.string = summon_have_num;
this.updateSummonBtnStatus();
break;
}
}
}
} else {
var _summon_have_num = BackpackController.getInstance().getModel().getItemNumByBid(this.summon_item_bid);
this.item_num_txt.string = _summon_have_num;
}
}
},
checkHeroBagIsFull: function checkHeroBagIsFull(times) {
// 判断英雄背包空间
var HeroController = require("hero_controller");
var hero_model = HeroController.getInstance().getModel();
var hero_bag_info = hero_model.getHeroMaxCount();
var limit_num = hero_bag_info.max_count - hero_bag_info.have_coutn;
if (times > limit_num) {
var str = Utils.TI18N("英雄列表已满,可通过提升贵族等级或购买增加英雄携带数量,是否前往购买?");
var CommonAlert = require("commonalert");
CommonAlert.show(str, Utils.TI18N("确定"), function () {
var MainuiConst = require("mainui_const");
var ActionController = require("action_controller");
MainUiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.partner);
ActionController.getInstance().openActionMainPanel(false);
}, Utils.TI18N("取消"), function () {});
return true;
}
return false;
},
showGoldTips: function showGoldTips(good_res_path, need_num, call_num, val_num, val_str, call_back) {
//图标 买几次 购买经验 回调函数
if (this.alert) {
this.alert.close();
this.alert = null;
}
var hvae_num = this.role_vo.gold;
var buy_ori = cc.js.formatStr(StringUtil.parseStr(Lang.DIAMOND_CONSUME).string, good_res_path, need_num, hvae_num);
var get_ori = cc.js.formatStr(StringUtil.parseStr(Lang.BUY_DES).string, val_num, val_str, call_num);
var des_str = buy_ori + get_ori;
var frame_arrays = [];
var good_path = PathTool.getIconPath("item", "3");
frame_arrays.push(good_path);
var CommonAlert = require("commonalert");
this.alert = CommonAlert.show(des_str, "确定", call_back.bind(this), "取消", null, null, null, {
resArr: frame_arrays,
maxWidth: 450,
align: cc.macro.TextAlignment.LEFT
});
},
playRecruitEffect: function playRecruitEffect() {
var config_data = this.summon_data;
if (this.summonBg == null) {
this.summonBg = new cc.Node().addComponent(cc.Sprite);
this.summonBg.type = cc.Sprite.Type.SLICED;
this.summonBg.sizeMode = cc.Sprite.SizeMode.CUSTOM;
ViewManager.getInstance().addToSceneNode(this.summonBg.node, SCENE_TAG.dialogue);
this.summonBg.node.setContentSize(720, 1280);
this.summonBg.node.scale = FIT_SCALE;
this.summonBg.node.setPosition(0, 0);
var group_id = this.action_config[this.data.camp_id].group_id;
var path = PathTool.getBigBg("timesummon/" + config_data[group_id].call_bg_card, "jpg");
this.loadRes(path, function (res) {
this.summonBg.spriteFrame = res;
this.summonBg.node.setContentSize(cc.size(720, 1280));
}.bind(this));
this.summonBg.node.on("touchend", function () {
this.summonBg.node.active = !this.summonBg.node.active;
if (this.floor_effect) {
this.floor_effect.paused = true;
}
if (this.book_effect) {
this.book_effect.paused = true;
}
if (this.light_effect) {
this.light_effect.paused = true;
}
this.animaComplete();
}, this);
} else {
this.summonBg.node.active = !this.summonBg.node.active;
}
var data = PartnersummonController.getInstance().getModel().getRecruitData();
var TimesummonController = require("timesummon_controller");
var rewards = TimesummonController.getInstance().getModel().getEffectAction(data.rewards);
this.floor_action = rewards[0];
this.light_action = rewards[1];
var config = config_data[data.group_id];
var action_name = "action";
if (config) {
action_name = config.action_name;
} // 播放音效
var music_name = "recruit_" + action_name;
Utils.playEffectSound(AUDIO_TYPE.Recruit, music_name);
this.handleFloorEffect();
this.handleLightEffect();
this.handleBookEffect();
MainUiController.getInstance().setMainUIBottomStatus(false);
MainUiController.getInstance().setMainUITopStatus(false);
},
handleFloorEffect: function handleFloorEffect() {
var action = this.floor_action || PlayerAction.action_1;
if (this.summonBg && this.floor_effect == null) {
this.floor_effect = new cc.Node().addComponent(sp.Skeleton);
this.summonBg.node.addChild(this.floor_effect.node);
this.floor_effect.node.setPosition(0, -270);
var effect_res = PathTool.getEffectRes("671");
var effect_path = PathTool.getSpinePath(effect_res, "action");
this.loadRes(effect_path, function (recruit_sk) {
this.floor_effect.skeletonData = recruit_sk;
this.floor_effect.setAnimation(0, action);
}.bind(this));
} else if (this.floor_effect) {
this.floor_effect.setToSetupPose();
this.floor_effect.paused = false;
this.floor_effect.setAnimation(0, action);
}
},
handleLightEffect: function handleLightEffect() {
var action = this.light_action || PlayerAction.action_1;
if (this.summonBg && this.light_effect == null) {
this.light_effect = new cc.Node().addComponent(sp.Skeleton);
this.summonBg.node.addChild(this.light_effect.node);
this.light_effect.node.setPosition(0, -240);
var effect_res = PathTool.getEffectRes("670");
var effect_path = PathTool.getSpinePath(effect_res, "action");
this.light_effect.setCompleteListener(this.animaComplete.bind(this));
this.loadRes(effect_path, function (recruit_sk) {
this.light_effect.skeletonData = recruit_sk;
this.light_effect.setAnimation(0, action);
}.bind(this));
} else if (this.light_effect) {
this.light_effect.setToSetupPose();
this.light_effect.paused = false;
this.light_effect.setAnimation(0, action);
}
},
handleBookEffect: function handleBookEffect() {
if (this.summonBg && this.book_effect == null) {
this.book_effect = new cc.Node().addComponent(sp.Skeleton);
this.summonBg.node.addChild(this.book_effect.node);
this.book_effect.node.setPosition(0, -240);
var effect_res = PathTool.getEffectRes("672");
var effect_path = PathTool.getSpinePath(effect_res, "action");
this.loadRes(effect_path, function (recruit_sk) {
this.book_effect.skeletonData = recruit_sk;
this.book_effect.setAnimation(0, PlayerAction.action);
}.bind(this));
} else if (this.book_effect) {
this.book_effect.setToSetupPose();
this.book_effect.paused = false;
this.book_effect.setAnimation(0, PlayerAction.action);
}
},
animaComplete: function animaComplete() {
this.summonBg.node.active = false;
MainUiController.getInstance().setMainUIBottomStatus(true);
MainUiController.getInstance().setMainUITopStatus(true);
var PartnersummonController = require("partnersummon_controller");
PartnersummonController.getInstance().openSummonGainWindow(true);
},
// 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
onDelete: function onDelete() {
if (this.award_item) {
this.award_item.deleteMe();
this.award_item = null;
}
if (this.summon_timer) {
gcore.Timer.del(this.summon_timer);
this.summon_timer = null;
}
}
});
cc._RF.pop();