// --------------------------------------------------------------------
// @author: shiraho@syg.com(必填, 创建模块的人员)
// @description:
// 竖版排行榜排行界面
//
Create: new Date().toISOString()
// --------------------------------------------------------------------
var PathTool = require("pathtool");
var RankController = require("rank_controller");
var RankConstant = require("rank_constant");
var RankEvent = require("rank_event");
var ArenaEvent = require("arena_event");
var CommonScrollView = require("common_scrollview");
var RankItem = require("rank_item");
var RoleController = require("role_controller");
var PlayerHead = require("playerhead");
var TimeTool = require("timetool");
var HeroVo = require("hero_vo");
var RankWindow = cc.Class({
extends: BaseView,
ctor: function () {
this.prefabPath = PathTool.getPrefabPath("rank", "rank_window");
this.win_type = WinType.Big;
this.viewTag = SCENE_TAG.dialogue;
this.ctrl = RankController.getInstance();
this.cur_type = 0;
this.res_list = {};
this.tab_info_list = {};
this.first_list = {};
this.click_index = arguments[0] || 1;
this.is_cluster = arguments[1] || false;
this.node_list = [];
},
openCallBack: function () {
this.background = this.seekChild("background");
this.background.scale = FIT_SCALE;
this.main_panel = this.seekChild("main_container");
this.close_btn = this.seekChild(this.main_panel, "close_btn");
this.rank_panel = this.seekChild(this.main_panel, "rank_panel");
this.my_rank = this.seekChild(this.main_panel, "my_rank");
this.seekChild(this.my_rank, "title", cc.Label).string = Utils.TI18N("我的排名");
this.rank_index = this.seekChild(this.my_rank, "rank_id",cc.Label);
this.four_label = this.seekChild(this.my_rank, "four_label", cc.RichText);
this.my_rank_power = this.seekChild(this.my_rank, "my_rank_power", cc.Label);
this.my_head = new PlayerHead();
this.my_head.setParent(this.my_rank);
this.my_head.show()
this.my_head.setPosition(-155, 60);
// this.my_head.setVisible(false);
this.my_head.setScale(0.9)
this.no_rank = this.seekChild(this.my_rank, "no_rank", cc.Label);
this.my_name = this.seekChild(this.my_rank, "my_name", cc.Label);
this.no_rank.string = "未上榜";
this.my_name.string = "";
this.title_con = this.seekChild(this.main_panel, "title_con");
var title = this.seekChild(this.title_con, "title_label", cc.Label);
var name = RankConstant.TitleName[this.click_index] || "";
title.string = name;
this.top_bg = this.seekChild(this.main_panel, "top_bg", cc.Sprite);
this.top_bg.node.setScale(0.9, 0.9);
var res_id = PathTool.getBigBg("rank_1", null, "rank");
this.loadRes(res_id, function (sf_obj) {
this.top_bg.spriteFrame = sf_obj;
}.bind(this))
this.top_container = this.seekChild("top_container");
this.top_rank_list = {};//顶部前3;
for (var i = 1; i <= 3; i++) {
var label = this.seekChild(this.top_container, "name_" + i, cc.Label);
var img = this.seekChild(this.top_container, "guan_" + i);
if (this.top_rank_list[i] == null) {
this.top_rank_list[i] = {};
this.top_rank_list[i].label = label;
this.top_rank_list[i].img = img;
}
}
this.updateTitle();
},
registerEvent: function () {
this.background.on(cc.Node.EventType.TOUCH_END, function () {
this.ctrl.openRankView(false);
}, this)
this.close_btn.on(cc.Node.EventType.TOUCH_END, function () {
this.ctrl.openRankView(false);
}, this)
this.addGlobalEvent(RankEvent.RankEvent_Get_Rank_data, function (data) {
this.updateRankList(data);
}, this)
this.addGlobalEvent(ArenaEvent.UpdateLoopChallengeRank, function (data) {
this.updateRankList(data);
}, this)
this.addGlobalEvent(RankEvent.RankEvent_Get_Time_event, function (data) {
if (!data || !this.click_index) return
var index = this.click_index || RankConstant.RankType.drama;
if (data.type && index != data.type) return
// var info = SysEnv.getInstance().loadRankFile(index, this.is_cluster);
// if (!info || Utils.next(info) == null) {
// this.senProto(index);
// } else {
// if (data.time && info.data && data.type && (data.time == 0 || data.time == info.timestamp) && index == data.type) {
// this.updateRankList(info.data);
// } else {
this.senProto(index);
// }
// }
}, this)
//--公会boss使用的监听
if (this.click_index == RankConstant.RankType.union_boss) {
var GuildbossEvent = require("guildboss_event");
var GuildbossConst = require("guildboss_const");
this.addGlobalEvent(GuildbossEvent.UpdateGuildDunRank, function (data, index) {
if (index == GuildbossConst.rank.role) {
this.updateRankList(data);
}
}, this)
var RoleEvent = require("role_event");
this.addGlobalEvent(RoleEvent.WorshipOtherRole, function (data) {
cc.log(data,this.select_item)
if (data.idx != null && this.select_item != null && this.select_item.data != null) {
if (data.idx == this.select_item.data.rank)
this.select_item.updateWorshipStatus();
}
}, this)
}
},
openRootWnd: function (data) {
if (data == null) {
this.ctrl.send_12901(this.click_index, this.is_cluster);
} else {
this.data = data;
var protocal = {
boss_id: this.data.boss_id,
start_num: 1,
end_num: 100
}
var GuildbossConst = require("guildboss_const");
require("guildboss_controller").getInstance().requestGuildDunRank(GuildbossConst.rank.role, protocal)
}
},
//更新标题
updateTitle: function () {
var title_list = RankConstant.RankTitle[this.click_index] || {};
var num = Object.keys(title_list).length || 0;
var pos_list = RankConstant.TitlePos[this.click_index] || {};
var line_pos_list = RankConstant.TitleLinePos[this.click_index] || {};
for (var i = 1; i <= num; i++) {
if (i != num) {
this.createImage(line_pos_list[i])
}
var offx = pos_list[i] || 0;
var label = Utils.createLabel(24, new cc.Color(0x68, 0x45, 0x2a, 0xff), null, offx - 336, 230, "", this.main_panel, 0, cc.v2(0, 0.5))
var str = title_list[i] || "";
label.string = str;
this.node_list.push(label);
}
},
createImage: function (x) {
var line_offx = x || 0;
var res = PathTool.getCommonIcomPath("common_1069");
var line = Utils.createImage(this.main_panel, res, line_offx - 338, 230, cc.v2(0, 0.5), true, 1, false);
this.loadRes(res, function (sf_obj) {
line.spriteFrame = sf_obj;
}.bind(this))
line.node.setScale(1, 0.8);
this.node_list.push(line);
},
updateRankList: function (data) {
this.data = data;
this.updateMyData();
this.updateRankData();
if (!this.list_view) {
var list_size = cc.size(610, 530);
var setting = {
item_class: RankItem, // 单元类
start_x: 5, // 第一个单元的X起点
space_x: 0, // x方向的间隔
start_y: 0, // 第一个单元的Y起点
space_y: 0, // y方向的间隔
item_width: 600, // 单元的尺寸width
item_height: 120, // 单元的尺寸height
row: 0, // 行数,作用于水平滚动类型
col: 1, // 列数,作用于垂直滚动类型
need_dynamic: true
}
this.list_view = new CommonScrollView()
this.list_view.createScroll(this.rank_panel, cc.v2(0, -28), ScrollViewDir.vertical, ScrollViewStartPos.top, list_size, setting, cc.v2(0.5, 0.5))
}
if (!data || Utils.next(data) == null) {
this.senProto(this.click_index);
return
}
var list = data.rank_list || {};
this.showEmptyIcon(false);
if (list.length <= 0) {
this.showEmptyIcon(true);
}
var callback = function (item, vo) {
}
if (this.click_index == RankConstant.RankType.union_boss) {
callback = function (item) {
this.worshipOtherRole(item);
}.bind(this)
}
this.list_view.setData(list, callback, { rank_type: this.click_index, is_cluster: this.is_cluster });
},
worshipOtherRole: function (item) {
if (item.data != null) {
this.select_item = item;
}
},
//显示空白
showEmptyIcon: function (bool) {
if (!this.empty_con && bool == false) return
if (!this.empty_con) {
var size = cc.size(200, 200);
this.empty_con = new cc.Node();
this.empty_con.setContentSize(size);
this.empty_con.setAnchorPoint(cc.v2(0.5, 0.5));
this.empty_con.setPosition(cc.v2(0, 0));
this.main_panel.addChild(this.empty_con);
var res = PathTool.getBigBg("bigbg_3");
this.empty_bg = Utils.createImage(this.empty_con, null, 0, 0, cc.v2(0.5, 0.5), false)
this.loadRes(res, function (sf_obj) {
this.empty_bg.spriteFrame = sf_obj;
}.bind(this))
this.empty_label = Utils.createLabel(26, new cc.Color(0x68, 0x45, 0x2a, 0xff), null, 0, -100, "", this.empty_con, 0, cc.v2(0.5, 0.5));
}
var str = Utils.TI18N("当前排行榜暂无数据");
this.empty_label.string = str;
this.empty_con.active = bool;
},
senProto: function (index) {
if (index == RankConstant.RankType.union) {
this.ctrl.send_12903();
} else if (index == RankConstant.RankType.arena) {
var ArenaController = require("arena_controller");
ArenaController.getInstance().sender20221();
} else if (index == RankConstant.RankType.action_partner) {
this.ctrl.send_12904(0, 100);
} else {
var num = null;
if (index == 2 || index == 3 || index == 6 || index == 18) {
num = 300;
}
this.ctrl.send_12900(index, null, null, this.is_cluster);
}
},
//更新自己数据
updateMyData: function () {
if (!this.data) return
var data = this.data;
var str = "0";
var my_idx = data.my_idx || data.rank || 0;
if (my_idx && my_idx > 0) {
str = my_idx;
}
this.no_rank.node.active = false;
var role_vo = RoleController.getInstance().getRoleVo();
this.rank_index.string = str;
if (my_idx && my_idx >= 1 && my_idx <= 3) {
this.rank_index.node.active = false;
if (!this.my_rank_icon) {
this.my_rank_icon = this.seekChild(this.my_rank, "my_rank_icon", cc.Sprite);
}
this.my_rank_icon.node.active = true;
this.loadRes(PathTool.getCommonIcomPath("common_200" + my_idx), function (sf_obj) {
this.my_rank_icon.spriteFrame = sf_obj;
}.bind(this))
this.my_rank_icon.node.setScale(0.7);
} else {
if (my_idx <= 0) {
this.no_rank.node.active = true;
this.rank_index.node.active = false;
} else {
this.rank_index.node.active = true;
if (this.my_rank_icon)
this.my_rank_icon.node.active = false;
}
}
this.my_head.setHeadRes(role_vo.face_id);
var name = role_vo.name || "";
this.my_name.string = name;
var avatar_bid = role_vo.avatar_base_id;
this.my_head.setFrameRes(avatar_bid);
var str = "";
var res = null;
//- 311是main——panel的width一半,
this.my_rank_power.node.x = 518 - 311;
this.four_label.node.x = 555 - 311;
this.four_label.node.active = true;
if (this.rune_item)
this.rune_item.active = false;
this.my_rank_power.string = "";
this.four_label.node.setPosition(cc.v2(485 - 311, 50));
if (this.click_index == RankConstant.RankType.power || this.click_index == RankConstant.RankType.action_power) {
res = PathTool.getCommonIcomPath("common_90002");
var power = data.my_val1 || 0;
str = cc.js.formatStr("
%s", "common_90002", power)
} else if (this.click_index == RankConstant.RankType.drama || this.click_index == RankConstant.RankType.action_drama) {
var config = gdata("dungeon_data", "data_drama_dungeon_info", [data.my_val1]);
if (config)
str = config.name;
} else if (this.click_index == RankConstant.RankType.union) {
str = cc.js.formatStr("会长名:%s", data.leader_name);
if (role_vo.gid == 0)
str = Utils.TI18N("暂无公会");
this.my_name.string = role_vo.name;
this.my_name.node.setPosition(cc.v2(205 - 311, 82));
this.my_head.setVisible(false);
this.four_label.node.setPosition(cc.v2(205 - 311, 45));
var power = data.power || 0;
if (power <= 0) {
this.my_rank_power.string = "0";
} else {
this.my_rank_power.string = power;
}
this.my_rank_power.node.x = 525 - 300;
} else if (this.click_index == RankConstant.RankType.tower || this.click_index == RankConstant.RankType.action_tower) {
var num = data.my_val2 || 0;
var tim = TimeTool.getTimeMs(num, true);
if (data.my_val1 && data.my_val1 == 0) {
tim = "";
this.four_label.node.active = false;
}
this.my_head.setVisible(true);
this.my_name.node.x = 0;
this.my_rank_power.string = tim;
str = data.my_val1.toString() || "";
this.my_name.node.y = 53;
this.four_label.node.setPosition(cc.v2(420 - 311, 53));
this.my_rank_power.node.setPosition(cc.v2(530 - 311, 53));
} else if (this.click_index == RankConstant.RankType.arena || this.click_index == RankConstant.RankType.action_arena) {
var res = PathTool.getItemRes("8")
var score = this.data.score || this.data.my_val1 || 0
str = cc.js.formatStr( "
%s",8,score)
} else if (this.click_index == RankConstant.RankType.union_boss) {
this.four_label.node.active = true;
this.four_label.node.setPosition(cc.v2(485 - 311, 50))
this.my_name.node.setPosition(cc.v2(275 - 311, 53));
this.my_rank_power.node.setPosition(cc.v2(530 - 311, 53));
this.four_label.string = String(data.mydps || 0);
} else if (this.click_index == RankConstant.RankType.action_star || this.click_index == RankConstant.RankType.star_power ){
}else if (this.click_index == RankConstant.RankType.adventure){
str = data.my_val1.toString() || 0;
var val2_str = (data.my_val2 != 0) && data.my_val2 || "";
this.my_rank_power.string = val2_str;
this.four_label.node.setPosition(cc.v2(420-311,53));
this.my_rank_power.node.setPosition(cc.v2(530-311,53))
}
if (str == 0) {
str = "";
}
this.four_label.string = str;
this.loadRes(res, (function(resObject){
this.four_label.addSpriteFrame(resObject);
}).bind(this));
},
//创建一个英雄数据
createPartnerVo: function () {
var vo = new HeroVo();
var data = {
partner_id: self.data.pid,
bid: self.data.pbid,
lev: self.data.plev,
star: self.data.pstar,
}
vo.updateHeroVo(data);
return vo
},
//更新前三名头像
updateRankData: function () {
if (!this.data) return
var rank_list = this.data.rank_list || {};
var count = 0;
var size = this.main_panel.getContentSize();
for (var i in rank_list) {
var v = rank_list[i];
var idx = v.idx || v.rank;
if (idx > 0 && idx <= 3) {
count = count + 1;
if (!this.first_list[idx]) {
var head = new PlayerHead();
head.show();
var width = 0;
var height = 380;
var off_y = 0;
if (idx == 2) {
width = - 170;
height = 370;
off_y = 6;
} else if (idx == 3) {
width = 170;
height = 370;
off_y = 6;
}
head.setPosition(width, height);
head.setParent(this.main_panel);
var name = this.top_rank_list[count].label;
name.node.active = true;
var title = this.top_rank_list[count].img;
title.active = true;
this.first_list[idx] = title;
this.first_list[idx] = head;
this.first_list[idx].head_name = name;
}
var face_id = v.face_id || v.face || v.leader_face || 0;
var avatar_bid = v.avatar_id || v.avatar_bid || v.leader_avatar_bid || 0;
this.first_list[idx].setFrameRes(avatar_bid);
this.first_list[idx].setHeadRes(face_id);
this.first_list[idx].addCallBack(function (v) {
var roleVo = RoleController.getInstance().getRoleVo();
var rid = v.rid || v.leader_rid || 0;
var srv_id = v.srv_id || v.leader_srvid || 0;
if (roleVo.rid == rid && roleVo.srv_id == srv_id) return
var vo = { rid: rid, srv_id: srv_id };
require("chat_controller").getInstance().openFriendInfo(vo);
}.bind(this,v))
var name = v.name || "";
this.first_list[idx].head_name.string = name;
}
if (count >= 3)
break
}
if (!this.no_label_list) {
this.no_label_list = {};
}
for (var i in this.no_label_list) {
this.no_label_list[i].setVisible(false);
}
var pos_list = { [1]: 336 - size.width / 2, [2]: 167 - size.width / 2, [3]: 508 - size.width / 2 };
if (rank_list.length < 3) {
for (var i = rank_list.length + 1; i <= 3; i++) {
if (!this.no_label_list[i]) {
var label = Utils.createLabel(24, null, null, pos_list[i], 360, Utils.TI18N("虚位以待"), this.main_panel, 0, cc.v2(0.5, 0.5))
this.no_label_list[i] = label.node;
this.node_list.push(label);
if (this.top_rank_list[i]) {
this.top_rank_list[i].label.node.active = false;
this.top_rank_list[i].img.active = false;
}
}
this.no_label_list[i].active = true;
}
}
},
closeCallBack: function () {
if (this.list_view) {
this.list_view.DeleteMe()
}
this.list_view = null;
this.ctrl.openRankView(false)
if (this.empty_con) {
this.empty_con.destroy();
this.empty_label.destroy();
this.empty_bg.destroy();
this.empty_con = null;
this.empty_bg = null;
this.empty_label = null;
}
if (this.node_list) {
for (var i in this.node_list) {
var v = this.node_list[i];
if (v instanceof cc.Node) {
v.destroy();
v = null;
} else {
v.node.destroy();
v = null;
}
}
this.node_list = null;
}
if (this.my_head) {
this.my_head.deleteMe();
this.my_head = null;
}
if(this.first_list){
for(let i in this.first_list){
if(this.first_list[i]){
this.first_list[i].deleteMe()
this.first_list[i] = null;
}
}
this.first_list = null;
}
}
});
module.exports = RankWindow;