"use strict"; cc._RF.push(module, 'fe2c40l05tGiJkMi1UQh/Ql', 'battle_drama_map_window'); // Scripts/mod/battle_drama/view/battle_drama_map_window.js "use strict"; // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 这里是描述这个窗体的作用的 //
Create: 2019-03-25 10:03:05 // -------------------------------------------------------------------- var PathTool = require("pathtool"); var Battle_dramaEvent = require("battle_drama_event"); var BattleConst = require("battle_const"); var MainuiController = require("mainui_controller"); var BattleEvent = require("battle_event"); var BattleDramaMainPointItem = require("battle_drama_main_point_item"); var BaseRole = require("baserole"); var RoleController = require("role_controller"); var Battle_drama_mapWindow = cc.Class({ "extends": BaseView, ctor: function ctor() { this.prefabPath = PathTool.getPrefabPath("battledrama", "battle_drama_map_windows"); this.viewTag = SCENE_TAG.ui; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意 this.win_type = WinType.Big; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips this.ctrl = arguments[0]; this.model = this.ctrl.getModel(); }, // 初始化一些配置数据,可以用于声明一些变量之类的 initConfig: function initConfig() {}, // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件 openCallBack: function openCallBack() { this.background = this.root_wnd.getChildByName("backgroundGroup"); this.graphics = this.background.getComponent(cc.Graphics); this.background.scale = FIT_SCALE; var main_container = this.root_wnd.getChildByName("main_container"); this.main_container = main_container; this.map_layout = main_container.getChildByName("map_layout"); this.pos_label = main_container.getChildByName("pos_label").getComponent(cc.Label); this.close_btn = main_container.getChildByName("close_btn"); this.btn_world = main_container.getChildByName("btn_world"); // 画网格线 var space = 50; var line_num_x = Math.floor(SCREEN_WIDTH / space / 2); var line_num_y = Math.floor(SCREEN_HEIGHT / space / 2); for (var i = 1; i <= line_num_y; i++) { // gcore.Timer.set(function () { var beginPos = cc.v2(-this.background.width / 2, i * space * 2 - this.background.height / 2); var endPos = cc.v2(SCREEN_WIDTH - this.background.width / 2, i * space * 2 - this.background.height / 2); this.graphics.moveTo(beginPos.x, beginPos.y); this.graphics.lineTo(endPos.x, endPos.y); // }.bind(this), 4 * i/ 60, 1); } for (var i = 1; i <= line_num_x; i++) { // gcore.Timer.set(function () { var beginPos = cc.v2(i * space * 2 - this.background.width / 2, -this.background.height / 2); var endPos = cc.v2(i * space * 2 - this.background.width / 2, SCREEN_HEIGHT - this.background.height / 2); this.graphics.moveTo(beginPos.x, beginPos.y); this.graphics.lineTo(endPos.x, endPos.y); // }.bind(this), 4 * i/ 60, 1); } this.graphics.stroke(); }, // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent registerEvent: function registerEvent() { Utils.onTouchEnd(this.close_btn, function () { this._onClickCloseBtn(); }.bind(this), 2); Utils.onTouchEnd(this.btn_world, function () { this._onClickWorldBtn(); }.bind(this), 1); //当用户点击的时候记录鼠标点击状态 this.map_layout.on(cc.Node.EventType.TOUCH_START, function (event) { this.map_layout.stopAllActions(); return true; }, this); //只有当用户鼠标按下才能拖拽 this.map_layout.on(cc.Node.EventType.TOUCH_MOVE, function (event) { var touches = event.getTouches(); this.last_point = touches[0].getDelta(); this.moveMapLayer(this.last_point.x, this.last_point.y); }, this); //当鼠标抬起的时候恢复状态 this.map_layout.on(cc.Node.EventType.TOUCH_END, function (event) { if (this.last_point) { var pos_x = this.map_layout.x + this.last_point.x + 15; if (this.last_point.x < 0) { pos_x = this.map_layout.x + this.last_point.x - 15; } var return_pos = this.checkMapLayerPoint(pos_x); this.map_layout.stopAllActions(); this.map_layout.runAction(cc.moveTo(0.4, return_pos)); } }, this); this.addGlobalEvent(Battle_dramaEvent.BattleDrama_Update_Data, function (data) { if (data.chapter_id != this.chapter_id) { if (this.root_wnd) { this.drama_data = this.model.getDramaData(); this.chapter_id = this.drama_data.chapter_id; this.updateMapImage(); this.updateMapPoint(); this.updateBaseInfo(); } } else { if (this.root_wnd) { this.updateMapPointStatus(); } } }.bind(this)); this.addGlobalEvent(BattleEvent.MOVE_DRAMA_EVENT, function (combat_type) { if (combat_type == BattleConst.Fight_Type.Darma && this.drama_data && MainuiController.getInstance().checkIsInDramaUIFight()) { this.is_move_start = true; this.moveMapTag(true); this.ctrl.send13020(); } }.bind(this)); this.addGlobalEvent(Battle_dramaEvent.UpdateDramaProgressDataEvent, function (val) { var val_str = val / 1000 + "%"; this.progress_label.string = cc.js.formatStr(Utils.TI18N("已超过%s的玩家进度"), val_str); }.bind(this)); }, moveMapLayer: function moveMapLayer(x, y) { x = this.map_layout.x + x; y = this.map_layout.y + y; var return_pos = this.checkMapLayerPoint(x, y); this.map_layout.setPosition(return_pos.x, return_pos.y); }, checkMapLayerPoint: function checkMapLayerPoint(x, y) { var map_layout_size = this.map_layout.getContentSize(); if (x > 0) { x = 0; } else if (x < SCREEN_WIDTH - map_layout_size.width) { x = SCREEN_WIDTH - map_layout_size.width; } return cc.v2(x, 0); }, _onClickCloseBtn: function _onClickCloseBtn() { this.ctrl.openBattleDramaMapWindows(false); }, _onClickWorldBtn: function _onClickWorldBtn() { var WorldmapController = require("worldmap_controller"); WorldmapController.getInstance().openWorldMapMainWindow(true); }, // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了 openRootWnd: function openRootWnd(chapter_id) { this.drama_data = this.model.getDramaData(); if (this.drama_data && Utils.next(this.drama_data) != null) { this.chapter_id = chapter_id || this.drama_data.chapter_id; this.updateMapImage(); this.updateMapPoint(); this.updateBaseInfo(); this.ctrl.send13020(); } }, // 更新基础信息 updateBaseInfo: function updateBaseInfo() { if (this.drama_data) { var drama_config = gdata("dungeon_data", "data_drama_dungeon_info", this.drama_data.dun_id); if (drama_config) { this.pos_label.string = cc.js.formatStr(Utils.TI18N("当前关卡:%s"), drama_config.name); } } }, // 更新地图资源 updateMapImage: function updateMapImage() { var _config = Config.dungeon_data.data_drama_world_info[this.drama_data.mode]; if (_config && _config[this.chapter_id]) { var map_id = _config[this.chapter_id].map_id; var map_bg_res = PathTool.getBattleSceneRes(cc.js.formatStr("%s/blayer/big_map", map_id), false); if (!this.map_bg) { this.map_bg = Utils.createImage(this.map_layout, null, 0, 130, cc.v2(0, 0)); this.map_bg.type = cc.Sprite.Type.SIMPLE; this.map_bg.sizeMode = cc.Sprite.SizeMode.CUSTOM; this.map_bg.node.setContentSize(cc.size(1024, 1024)); } this.loadRes(map_bg_res, function (resObject) { this.map_bg.spriteFrame = resObject; var map_bg_size = this.map_bg.node.getContentSize(); this.map_layout.setContentSize(cc.size(map_bg_size.width, 1280)); }.bind(this)); } }, // 更新地图节点 updateMapPoint: function updateMapPoint() { if (this.main_point_list && Utils.next(this.main_point_list || []) != null) { for (var i in this.main_point_list) { if (this.main_point_list[i]) { this.main_point_list[i].clearInfo(); this.main_point_list[i].DeleteMe(); } } } this.main_point_list = []; var dun_data = this.model.getInitDungeonList(); if (dun_data) { var item = null; var createNextNum = 0; for (var i in dun_data) { var v = dun_data[i]; v.v_data = this.model.getCurDunInfoByID(v.info_data.id); var isCreate = false; if (v.v_data.status > 0) { isCreate = true; } else if (createNextNum <= 0) { createNextNum = 1; isCreate = true; } if (isCreate) { Utils.delayRun(this.main_container, 4 * i / 40, function (v) { if (!this.main_point_list[v.info_data.id]) { item = new BattleDramaMainPointItem(); this.main_point_list[v.info_data.id] = item; if (this.map_layout) { this.map_layout.addChild(item.root_wnd, 98); } } item = this.main_point_list[v.info_data.id]; if (item) { item.setPosition(v.info_data.pos[0], v.info_data.pos[1] + 130); item.setData(v); } }.bind(this, v)); } } } if (!this.cur_tag_container) { this.cur_tag_container = new cc.Node(); this.cur_tag_container.setContentSize(cc.size(50, 50)); this.cur_tag_container.setAnchorPoint(cc.v2(0.5, 0.5)); this.map_layout.addChild(this.cur_tag_container, 99); this.createRole(PlayerAction.battle_stand); } this.updateMapPointStatus(); }, createRole: function createRole(action_name) { if (this.spine_model) { this.spine_model.deleteMe(); this.spine_model = null; } if (!this.spine_model) { this.cur_action_name = action_name; var look_id = RoleController.getInstance().getRoleVo().look_id; var res_id = "110401"; // 默认显示该模型 res_id = look_id || res_id; this.spine_model = new BaseRole(); this.spine_model.setParent(this.cur_tag_container); this.spine_model.setData(BaseRole.type.role, res_id, action_name, true, 0.7); if (this.spine_model.node) { this.spine_model.node.scaleX = 0.7 * this.getDir(); this.spine_model.node.setPosition(this.cur_tag_container.getContentSize().width / 2, -15); } var height = this.spine_model.node.getBoundingBox().height || 90; if (!this.cur_effect) { var node = new cc.Node(); node.setContentSize(cc.size(25, 130)); node.setAnchorPoint(0.5, 0.5); node.setPosition(25, height); this.cur_tag_container.addChild(node); this.cur_effect = node.addComponent(sp.Skeleton); var anima_path = PathTool.getSpinePath(Config.effect_data.data_effect_info[105], "action"); this.loadRes(anima_path, function (ske_data) { this.cur_effect.skeletonData = ske_data; this.cur_effect.setAnimation(0, PlayerAction.action, true); }.bind(this)); } if (!this.progress_bg) { this.progress_bg = Utils.createImage(this.cur_tag_container, null, this.cur_tag_container.getContentSize().width / 2, -35, cc.v2(0.5, 0.5)); this.progress_bg.node.scaleX = 9.4; this.loadRes(PathTool.getUIIconPath("battledrama", "battledrama_1012"), function (resObject) { this.progress_bg.spriteFrame = resObject; }.bind(this)); } if (!this.progress_label) { this.progress_label = Utils.createRichLabel(16, new cc.Color(0xff, 0xff, 0xff, 0xff), cc.v2(0.5, 0.5), cc.v2(this.cur_tag_container.getContentSize().width / 2, -35), 30); this.cur_tag_container.addChild(this.progress_label.node); this.progress_label.string = Utils.TI18N("已超过?的玩家进度"); } } }, getDir: function getDir() { var scale = 1; var item = this.main_point_list[this.drama_data.dun_id]; if (item) { var max_item = this.main_point_list[this.drama_data.max_dun_id]; var cur_x = item.getPositionX(); var max_x = 0; if (max_item) { max_x = max_item.getPositionX(); } if (cur_x > max_x) { scale = 1; } else { scale = -1; } } return scale; }, updateMapPointStatus: function updateMapPointStatus() { this.drama_data = this.model.getDramaData(); if (this.drama_data) { var v_data = this.model.getCurDunInfoByID(this.drama_data.dun_id); var config = gdata("dungeon_data", "data_drama_dungeon_info", this.drama_data.dun_id); if (config) { if (this.main_point_list && this.main_point_list[this.drama_data.dun_id]) { var item = this.main_point_list[this.drama_data.dun_id]; var is_big = config.is_big; item.updateStatus(v_data.status, is_big); } if (!this.is_move_start) { this.moveMapTag(); this.is_move_start = true; } } } }, // 移动角色形象 moveMapTag: function moveMapTag(is_start) { if (this.drama_data) { var info_config = gdata("dungeon_data", "data_drama_dungeon_info", this.drama_data.dun_id); if (info_config) { var cur_main_point = info_config.pos; if (cur_main_point) { if (!is_start) { this.cur_tag_container.setPosition(cur_main_point[0] - 50 / 2, cur_main_point[1] + 140); } else { this.cur_tag_container.runAction(cc.sequence(cc.delayTime(0.1), cc.spawn(cc.callFunc(function () { this.createRole(PlayerAction.run); }.bind(this)), cc.moveTo(0.5, cc.v2(cur_main_point[0] - 50 / 2, cur_main_point[1] + 140))), cc.callFunc(function () { this.createRole(PlayerAction.battle_stand); }.bind(this)))); } } } } }, // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象 closeCallBack: function closeCallBack() { if (this.main_point_list) { for (var i in this.main_point_list) { if (this.main_point_list[i]) { this.main_point_list[i].DeleteMe(); } } } if (this.spine_model) { this.spine_model.deleteMe(); this.spine_model = null; } if (this.cur_effect) { this.cur_effect.setToSetupPose(); this.cur_effect.clearTracks(); this.cur_effect = null; } this.ctrl.openBattleDramaMapWindows(false); } }); cc._RF.pop();