Files
fc/dev/project/assets/Scripts/mod/guild/guildbat/cmp/cmp.guildbat.main.js
T
2026-05-23 22:10:14 +08:00

283 lines
8.9 KiB
JavaScript

const GuildBatMod = require("guildbat.mod");
const BridgeWindow = require( "bridge.window" );
const GuildwarEvent = require("guildwar_event");
const GuildwarConst = require("guildbat.define");
const TPC = require("tips_controller");
cc.Class({
extends: BridgeWindow,
properties: {
rankNd:{
default:null,
type:cc.Node
},
previewNd:{
default:null,
type:cc.Node
},
mainNd:{
default:null,
type:cc.Node
},
pkinfo:{//雙方pk信息
default:null,
type:cc.Node
},
enyScrol:{
default:null,
type:cc.ScrollView
},
myScrol:{
default:null,
type:cc.ScrollView
},
fabSeat:{
default:null,
type:cc.Node
},
posBtn:{//陣地按鈕
default:null,
type:cc.Node
},
timeTxt:{
default:null,
type:cc.Node
},
chalengNum:{
default:null,
type:cc.Node
}
},
// LIFE-CYCLE CALLBACKS:
onLoad () {
this.mod = GuildBatMod.getInstance();
this.cur_positions = GuildwarConst.positions.others;//默認敵方陣地
this.enyPosCmps = {};
this.myPosCmps = {};
this.bindGEvent(GuildwarEvent.GuildWarEnemyPositionDataInitEvent,this.initPositData.bind(this));
//階段狀態更新
this.bindGEvent(GuildwarEvent.UpdateGuildWarStatusEvent,this.updateStatus.bind(this));
this.bindGEvent(GuildwarEvent.UpdateGuildWarBaseInfoEvent,this.updateAllBaseInfo.bind(this));
//更新我方據點
this.bindGEvent(GuildwarEvent.GetGuildWarMyPositionDataEvent,this.initMyPosition.bind(this));
//單個據點更新
this.bindGEvent(GuildwarEvent.UpdateGuildWarPositionDataEvent,this.updateWarPosition.bind(this));
this.bindGEvent(GuildwarEvent.UpdateGuildwarChallengeCountEvent,this.upChallengeCount.bind(this));
},
upChallengeCount(){
let count = this.mod.getGuildWarChallengeCount();
nx.gui.setString(this.chalengNum,"",count);
},
initPositData(){
//設置前三名排行
this.setThreeRanks();
this.setPkInfo();
this.upChallengeCount();
let end_time = this.mod.getENdTime();
nx.gui.setCdTxt(this.timeTxt,"",end_time - client.socket.getTime());
//設置敵對聯盟據點
this.initEnemyPosition();
},
initEnemyPosition(){
let list = this.mod.getEnemyGuildWarPositionList();
if(list.length == 0)return;
//需要设置最大区域
let max_data = game.configs.guild_war_data.data_position[list[list.length - 1].pos];
let max_y = (0 - max_data.pos_y) + 100;
this.enyScrol.content.height = max_y;
for(let i in list){
let data = list[i];
if(data){
let cmp = this.enyPosCmps[data.pos];
if(cmp){
cmp.setData(data);
}else{
let seat = cc.instantiate(this.fabSeat);
seat.parent = this.enyScrol.content;
let new_cmp = nx.gui.getComponent(seat,"","cmp.guildbat.item.seat");
if(new_cmp){
this.enyPosCmps[data.pos] = new_cmp;
new_cmp.setData(data);
}
}
}
}
},
initMyPosition(){
let list = this.mod.getMyGuildWarPositionList();
if(list.length == 0)return;
//需要设置最大区域
let max_data = game.configs.guild_war_data.data_position[list[list.length - 1].pos];
let max_y = (0 - max_data.pos_y) + 100;
this.myScrol.content.height = max_y;
for(let i in list){
let data = list[i];
if(data){
let cmp = this.myPosCmps[data.pos];
if(cmp){
cmp.setData(data);
}else{
let seat = cc.instantiate(this.fabSeat);
seat.parent = this.myScrol.content;
let new_cmp = nx.gui.getComponent(seat,"","cmp.guildbat.item.seat");
if(new_cmp){
this.myPosCmps[data.pos] = new_cmp;
new_cmp.setData(data);
}
}
}
}
},
//單個據點更新
updateWarPosition(pos,data){
if(this.cur_positions == GuildwarConst.positions.others){//是否我方
let enyCmp = this.enyPosCmps[pos];
if(enyCmp){
enyCmp.setData(data);
}
}else{
let myCmp = this.myPosCmps[pos];
if(myCmp){
myCmp.setData(data);
}
}
},
//基礎信息更新
updateAllBaseInfo(){
this.setPkInfo();
this.setThreeRanks();
},
//階段狀態更新
updateStatus(status,flag){
if(status > 2){//參加活動狀態
//請求詳細數據
this.mod.requestGuildWarData();
if(status == 3){//匹配結果展示
this.previewNd.active = true;
this.mainNd.active = false;
nx.gui.setActive(this.previewNd,"view_btn",true);
nx.gui.setString(this.previewNd,"ti1",cc.js.formatStr(nx.text.getKey("GuildBatOpen"),"12:00"));
nx.gui.setString(this.previewNd,"in",nx.text.getKey("GuildBatOntime"));
}else if(status == 4){//開戰中
if(flag == 1){//匹配到對手
this.previewNd.active = false;
this.mainNd.active = true;
}else{
this.emptyTip();
}
}else if(status == 5){//結算
if(flag == 1){//匹配到對手
this.previewNd.active = false;
this.mainNd.active = true;
}else{
this.emptyTip();
}
}
}else{//場外時間
// if(status == 1){//空閑時間
// this.previewNd.active = false;
// this.mainNd.active = false;
// }else{//匹配中
// }
this.emptyTip();
}
},
emptyTip(){
this.previewNd.active = true;
this.mainNd.active = false;
nx.gui.setActive(this.previewNd,"view_btn",false);
nx.gui.setString(this.previewNd,"ti1",nx.text.getKey("GuildBatNoOpen"));
let desc = game.configs.guild_war_data.data_const.time_desc.desc;
nx.gui.setString(this.previewNd,"in",desc);
},
setPkInfo(){
let myBaseInfo = this.mod.getMyGuildWarBaseInfo();
let enyBaseInfo = this.mod.getEnemyGuildWarBaseInfo();
nx.gui.setString(this.pkinfo,"gud1",myBaseInfo.gname);
nx.gui.setString(this.pkinfo,"gud2",enyBaseInfo.gname);
nx.gui.setString(this.pkinfo,"num",myBaseInfo.hp);
nx.gui.setString(this.pkinfo,"num2",enyBaseInfo.hp);
},
//設置排行榜
setThreeRanks(){
let rank_data = this.mod.getGuildWarTopThreeRank();
for(let i in rank_data){
let data = rank_data[i];
let nd = nx.gui.find(this.rankNd,String(data.rank));
if(nd){
nx.gui.setString(nd,"name",data.name);
}
}
},
onOpenConfigs() {
nx.gui.setString(this.posBtn,"txt",nx.text.getKey("GuildBatMyPos"));
this.mod.reqestGuildWarStatus();
},
onPreClosed() {
this.enyPosCmps = null;
this.myPosCmps = null;
},
openMetaView(){
nx.bridge.createPanel("WndGuildBatMeta");
},
openBoxAward(){
nx.bridge.createPanel("WndGuildBatBox");
},
openRank(){
this.mod.requestGuildWarRankData();
// nx.bridge.createPanel("WndGuildBatRank");
},
openChat(){
let ChatCtrl = require("chat_controller");
ChatCtrl.getInstance().openChatPanel();
},
openTips(){
let explain = game.configs.guild_war_data.data_explain;
TPC.getInstance().showDetailPanel(explain);
},
changeMyPositions(){
if(this.cur_positions == GuildwarConst.positions.others){
this.enyScrol.node.active = false;
this.myScrol.node.active = true;
this.mod.requestMyGuildPositionData();
this.cur_positions = GuildwarConst.positions.myself;
nx.gui.setString(this.posBtn,"txt",nx.text.getKey("GuildBatOthPos"));
}else{
this.enyScrol.node.active = true;
this.myScrol.node.active = false;
this.cur_positions = GuildwarConst.positions.others;
nx.gui.setString(this.posBtn,"txt",nx.text.getKey("GuildBatMyPos"));
}
},
openBatLog(){
nx.bridge.createPanel("WndGuildBatLog");
},
getPositionType(){
return this.cur_positions || 0;
},
});