"use strict"; cc._RF.push(module, '0ad81sQHl9CU6uwSVzuqOoK', 'hero_skin_window'); // Scripts/mod/hero/view/hero_skin_window.js "use strict"; // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 英雄查看皮肤立绘界面 //
Create: 2019-09-11 20:22:43 // -------------------------------------------------------------------- var PathTool = require("pathtool"); var HeroController = require("hero_controller"); var CommonScrollViewSingleLayout = require("common_scrollview_single"); var BackPackConst = require("backpack_const"); var BackpackController = require("backpack_controller"); var CommonAlert = require("commonalert"); var ActionController = require("action_controller"); var MallConst = require("mall_const"); var MallController = require("mall_controller"); var BaseRole = require("baserole"); var HeroEvent = require("hero_event"); var MainUIController = require("mainui_controller"); var MainuiConst = require("mainui_const"); var Hero_skinWindow = cc.Class({ "extends": BaseView, ctor: function ctor() { this.prefabPath = PathTool.getPrefabPath("hero", "hero_skin_window"); this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意 this.win_type = WinType.Full; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips }, // 初始化一些配置数据,可以用于声明一些变量之类的 initConfig: function initConfig() { //能否点击头像 this.can_click_btn = true; this.ctrl = HeroController.getInstance(); this.model = this.ctrl.getModel(); this.color_1 = new cc.Color(0x64, 0x32, 0x23, 0xff); }, // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件 openCallBack: function openCallBack() { this.background = this.seekChild("background", cc.Sprite); this.background.node.scale = FIT_SCALE; this.loadRes(PathTool.getBigBg("hero_draw_bg", null, "hero"), function (sp) { this.background.spriteFrame = sp; }.bind(this)); this.main_container = this.seekChild("main_container"); //英雄名字 this.hero_name_lb = this.seekChild("hero_name", cc.Label); this.hero_name_lb.string = ""; this.title_name_lb = this.seekChild("title_name", cc.Label); this.title_name_lb.string = ""; //英雄立绘 this.hero_draw_icon_nd = this.seekChild(this.main_container, "hero_draw_icon"); this.hero_draw_icon_sp = this.seekChild(this.main_container, "hero_draw_icon", cc.Sprite); this.hero_draw_icon_x = this.hero_draw_icon_nd.x; this.hero_draw_icon_y = this.hero_draw_icon_nd.y; //底部面板 this.bottom_panel = this.seekChild(this.main_container, "bottom_panel"); //英雄信息面板 this.hero_panel = this.seekChild(this.bottom_panel, "hero_panel"); this.hero_panel_x = this.hero_panel.x; this.hero_panel.x += cc.winSize.width * 2; this.hero_panel.active = true; this.mode_node = this.seekChild(this.hero_panel, "model_node"); this.hero_panel_bg_nd = this.seekChild(this.hero_panel, "bg"); this.line_nd = this.seekChild(this.hero_panel, "line"); this.name_lb = this.seekChild(this.hero_panel, "name", cc.Label); //属性面板 this.attr_panel = this.seekChild(this.bottom_panel, "attr_panel"); this.attr_panel_x = this.attr_panel.x; this.attr_panel.x += cc.winSize.width * 2; this.attr_panel.active = true; var time_key = this.seekChild(this.attr_panel, "time_key", cc.Label); time_key.string = Utils.TI18N("有效时间:"); var attr_key = this.seekChild(this.attr_panel, "attr_key", cc.Label); attr_key.string = Utils.TI18N("属性加成:"); //时间 this.time_val_lb = this.seekChild(this.attr_panel, "time_val", cc.Label); this.attr_item_list = {}; this.show_btn = this.seekChild(this.bottom_panel, "show_btn"); this.show_btn_icon_nd = this.seekChild(this.show_btn, "icon"); this.left_btn = this.seekChild(this.bottom_panel, "left_btn"); this.right_btn = this.seekChild(this.bottom_panel, "right_btn"); this.lay_scrollview = this.seekChild(this.bottom_panel, "lay_scrollview"); }, // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent registerEvent: function registerEvent() { Utils.onTouchEnd(this.left_btn, function () { this.ctrl.openHeroSkinWindow(false); }.bind(this), 2); Utils.onTouchEnd(this.right_btn, function () { //确定选择当前皮肤做作为显示皮肤 if (!this.hero_vo) return; if (!this.skin_data_list) return; var skin_data = this.skin_data_list[this.select_skin_index]; if (skin_data && skin_data.is_skin_data) { //换成其他皮肤 if (this.hero_vo.use_skin != skin_data.skin_id) { this.ctrl.sender11019(this.hero_vo.partner_id, skin_data.skin_id); } } else { if (this.hero_vo.use_skin != 0) { //换回原来皮肤 this.ctrl.sender11019(this.hero_vo.partner_id, 0); } } }.bind(this), 1); Utils.onTouchEnd(this.show_btn, function () { //显示 if (!this.hero_vo) return; if (!this.skin_data_list) return; if (this.is_show_attr) { this.is_show_attr = false; this.attr_panel.x += cc.winSize.width * 2; this.hero_panel.x = this.hero_panel_x; this.updateHeroInfo(1); if (this.show_btn_icon_nd) { this.show_btn_icon_nd.setScale(-1); } } else { this.is_show_attr = true; var skin_data = this.skin_data_list[this.select_skin_index]; this.hero_panel.x += cc.winSize.width * 2; if (skin_data && skin_data.is_skin_data) { this.attr_panel.x = this.attr_panel_x; this.updateAttrInfo(); } else { this.attr_panel.x += cc.winSize.width * 2; } if (this.show_btn_icon_nd) { this.show_btn_icon_nd.setScale(1); } } }.bind(this), 2); this.addGlobalEvent(HeroEvent.Hero_Skin_Info_Event, function () { if (this.select_skin_index == null) return; if (!this.skin_data_list) return; for (var i in this.skin_data_list) { var v = this.skin_data_list[i]; if (this.model.isUnlockHeroSkin(v.skin_id)) { v.is_lock = false; } else { v.is_lock = true; } } if (this.use_skin_index != null) { this.updateSkinList(this.use_skin_index); this.use_skin_index = null; } else { this.updateSkinList(this.select_skin_index); } }, this); }, // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了 openRootWnd: function openRootWnd(hero_vo) { if (!hero_vo) return; this.hero_vo = hero_vo; var bid_config = Config.partner_skin_data.data_partner_bid_info[this.hero_vo.bid]; if (!bid_config) return; var partner_config = Config.partner_data.data_partner_base[this.hero_vo.bid]; if (partner_config) { this.hero_name_lb.string = partner_config.name; } //皮肤数据 this.skin_data_list = []; for (var skin_id in bid_config) { var v = bid_config[skin_id]; var data = {}; data.is_skin_data = true; //表示是皮肤数据 if (this.model.isUnlockHeroSkin(v.skin_id)) { data.is_lock = false; } else { data.is_lock = true; } data.skin_id = skin_id; data.config = Config.partner_skin_data.data_skin_info[v.skin_id]; this.skin_data_list.push(data); } this.skin_data_list.sort(Utils.tableLowerSorter(["skin_id"])); //第一个肯定是本体 this.skin_data_list.unshift(this.hero_vo); var select_index = 0; var use_skin = this.hero_vo.use_skin || 0; if (use_skin != 0) { for (var i in this.skin_data_list) { var _v = this.skin_data_list[i]; if (_v.skin_id == use_skin) { select_index = i; } } } this.is_show_attr = true; this.updateSkinList(select_index); }, updateSkinList: function updateSkinList(select_index) { if (this.scroll_view == null) { var scroll_view_size = this.lay_scrollview.getContentSize(); var list_setting = { start_x: 0, space_x: 0, start_y: 0, space_y: 0, item_width: 120, item_height: 120, row: 1, col: 1, need_dynamic: true }; this.scroll_view = new CommonScrollViewSingleLayout(); this.scroll_view.createScroll(this.lay_scrollview, cc.v2(0, 0), ScrollViewDir.horizontal, ScrollViewStartPos.top, scroll_view_size, list_setting, cc.v2(0.5, 0.5)); this.scroll_view.registerScriptHandlerSingle(this.createNewCell.bind(this), ScrollViewFuncType.CreateNewCell); this.scroll_view.registerScriptHandlerSingle(this.numberOfCells.bind(this), ScrollViewFuncType.NumberOfCells); this.scroll_view.registerScriptHandlerSingle(this.updateCellByIndex.bind(this), ScrollViewFuncType.UpdateCellByIndex); this.scroll_view.registerScriptHandlerSingle(this.onCellTouched.bind(this), ScrollViewFuncType.OnCellTouched); var max_count = Math.floor(scroll_view_size.width / list_setting.item_width); if (this.skin_data_list.length <= max_count) { this.scroll_view.setClickEnabled(false); } } var select_index = select_index || 0; this.scroll_view.reloadData(select_index); }, // --创建cell // --@width 是setting.item_width // --@height 是setting.item_height createNewCell: function createNewCell(width, height) { var cell = ItemsPool.getInstance().getItem("backpack_item"); cell.initConfig(false, 1, false, true); cell.show(); cell.setDefaultTip(); cell.setQualityBG(BackPackConst.quality.orange); cell.addCallBack(function () { this.onCellTouched(cell); }.bind(this)); return cell; }, //获取数据数量 numberOfCells: function numberOfCells() { if (!this.skin_data_list) return 0; return this.skin_data_list.length; }, // --更新cell(拖动的时候.刷新数据时候会执行次方法) // --cell :createNewCell的返回的对象 // --index :数据的索引 updateCellByIndex: function updateCellByIndex(cell, index) { this.startUpdate(100, function () { cell.index = index; var skin_data = this.skin_data_list[index]; if (!skin_data) return; var icon_res = null; if (skin_data.is_skin_data) { icon_res = PathTool.getHeadRes(skin_data.config.head_id); cell.setItemIcon(icon_res); if (skin_data.is_lock) { cell.setItemIconUnEnabled(true); } else { cell.setItemIconUnEnabled(false); } } else { var key = Utils.getNorKey(skin_data.bid, skin_data.star); var star_config = gdata("partner_data", "data_partner_star", [key]); if (star_config) { icon_res = PathTool.getHeadRes(star_config.head_id); cell.setItemIcon(icon_res); } cell.setItemIconUnEnabled(false); } if (this.select_skin_index != null && this.select_skin_index == index) { cell.setSelected(true); } else { cell.setSelected(false); } }.bind(this), 1); }, //点击cell .需要在 createNewCell 设置点击事件 onCellTouched: function onCellTouched(cell) { if (!this.can_click_btn) return; if (cell.index == null) return; var index = cell.index; var skin_data = this.skin_data_list[index]; if (!skin_data) return; if (skin_data.is_skin_data) { if (skin_data.is_lock) { this.setLockInfo(skin_data, index); return; } } if (this.select_cell != null) { this.select_cell.setSelected(false); } this.select_cell = cell; this.select_cell.setSelected(true); this.updateSelectSkinInfo(index); }, //更新选中的皮肤信息 updateSelectSkinInfo: function updateSelectSkinInfo(index) { if (!this.select_skin_index && this.select_skin_index == index) return; this.select_skin_index = index; var skin_data = this.skin_data_list[this.select_skin_index]; var name_str = ""; if (skin_data.config) { name_str = skin_data.config.skin_name; } else { var config = gdata("partner_data", "data_partner_library", [skin_data.bid]); if (config) { name_str = config.title; } } this.title_name_lb.string = name_str; if (skin_data.is_skin_data) { this.skin_config = skin_data.config; if (this.is_show_attr) { this.attr_panel.x = this.attr_panel_x; this.updateAttrInfo(); } else { this.attr_panel.x += cc.winSize.width * 2; } } else { //英雄对象 this.skin_config = gdata("partner_data", "data_partner_library", [skin_data.bid]); this.attr_panel.x += cc.winSize.width * 2; } this.updateDrawInfo(); if (!this.is_show_attr) { this.updateHeroInfo(2); } }, setLockInfo: function setLockInfo(skin_data, index) { var dic_item_id = {}; for (var i in skin_data.config.item_id_list) { var id = skin_data.config.item_id_list[i]; dic_item_id[id] = true; } var have_item = null; var have_list = []; var list = BackpackController.getInstance().getModel().getBagItemList(BackPackConst.Bag_Code.BACKPACK) || {}; for (var _i in list) { var item = list[_i]; if (item && item.config && dic_item_id[item.config.id]) { //背包上有道具 var data = {}; if (item.config.client_effect[0] && item.config.client_effect[0][1]) { data.time = item.config.client_effect[0][1]; } else { data.time = 1; } if (data.time == 0) { //表示有永久的皮肤 have_item = item; break; } data.item_info = item; have_list.push(data); } } if (have_item) { //表示有永久的皮肤 this.useSkinItemByID(have_item, index); return; } if (have_list.length > 0) { have_list.sort(Utils.tableUpperSorter(["time"])); this.useSkinItemByID(have_list[0].item_info, index); } else { //说明该皮肤不能同商城获取 // if (skin_data.config.is_shop == 0) { // message(Utils.TI18N("暂未获取此皮肤,请前往相关活动或玩法中获取!")); // } else { this.gotoSkinAction(skin_data.config); // } } }, //使用皮肤道具 useSkinItemByID: function useSkinItemByID(have_item, index) { if (have_item.config) { var color = BackPackConst.getWhiteQualityColorStr(have_item.config.quality); var str = cc.js.formatStr(Utils.TI18N("已拥有解锁道具,是否消耗
%s
解锁该皮肤?"), color, have_item.config.name); var callback = function () { this.use_skin_index = index; BackpackController.getInstance().sender10515(have_item.id, 1); }.bind(this); CommonAlert.show(str, Utils.TI18N("确定"), callback, Utils.TI18N("取消"), null, 2, null, { title: Utils.TI18N("解锁皮肤") }); } }, //跳转活动id gotoSkinAction: function gotoSkinAction(config) { var callback = function () { //优先找皮肤活动 if (config.action_bid != 0) { //是否存在 var is_exist = ActionController.getInstance().checkActionExistByActionBid(config.action_bid); if (is_exist) { Utils.closeAllWindow(); this.startUpdate(100, function () { ActionController.getInstance().openActionMainPanel(true, null, config.action_bid); }.bind(this), 1); return; } } if (config.main_id != null) { var is_has = MainUIController.getInstance().getFucntionIconVoById(config.main_id); if (is_has) { Utils.closeAllWindow(); this.startUpdate(100, function () { ActionController.getInstance().openBuySkinWindow(true); }.bind(this), 1); return; } } //没有皮肤活动 找活动商城 var shop_config = Config.exchange_data.data_shop_list[MallConst.MallType.HeroSkin]; if (config.is_shop == 1 && shop_config && shop_config.sort != 0) { MallController.getInstance().openMallPanel(true, MallConst.MallType.HeroSkin); return; } //没有活动商城 提示: message(Utils.TI18N("暂无该皮肤获取途径")); }.bind(this); var str = Utils.TI18N("当前暂未拥有该皮肤,是否前往获取?"); CommonAlert.show(str, Utils.TI18N("确定"), callback, Utils.TI18N("取消"), null, null, null, { title: Utils.TI18N("解锁皮肤") }); }, //更新立绘信息 updateDrawInfo: function updateDrawInfo() { if (!this.skin_config) return; var draw_res_id = this.skin_config.draw_res; if (draw_res_id == null || draw_res_id == "") { draw_res_id = this.getDefaultDrawRes(); } if (draw_res_id) { var bg_res = PathTool.getIconPath("herodraw/herodrawres", draw_res_id); if (this.hero_draw_icon_sp) { this.loadRes(bg_res, function (sp) { this.hero_draw_icon_sp.spriteFrame = sp; }.bind(this)); } if (this.skin_config.scale == 0) { this.hero_draw_icon_nd.scale = 1; } else { this.hero_draw_icon_nd.scale = this.skin_config.scale / 100; } if (this.skin_config.draw_offset && Utils.next(this.skin_config.draw_offset) != null) { var offset_x = this.skin_config.draw_offset[0][0] || 0; var offset_y = this.skin_config.draw_offset[0][1] || 0; this.hero_draw_icon_nd.setPosition(this.hero_draw_icon_x + offset_x, this.hero_draw_icon_y + offset_y); } } }, //显示属性 updateAttrInfo: function updateAttrInfo() { var _this = this; if (!this.skin_config) return; var end_time = this.model.getHeroSkinInfoBySkinID(this.skin_config.skin_id); if (end_time != null) { if (end_time == 0) { this.time_val_lb.string = Utils.TI18N("永久"); this.time_val_lb.node.stopAllActions(); } else { var time = end_time - gcore.SmartSocket.getTime(); if (time <= 0) { this.time_val_lb.string = Utils.TI18N("00:00:00"); } else { Utils.commonCountDownTime(this.time_val_lb, time); } } } var y = 27; var width_item = 150; var offset_x = 150; var size = cc.size(width_item, 35); for (var i in this.attr_item_list) { var v = this.attr_item_list[i]; v.bg_sp.node.active = false; v.key_rt.node.active = false; } var _loop = function _loop(_i2) { var v = _this.skin_config.skin_attr[_i2]; var x = 200 + (_i2 - 1) * width_item + offset_x; if (_this.attr_item_list[_i2] == null) { _this.attr_item_list[_i2] = _this.createAttrItem(x, y, size); } else { _this.attr_item_list[_i2].bg_sp.node.active = true; _this.attr_item_list[_i2].key_rt.node.active = true; } var arr = Utils.commonGetAttrInfoByKeyValue(v[0], v[1]); var str = cc.js.formatStr(" %s + %s", arr.icon, arr.attr_name, arr.attr_val); _this.attr_item_list[_i2].key_rt.string = str; _this.loadRes(arr.res, function (resObject) { this.attr_item_list[_i2].key_rt.addSpriteFrame(resObject); }.bind(_this)); }; for (var _i2 in this.skin_config.skin_attr) { _loop(_i2); } }, //创建属性item createAttrItem: function createAttrItem(x, y, size) { var item = {}; var res = PathTool.getUIIconPath("hero", "partner_skin_03"); item.bg_sp = Utils.createImage(this.attr_panel, null, x, y, cc.v2(0, 0.5), null, 0, true); this.loadRes(res, function (sp) { item.bg_sp.spriteFrame = sp; }); item.bg_sp.node.setContentSize(size); item.key_rt = Utils.createRichLabel(22, this.color_1, cc.v2(0, 0.5), cc.v2(x + 10, y), 24, 380, this.attr_panel, "left"); return item; }, //更新英雄信息 //来源位置 1 表示 按show_btn 的 2 表示 按皮肤头像的 updateHeroInfo: function updateHeroInfo(form_type) { var skin_data = this.skin_data_list[this.select_skin_index]; var hero_config = null; var skin_id = 0; var hero_vo = this.skin_data_list[0]; if (skin_data.is_skin_data) { hero_config = gdata("partner_skin_data", "data_hero_info", [skin_data.skin_id]); skin_id = skin_data.config.skin_id; } this.updateSpine(hero_vo, skin_id, form_type); //说明有传记 if (hero_config) {// this.line_nd.active = true; // this.name_lb.node.active = true; } }, //更新模型,也是初始化模型 //@is_refresh 是否需要检测 updateSpine: function updateSpine(hero_vo, skin_id, form_type) { if (this.record_skin_id != null && this.record_skin_id == skin_id) return; this.record_skin_id = skin_id; var fun = function () { if (!this.spine) { this.spine = new BaseRole(); this.spine.setParent(this.mode_node); this.spine.setPosition(0, 104); this.spine.setData(BaseRole.type.partner, hero_vo, PlayerAction.show, true, 0.45, { skin_id: skin_id }); this.spine.showShadowUI(true); var action = cc.fadeIn(0.2); this.spine.node.runAction(action); } }.bind(this); var callback = function () { this.spine.node.stopAllActions(); this.spine.node.removeFromParent(); this.spine = null; this.can_click_btn = true; fun(); }.bind(this); if (this.spine) { this.can_click_btn = false; if (form_type == 2) { var action = cc.fadeOut(0.2); this.spine.node.runAction(cc.sequence(action, cc.callFunc(callback))); } else { callback(); } } else { fun(); } }, //获取缺省的模型id getDefaultModeRes: function getDefaultModeRes() { var partner_config = this.getPartnerConfig()[0]; var star_config = this.getPartnerConfig()[1]; if (partner_config && star_config) { return star_config.res_id; } }, //获取缺省的模型立绘 getDefaultDrawRes: function getDefaultDrawRes() { var partner_config = this.getPartnerConfig()[0]; var star_config = this.getPartnerConfig()[1]; if (partner_config && star_config) { return partner_config.draw_res; } }, //获取英雄对应配置 getPartnerConfig: function getPartnerConfig() { if (!this.hero_vo) return; if (this.partner_config == null) { this.partner_config = Config.partner_data.data_partner_base[this.hero_vo.bid]; } if (this.partner_config && this.star_config == null) { var key = Utils.getNorKey(this.partner_config.bid, this.partner_config.init_star); this.star_config = gdata("partner_data", "data_partner_star", [key]); } return [this.partner_config, this.star_config]; }, // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象 closeCallBack: function closeCallBack() { if (this.scroll_view) { this.scroll_view.deleteMe(); this.scroll_view = null; } this.time_val_lb.node.stopAllActions(); this.ctrl.openHeroSkinWindow(); } }); cc._RF.pop();