"use strict";
cc._RF.push(module, '09a99xrtDJLHpoJEKE75Ygs', 'voyage_main_window');
// Scripts/mod/voyage/view/voyage_main_window.js
"use strict";
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
// 这里是描述这个窗体的作用的
//
Create: 2019-03-07 11:23:08
// --------------------------------------------------------------------
var PathTool = require("pathtool");
var RoleController = require("role_controller");
var CommonScrollView = require("common_scrollview");
var VoyageController = require("voyage_controller");
var VoyageEvent = require("voyage_event");
var BackPackConst = require("backpack_const");
var BackpackController = require("backpack_controller");
var VoyageOrderItem = require("voyage_order_item");
var VoyageConst = require("voyage_const");
var Voyage_mainWindow = cc.Class({
"extends": BaseView,
ctor: function ctor() {
this.prefabPath = PathTool.getPrefabPath("voyage", "voyage_main_window");
this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
this.win_type = WinType.Big; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
},
// 初始化一些配置数据,可以用于声明一些变量之类的
initConfig: function initConfig() {
this.role_vo = RoleController.getInstance().getRoleVo();
this.ctrl = VoyageController.getInstance();
this.model = this.ctrl.getModel();
},
// 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
openCallBack: function openCallBack() {
this.background = this.seekChild("background");
this.background.scale = FIT_SCALE;
this.main_container = this.seekChild("main_container");
this.top_bg_sp = this.seekChild(this.main_container, "top_bg", cc.Sprite);
this.loadRes(PathTool.getBigBg("txt_cn_bigbg_22"), function (res) {
this.top_bg_sp.spriteFrame = res;
}.bind(this));
this.refresh_btn_nd = this.seekChild("refresh_btn");
this.refresh_btn_lb = this.seekChild(this.refresh_btn_nd, "label", cc.Label);
this.refresh_btn_img_sp = this.seekChild(this.refresh_btn_nd, "img", cc.Sprite);
this.refresh_btn_img_sp.node.active = false;
this.special_btn_nd = this.seekChild("special_btn");
this.explain_btn_nd = this.seekChild("explain_btn");
this.special_sk = this.seekChild(this.special_btn_nd, "special_sk", sp.Skeleton);
this.progress_pb = this.seekChild(this.main_container, "progress", cc.ProgressBar);
this.progress_pb.progress = 0;
this.progress_value_lb = this.seekChild(this.main_container, "progress_value", cc.Label);
this.no_order_image_nd = this.seekChild(this.main_container, "no_order_image"); //刷新道具消耗
var cost_config = Config.shipping_data.data_const["refresh_cost"];
this.cost_item_bid = cost_config.val[0][0];
this.cost_item_num = cost_config.val[0][1];
this.item_count_lb = this.seekChild(this.main_container, "item_count", cc.Label);
var item_config = Utils.getItemConfig(this.cost_item_bid);
var res_icon_sp = this.seekChild(this.main_container, "res_icon", cc.Sprite);
var item_icon_sp = this.seekChild(this.main_container, "item_icon", cc.Sprite);
this.loadRes(PathTool.getItemRes(7), function (sf_obj) {
res_icon_sp.spriteFrame = sf_obj;
}.bind(this));
this.loadRes(PathTool.getItemRes(item_config.icon), function (sf_obj) {
item_icon_sp.spriteFrame = sf_obj;
}.bind(this));
var order_list_nd = this.seekChild(this.main_container, "order_list");
var bgSize = order_list_nd.getContentSize();
var tab_size = cc.size(bgSize.width - 10, bgSize.height - 10);
var setting = {
item_class: VoyageOrderItem,
// 单元类
start_x: 5,
// 第一个单元的X起点
space_x: 0,
// x方向的间隔
start_y: 0,
// 第一个单元的Y起点
space_y: 0,
// y方向的间隔
item_width: 631,
// 单元的尺寸width
item_height: 171,
// 单元的尺寸height
row: 0,
// 行数,作用于水平滚动类型
col: 1,
// 列数,作用于垂直滚动类型
need_dynamic: true
};
this.order_scrollview = new CommonScrollView();
this.order_scrollview.createScroll(order_list_nd, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, tab_size, setting, cc.v2(0.5, 0.5));
},
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
registerEvent: function registerEvent() {
Utils.onTouchEnd(this.background, function () {
this.ctrl.openVoyageMainWindow(false);
}.bind(this), 2);
this.explain_btn_nd.on(cc.Node.EventType.TOUCH_END, function (event) {
Utils.playButtonSound(1);
var explain_config = Config.shipping_data.data_explain[1];
var pos = event.touch.getLocation();
if (explain_config) require("tips_controller").getInstance().showCommonTips(StringUtil.parse(explain_config.desc), pos);
});
this.special_btn_nd.on(cc.Node.EventType.TOUCH_END, function (event) {
Utils.playButtonSound(1);
var pos = event.touch.getLocation();
this._onClickSpecialBtn(pos);
}, this);
Utils.onTouchEnd(this.refresh_btn_nd, function () {
var is_first = this.model.getFirstFresh();
var p_1 = RoleController.getInstance().getModel().checkPrivilegeStatus(3);
var p_2 = RoleController.getInstance().getModel().checkPrivilegeStatus(2);
if (is_first && !p_1 && !p_2) {
var refresh_config = Config.shipping_data.data_refresh[this.role_vo.vip_lev];
if (!refresh_config) return;
var free_times = this.model.getFreeTimes();
var free_count = refresh_config.free_times; //免费刷新上限
if (free_times >= free_count) {
this.ctrl.send23820();
var fun = function () {
require("vip_controller").getInstance().openVipMainWindow(true, VIPTABCONST.PRIVILEGE);
this.ctrl.openVoyageMainWindow(false);
}.bind(this);
var str = cc.js.formatStr(Utils.TI18N("获取远航特权,每日首次钻石、刷新券刷新必出高品质远航任务,完成可获高额奖励!!!"));
require("commonalert").show(str, Utils.TI18N("立即前往"), fun, Utils.TI18N("残忍拒绝"), null, 1);
return;
}
}
if (this.model.checkIsHaveHigherEpicOrder()) {
var fun = function () {
this.ctrl.requestRefreshOrder();
}.bind(this);
var str = cc.js.formatStr(Utils.TI18N("有紫色以上的远航任务未接取,是否继续?"));
require("commonalert").show(str, Utils.TI18N("确定"), fun, Utils.TI18N("取消"), null, 1);
} else {
this.ctrl.requestRefreshOrder();
}
}.bind(this), 1); //更新所有订单数据
this.addGlobalEvent(VoyageEvent.UpdateVoyageDataEvent, function () {
this.refreshOrderList();
this.refreshBtnStatus();
}, this); //删除订单
this.addGlobalEvent(VoyageEvent.DeleteOrderDataEvent, function () {
this.refreshOrderList();
}, this);
if (this.role_assets_event == null) {
if (this.role_vo == null) {
this.role_vo = RoleController.getInstance().getRoleVo();
}
this.role_assets_event = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, value) {
if (key == "energy") {
this.refreshProgressInfo();
} else if (key == "vip_lev") {
this.refreshBtnStatus();
}
}, this);
} //刷新道具数量更新
this.addGlobalEvent(EventId.ADD_GOODS, function (bag_code, item_list) {
if (bag_code != BackPackConst.Bag_Code.BACKPACK) return;
this.checkNeedUpdateItemNum(item_list);
}, this);
this.addGlobalEvent(EventId.MODIFY_GOODS_NUM, function (bag_code, item_list) {
if (bag_code != BackPackConst.Bag_Code.BACKPACK) return;
this.checkNeedUpdateItemNum(item_list);
}, this);
this.addGlobalEvent(EventId.DELETE_GOODS, function (bag_code, item_list) {
if (bag_code != BackPackConst.Bag_Code.BACKPACK) return;
this.checkNeedUpdateItemNum(item_list);
}, this);
},
// 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
openRootWnd: function openRootWnd() {
//判断本地是否有订单缓存数据,没有则请求
if (this.model.checkIsHaveOrderData()) {
this.refreshOrderList();
this.refreshBtnStatus();
} else {
this.ctrl.requestVoyageInfo();
}
this.refreshProgressInfo();
this.refreshItemNum();
this.updateSpecialEffectStatus();
},
//更新所有订单列表
refreshOrderList: function refreshOrderList() {
var order_data = this.model.getAllOrderList();
if (!order_data || Utils.next(order_data) == null) {
// this.no_order_image_nd.active = true;
this.no_order_image_nd.setPosition(0, 0);
if (this.no_order_image_sp == null) {
this.no_order_image_sp = this.no_order_image_nd.getComponent(cc.Sprite);
this.loadRes(PathTool.getBigBg("bigbg_3"), function (sp) {
this.no_order_image_sp.spriteFrame = sp;
}.bind(this));
}
this.order_scrollview.setData([]);
} else {
var _temp_sort_index;
//排序规则 已完成>可接取>进行中
var temp_sort_index = (_temp_sort_index = {}, _defineProperty(_temp_sort_index, VoyageConst.Order_Status.Finish, 1), _defineProperty(_temp_sort_index, VoyageConst.Order_Status.Unget, 2), _defineProperty(_temp_sort_index, VoyageConst.Order_Status.Underway, 3), _temp_sort_index);
var sortFunc = function sortFunc(objA, objB) {
var sort_index_a = temp_sort_index[objA.status];
var sort_index_b = temp_sort_index[objB.status]; //引导需要订单号为1的放在最前面
if (objA.order_id == 1 && objA.status == VoyageConst.Order_Status.Unget && objB.order_id != 1) {
return -1;
} else if (objA.order_id != 1 && objB.order_id == 1 && objB.status == VoyageConst.Order_Status.Unget) {
return 1;
} else if (sort_index_a == sort_index_b) {
//未接取的按照品质排序,已接取和已完成的按照完成时间排序
if (objA.status == VoyageConst.Order_Status.Unget) {
return objB.config.quality - objA.config.quality;
} else {
return objA.end_time - objB.end_time;
}
} else {
return sort_index_a - sort_index_b;
}
};
order_data.sort(sortFunc);
for (var i in order_data) {
order_data[i].index = i;
}
this.order_scrollview.setData(order_data); // this.no_order_image_nd.active = false;
this.no_order_image_nd.setPosition(1000, 0);
}
},
//更新刷新按钮状态
refreshBtnStatus: function refreshBtnStatus() {
var refresh_config = Config.shipping_data.data_refresh[this.role_vo.vip_lev];
if (!refresh_config) return;
var free_times = this.model.getFreeTimes();
var free_count = refresh_config.free_times; //免费刷新上限
if (free_times < free_count) {
this.refresh_btn_lb.string = Utils.TI18N("免费刷新");
this.refresh_btn_img_sp.node.active = false;
return;
} //道具
var count = BackpackController.getInstance().getModel().getItemNumByBid(this.cost_item_bid);
if (count >= this.cost_item_num) {
var item_config = Utils.getItemConfig(this.cost_item_bid);
var res = PathTool.getItemRes(item_config.icon);
this.refresh_btn_lb.string = cc.js.formatStr(" %d 刷新", this.cost_item_num);
this.loadRes(res, function (sf_obj) {
this.refresh_btn_img_sp.spriteFrame = sf_obj;
}.bind(this));
this.refresh_btn_img_sp.node.active = true;
return;
} //钻石
var coin_times = this.model.getCoinTimes();
var coin_count = refresh_config.all_times;
if (coin_times < coin_count) {
var bid = refresh_config.expend[0][0];
var num = refresh_config.expend[0][1];
var item_config = Utils.getItemConfig(bid);
var res = PathTool.getItemRes(item_config.icon);
this.refresh_btn_lb.string = cc.js.formatStr(" %d 刷新", num);
this.loadRes(res, function (sf_obj) {
this.refresh_btn_img_sp.spriteFrame = sf_obj;
}.bind(this));
this.refresh_btn_img_sp.node.active = true;
return;
}
this.refresh_btn_lb.string = Utils.TI18N("刷新");
this.refresh_btn_img_sp.node.active = false;
},
//更新冒险情报进度
refreshProgressInfo: function refreshProgressInfo() {
if (this.role_vo) {
var cur_energy = this.role_vo.energy;
var max_energy = this.role_vo.energy_max;
var percent = cur_energy / max_energy;
this.progress_value_lb.string = cur_energy + "/" + max_energy;
this.progress_pb.progress = percent;
}
},
//更新刷新道具数量
refreshItemNum: function refreshItemNum() {
var count = BackpackController.getInstance().getModel().getItemNumByBid(this.cost_item_bid);
this.item_count_lb.string = count;
},
checkNeedUpdateItemNum: function checkNeedUpdateItemNum(item_list) {
if (item_list == null || Utils.next(item_list) == null) return;
for (var k in item_list) {
var v = item_list[k];
if (v.config) {
var bid = v.config.id;
if (this.cost_item_bid && bid == this.cost_item_bid) {
this.refreshItemNum();
this.refreshBtnStatus();
break;
}
}
}
},
//刷新特效显示状态
updateSpecialEffectStatus: function updateSpecialEffectStatus() {
var one_time_pri = RoleController.getInstance().getModel().checkPrivilegeStatus(2);
var three_time_pri = RoleController.getInstance().getModel().checkPrivilegeStatus(3);
if (one_time_pri || three_time_pri) {
this.handleEffect(true);
} else {
this.handleEffect(false);
}
},
//激活特权特效显示
handleEffect: function handleEffect(status) {
if (status == false) {
if (this.special_sk) {
this.special_sk.setToSetupPose();
this.special_sk.clearTracks();
}
} else {
if (this.special_sk) {
var res = cc.js.formatStr("spine/%s/action.atlas", PathTool.getEffectRes(628));
this.loadRes(res, function (res_object) {
this.special_sk.skeletonData = res_object;
this.special_sk.setAnimation(1, PlayerAction.action, true);
}.bind(this));
}
}
},
_onClickSpecialBtn: function _onClickSpecialBtn(pos) {
var tips_str = "";
for (var i = 1; i <= 2; i++) {
var explain_config = Config.shipping_data.data_explain[i + 1];
if (explain_config) {
var status = RoleController.getInstance().getModel().checkPrivilegeStatus(i + 1);
var str = StringUtil.parse(explain_config.desc || "");
if (status) {
str = str + Utils.TI18N(" (已激活)");
} else {
str = str + Utils.TI18N(" (未激活)");
}
if (i == 1) {
tips_str = str;
} else {
tips_str = tips_str + "\n\n\n" + str;
}
}
}
require("tips_controller").getInstance().showCommonTips(tips_str, cc.v2(pos.x, pos.y - 80));
},
// 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
closeCallBack: function closeCallBack() {
if (this.order_scrollview) {
this.order_scrollview.deleteMe();
this.order_scrollview = null;
}
if (this.role_assets_event) {
this.role_vo.unbind(this.role_assets_event);
this.role_assets_event = null;
this.role_vo = null;
}
this.handleEffect(false);
var GuideEvent = require("guide_event");
gcore.GlobalEvent.fire(GuideEvent.CloseTaskEffect);
this.ctrl.openVoyageMainWindow(false);
}
});
cc._RF.pop();