396 lines
16 KiB
JavaScript
396 lines
16 KiB
JavaScript
const MenuPage = require( "cmp.com.menu.page" );
|
|
const ArenaEvent = require( "arena_event" );
|
|
const CrossChampionController = require("crosschampion_controller");
|
|
const ItemLay = require("cmp.common.itemlayout");
|
|
const HeroController = require( "hero_controller" );
|
|
const data2Icon = require( "bridge.utils.item" );
|
|
const ArenaConst = require( "arena_const" );
|
|
const BattleController = require( "battle_controller" );
|
|
const TipsController = require( "tips_controller" );
|
|
|
|
|
|
cc.Class({
|
|
|
|
extends: MenuPage,
|
|
|
|
properties: {
|
|
|
|
nodLeft: { default: null, type: cc.Node },
|
|
nodRight: { default: null, type: cc.Node },
|
|
nodMyBet: { default: null, type: cc.Node },
|
|
nodLParts: { default: null, type: ItemLay },
|
|
nodRParts: { default: null, type: ItemLay },
|
|
nodLCamp: { default: null, type: cc.Sprite },
|
|
nodRCamp: { default: null, type: cc.Sprite },
|
|
nodStage: { default: null, type: cc.Node },
|
|
nodReplay : { default: null, type: cc.Node },
|
|
nodOps: { default: null, type: cc.Node }
|
|
},
|
|
|
|
onEnable: function() {
|
|
|
|
|
|
// 视图监听
|
|
this.vbind( [
|
|
[ "CChampion", this.freshMyRace.bind( this ) ]
|
|
] );
|
|
|
|
this.bindGEvent( ArenaEvent.UpdateGuessMatchInfoEvent, this.freshGuessInfo.bind( this ) );
|
|
this.bindGEvent( ArenaEvent.UpdateBetMatchValueEvent, this.freshRateChange.bind( this ));
|
|
// this.bindGEvent( ArenaEvent.UpdateMylogListEvent, this.openGuessInfo.bind( this ));
|
|
// this.nodMenus.posTog = this.onTogMenu.bind( this );
|
|
|
|
this.setEmpty();
|
|
|
|
},
|
|
|
|
// 隐藏
|
|
onDisable: function() {
|
|
|
|
// 视图监听解除
|
|
this.vunbind();
|
|
// 事件监听释放
|
|
this.unbindGEvents();
|
|
if( this.tween ){
|
|
this.tween.stop();
|
|
}
|
|
|
|
|
|
},
|
|
|
|
// 重载:关闭前
|
|
onPreClosed: function () {
|
|
|
|
},
|
|
|
|
setEmpty: function(){
|
|
|
|
let cct = CrossChampionController.getInstance();
|
|
let cct_model = cct.getModel();
|
|
cct.sender26200();
|
|
// let baseinfo = cct_model.getBaseInfo() ;
|
|
// this.freshMyRace( baseinfo );
|
|
this.tween = cc.tween( this.node )
|
|
.to( 0.3, cct.sender26203() )
|
|
.delay( 1 )
|
|
.to( 0.3, cct.sender26205() )
|
|
.start();
|
|
|
|
},
|
|
|
|
|
|
freshMyRace: function( _race ){
|
|
|
|
if( !_race ){
|
|
return;
|
|
}
|
|
|
|
let baseInfo = _race;
|
|
this.stepinfo = baseInfo;
|
|
|
|
let desc = "";
|
|
let show = baseInfo.step == ArenaConst.champion_step.unopened ;
|
|
if( show ){
|
|
desc = nx.text.getKey( "champion_str34" ); // 冠軍賽未開啓
|
|
|
|
}
|
|
|
|
|
|
// nx.gui.setActive( this.nodEmpty, "bg/stime", true );
|
|
// nx.gui.setString( this.nodEmpty, "bg/state", desc );
|
|
// let nod = nx.gui.find( this.nodEmpty, "bg" );
|
|
|
|
|
|
// if( ( baseInfo.start_time - Math.floor( cc.sys.now() / 1000 ) ) >= 0 ){
|
|
// nx.gui.setCdTxt( nod, "stime/time", ( baseInfo.start_time - Math.floor( cc.sys.now() / 1000 ) ), ()=>{
|
|
// nx.gui.setActive( nod, "stime", false );
|
|
// } );
|
|
// }
|
|
let rdesc = nx.text.getKey( "champion_str" + ( 18 + baseInfo.round_status ) );
|
|
nx.gui.setString( this.nodStage, "stage", rdesc );
|
|
if( baseInfo.round_status == ArenaConst.champion_round_status.fight || baseInfo.round_status == ArenaConst.champion_round_status.guess || baseInfo.round_status == ArenaConst.champion_round_status.prepare ){
|
|
CrossChampionController.getInstance().sender26203();
|
|
nx.gui.setCdTxt( this.nodStage, "txt", baseInfo.round_status_time, ()=>{
|
|
|
|
} );
|
|
}else{
|
|
|
|
if( baseInfo.round_status == 0 ){
|
|
nx.gui.setCdTxt( this.nodStage, "txt", ( baseInfo.start_time - Math.floor( cc.sys.now() / 1000 ) ), ()=>{
|
|
CrossChampionController.getInstance().sender26203();
|
|
} );
|
|
}else{
|
|
nx.gui.setCdTxt( this.nodStage, "txt", baseInfo.round_status_time, ()=>{
|
|
CrossChampionController.getInstance().sender26203();
|
|
} );
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
nx.gui.setActive( this.nodStage, "", baseInfo.step_status != ArenaConst.champion_step_status.over );
|
|
|
|
let lcmp = nx.gui.getComponent( this.nodOps, "lop", cc.Button );
|
|
let rcmp = nx.gui.getComponent( this.nodOps, "rop", cc.Button );
|
|
if( lcmp ){
|
|
|
|
lcmp.interactable = baseInfo.round_status == ArenaConst.champion_round_status.guess;
|
|
}
|
|
if( rcmp ){
|
|
|
|
rcmp.interactable = baseInfo.round_status == ArenaConst.champion_round_status.guess;
|
|
}
|
|
|
|
this.canBet = baseInfo.round_status == ArenaConst.champion_round_status.guess;
|
|
},
|
|
|
|
|
|
// 根据位置获取敌方英雄数据
|
|
getRoleDataByIndex:function( index, role_list ){
|
|
for (var k in role_list) {
|
|
var v = role_list[k]
|
|
if (v.pos == index) {
|
|
return v
|
|
}
|
|
}
|
|
},
|
|
|
|
dealPartners: function( _ctype, _plst, _left ){
|
|
|
|
|
|
let formation_config = gdata("formation_data","data_form_data", _ctype );
|
|
let partner_ids = [];
|
|
let role_datas = [];
|
|
for (var i = 1; i <= 9;i++) {
|
|
let role_data =null;
|
|
let key = null;
|
|
//阵法和实际位置的映射转换
|
|
for(let j = 0; j < formation_config.pos.length; j++){
|
|
let pos_val = formation_config.pos[j];
|
|
if(pos_val[1] == i){
|
|
key = pos_val[0];
|
|
}
|
|
}
|
|
let role_info = this.getRoleDataByIndex( key, _plst );
|
|
//位置上没有英雄就选择置空
|
|
let role_vo = null;
|
|
|
|
if (role_info) {
|
|
if( _left ){
|
|
role_data = HeroController.getInstance().getModel().getHeroInfoByBidStar(role_info.bid, role_info.star);
|
|
partner_ids.push(role_data);
|
|
role_vo = role_data;
|
|
}else{
|
|
role_info.is_master = true;
|
|
role_info.rid = role_info.rid || 0;
|
|
role_info.srv_id = role_info.srv_id || "";
|
|
role_vo = this.createHeroVo(role_info);
|
|
}
|
|
|
|
}
|
|
role_datas.push(role_vo);
|
|
|
|
}
|
|
return role_datas;
|
|
},
|
|
|
|
|
|
|
|
createHeroVo(role_data){
|
|
|
|
role_data.updateHeroVo = ""
|
|
let vof = data2Icon.data2Icon( role_data.bid );
|
|
vof.level = role_data.lev;
|
|
vof.stars = role_data.star;
|
|
let vo = data2Icon.data2Icon( vof );
|
|
// vo.bid = role_data.bid;
|
|
// vo.level = role_data.lev;
|
|
// // vo.partner_id = role_data.partner_id;
|
|
// // vo.rid = role_data.rid;
|
|
// // vo.srv_id = vo.srv_id;
|
|
// vo.stars = vo.star;
|
|
return vo;
|
|
},
|
|
|
|
|
|
freshGuessInfo: function( _guessdata ){
|
|
|
|
let guessinfo = _guessdata;
|
|
// console.log( "竞猜相关数据" + JSON.stringify( _guessdata ) );
|
|
this.race = _guessdata;
|
|
let acamptype = guessinfo.a_formation_type; // 陣型顯示
|
|
let bcamptype = guessinfo.b_formation_type; // 陣型顯示
|
|
let ap_list = guessinfo.a_plist; // 夥伴列表
|
|
let bp_list = guessinfo.b_plist; // 夥伴列表
|
|
let aframe = guessinfo.a_avatar_id == 0 ? 1000 : guessinfo.a_avatar_id; // 頭像框
|
|
let bframe = guessinfo.b_avatar_id == 0 ? 1000 : guessinfo.b_avatar_id; // 頭像框
|
|
let apower = guessinfo.a_power; // 戰力
|
|
let bpower = guessinfo.b_power; // 戰力
|
|
let arole = this.dealPartners( acamptype, ap_list );
|
|
this.nodLParts.rebuild( arole );
|
|
|
|
let path = "prefab/pvp/ui";
|
|
let aformation_config = gdata("formation_data","data_form_data", acamptype );
|
|
let apaht = cc.path.join( path, "teamform_" + aformation_config.order );
|
|
nx.gui.setSpriteFrame( this.nodLCamp, "", apaht );
|
|
|
|
let cmp = nx.gui.getComponent( this.nodLeft, "bg/info/avatar", "cmp.common.header" );
|
|
if( cmp ){
|
|
cmp.setHeadRes( guessinfo.a_face );
|
|
cmp.setFrameRes( aframe );
|
|
}
|
|
nx.gui.setString( this.nodLeft, "bg/info/power", apower );
|
|
nx.gui.setString( this.nodLeft, "bg/info/lev", nx.text.format( "LvNumber", guessinfo.a_lev ) );
|
|
nx.gui.setString( this.nodLeft, "bg/info/nbg/server", guessinfo.a_srv_id );
|
|
nx.gui.setString( this.nodLeft, "bg/info/nbg/name", guessinfo.a_name );
|
|
|
|
|
|
|
|
let bformation_config = gdata("formation_data","data_form_data", bcamptype );
|
|
let bpaht = cc.path.join( path, "teamform_" + bformation_config.order );
|
|
nx.gui.setSpriteFrame( this.nodRCamp, "", bpaht );
|
|
|
|
// nx.gui.setSpriteFrame( this.nodRight, "bg/info/ctype", cc.path.join( path, "teamform_" + bcamptype ) );
|
|
let bcmp = nx.gui.getComponent( this.nodRight, "bg/info/avatar", "cmp.common.header" );
|
|
if( bcmp ){
|
|
bcmp.setHeadRes( guessinfo.b_face );
|
|
bcmp.setFrameRes( bframe );
|
|
}
|
|
nx.gui.setString( this.nodRight, "bg/info/power", bpower );
|
|
nx.gui.setString( this.nodRight, "bg/info/lev", nx.text.format( "LvNumber", guessinfo.b_lev ) );
|
|
nx.gui.setString( this.nodRight, "bg/info/name", guessinfo.b_name );
|
|
let brole = this.dealPartners( bcamptype, bp_list );
|
|
// if( this.nodLeftParts ){
|
|
|
|
this.nodRParts.rebuild( brole );
|
|
// }
|
|
/*****
|
|
* {"bet_type":0,"bet_val":0,"a_bet_ratio":1750,"b_bet_ratio":1750,"step":8,"round":3,"group":0,"a_bet":0,"a_rid":9,"a_srv_id":"",
|
|
* "a_name":"從懷憐寒","a_lev":59,"a_face":24303,"a_face_update_time":0,"a_face_file":"","a_avatar_id":0,"a_sex":1,
|
|
* "a_power":2889607,"a_formation_type":6,"a_formation_lev":1,
|
|
* "a_plist":[
|
|
* {"pos":5,"bid":50505,"lev":280,"quality":0,"star":11,"break_lev":6,"hurt":1293503,"behurt":1338976,"curt":0,"ext_data":[{"key":5,"val":0},{"key":11,"val":0}]},
|
|
* {"pos":4,"bid":10503,"lev":280,"quality":0,"star":11,"break_lev":6,"hurt":551369,"behurt":1245491,"curt":0,"ext_data":[{"key":5,"val":0},{"key":11,"val":0}]},
|
|
* {"pos":3,"bid":20508,"lev":280,"quality":0,"star":11,"break_lev":6,"hurt":1850604,"behurt":1281546,"curt":0,"ext_data":[{"key":5,"val":0},{"key":11,"val":0}]},
|
|
* {"pos":2,"bid":30503,"lev":205,"quality":0,"star":9,"break_lev":6,"hurt":48558,"behurt":1355186,"curt":1087118,"ext_data":[{"key":5,"val":0},{"key":11,"val":0}]},
|
|
* {"pos":1,"bid":40505,"lev":205,"quality":0,"star":9,"break_lev":6,"hurt":160050,"behurt":1264777,"curt":0,"ext_data":[{"key":5,"val":0},{"key":11,"val":0}]}],
|
|
* "b_bet":0,"b_rid":4,"b_srv_id":"","b_name":"紫翠翠容","b_lev":58,"b_face":24201,"b_face_update_time":0,"b_face_file":"","b_avatar_id":0,"b_sex":0,"b_power":2939682,
|
|
* "b_formation_type":2,"b_formation_lev":1,
|
|
* "b_plist":[
|
|
* {"pos":5,"bid":10503,"lev":280,"quality":0,"star":11,"break_lev":6,"hurt":1065015,"behurt":337335,"curt":0,"ext_data":[{"key":5,"val":0},{"key":11,"val":0}]},
|
|
* {"pos":4,"bid":20508,"lev":280,"quality":0,"star":11,"break_lev":6,"hurt":2296251,"behurt":642106,"curt":0,"ext_data":[{"key":5,"val":0},{"key":11,"val":0}]},
|
|
* {"pos":3,"bid":20501,"lev":280,"quality":0,"star":11,"break_lev":6,"hurt":814572,"behurt":720364,"curt":0,"ext_data":[{"key":5,"val":0},{"key":11,"val":0}]},
|
|
* {"pos":2,"bid":10510,"lev":280,"quality":0,"star":11,"break_lev":6,"hurt":1662545,"behurt":764633,"curt":0,"ext_data":[{"key":5,"val":0},{"key":11,"val":0}]},
|
|
* {"pos":1,"bid":20504,"lev":268,"quality":0,"star":11,"break_lev":6,"hurt":641017,"behurt":1446222,"curt":364572,"ext_data":[{"key":5,"val":0},{"key":11,"val":0}]}],
|
|
* "ret":2,"replay_id":9667,"a_sprite_lev":0,"a_sprites":[],"b_sprite_lev":0,"b_sprites":[]}
|
|
*/
|
|
|
|
|
|
nx.gui.setString( this.nodMyBet, "lname/server", guessinfo.a_srv_id );
|
|
nx.gui.setString( this.nodMyBet, "lname/name", guessinfo.a_name );
|
|
nx.gui.setString( this.nodMyBet, "lrate/rate", parseFloat( guessinfo.a_bet_ratio / 1000 ) );
|
|
nx.gui.setString( this.nodMyBet, "rname/server", guessinfo.b_srv_id );
|
|
nx.gui.setString( this.nodMyBet, "rname/name", guessinfo.b_name );
|
|
nx.gui.setString( this.nodMyBet, "rrate/rate", parseFloat( guessinfo.b_bet_ratio / 1000 ) );
|
|
|
|
if( guessinfo.b_bet_ratio >= 2000 ){
|
|
nx.gui.getComponent( this.nodOps, "prog/left", cc.Sprite ).fillRange = 1 ;
|
|
nx.gui.getComponent( this.nodOps, "prog/right", cc.Sprite ).fillRange = 0 ;
|
|
|
|
}
|
|
if( guessinfo.a_bet_ratio >= 2000 ){
|
|
nx.gui.getComponent( this.nodOps, "prog/right", cc.Sprite ).fillRange = 1 ;
|
|
nx.gui.getComponent( this.nodOps, "prog/left", cc.Sprite ).fillRange = 0 ;
|
|
|
|
}
|
|
if( guessinfo.b_bet_ratio < 2000 && guessinfo.a_bet_ratio < 2000 ){
|
|
nx.gui.getComponent( this.nodOps, "prog/left", cc.Sprite ).fillRange = 0.5;
|
|
nx.gui.getComponent( this.nodOps, "prog/right", cc.Sprite ).fillRange = 0.5 ;
|
|
}
|
|
nx.gui.setActive( this.nodOps, "rop/bet", guessinfo.a_bet_ratio >= 2000 && guessinfo.bet_type != 0 );
|
|
nx.gui.setActive( this.nodOps, "lop/bet", guessinfo.b_bet_ratio >= 2000 && guessinfo.bet_type != 0 );
|
|
// nx.gui.getComponent( this.nodOps, "prog/right", cc.Sprite ).fillRange = guessinfo.a_bet_ratio >= 2000 ? 1 : 0.5;
|
|
|
|
nx.gui.setActive( this.nodReplay, "", guessinfo.replay_id != 0 );
|
|
nx.gui.setActive( this.nodLeft, "ico", guessinfo.ret == 1 );
|
|
nx.gui.setActive( this.nodRight, "ico", guessinfo.ret == 2 );
|
|
|
|
if( this.race.replay_id != 0 && this.stepinfo.round_status == ArenaConst.champion_round_status.fight && this.stepinfo.flag == 2 ){
|
|
this.onTouchReplay();
|
|
}
|
|
|
|
this.canBet = guessinfo.bet_type == 0;
|
|
},
|
|
|
|
freshMyGuessInfo: function( _myguess ){
|
|
|
|
},
|
|
|
|
openGuessInfo: function(){
|
|
|
|
nx.bridge.createPanel( "WndCChampionBet" );
|
|
|
|
},
|
|
|
|
onTouchReplay: function(){
|
|
|
|
let srv_id = nx.bridge.vget( "curServer" ).srv_id;
|
|
BattleController.getInstance().sender_20036( this.race.replay_id, srv_id );
|
|
|
|
},
|
|
|
|
freshRateChange: function( _change ){
|
|
|
|
//{"a_bet":60,"b_bet":0,"a_bet_ratio":1500,"b_bet_ratio":2000
|
|
this.canBet = false;
|
|
nx.gui.setString( this.nodMyBet, "lrate/rate", parseFloat( _change.a_bet_ratio / 1000 ) );
|
|
nx.gui.setString( this.nodMyBet, "rrate/rate", parseFloat( _change.b_bet_ratio / 1000 ) );
|
|
nx.gui.setActive( this.nodOps, "rop/bet", _change.a_bet_ratio >= 2000 );
|
|
nx.gui.setActive( this.nodOps, "lop/bet", _change.b_bet_ratio >= 2000 );
|
|
if( _change.b_bet_ratio >= 2000 ){
|
|
nx.gui.getComponent( this.nodOps, "prog/left", cc.Sprite ).fillRange = 1 ;
|
|
nx.gui.getComponent( this.nodOps, "prog/right", cc.Sprite ).fillRange = 0 ;
|
|
|
|
}
|
|
if( _change.a_bet_ratio >= 2000 ){
|
|
nx.gui.getComponent( this.nodOps, "prog/right", cc.Sprite ).fillRange = 1 ;
|
|
nx.gui.getComponent( this.nodOps, "prog/left", cc.Sprite ).fillRange = 0 ;
|
|
|
|
}
|
|
if( _change.b_bet_ratio < 2000 && _change.a_bet_ratio < 2000 ){
|
|
nx.gui.getComponent( this.nodOps, "prog/left", cc.Sprite ).fillRange = 0.5;
|
|
nx.gui.getComponent( this.nodOps, "prog/right", cc.Sprite ).fillRange = 0.5 ;
|
|
}
|
|
},
|
|
|
|
onTouchGuess: function( _index ){
|
|
|
|
if( !this.canBet ){
|
|
nx.tbox( "champion_str5" );
|
|
return;
|
|
}
|
|
let price = 0;
|
|
let a = parseInt( _index );
|
|
|
|
price = a == 1 ? parseFloat( this.race.a_bet_ratio / 1000 ) : parseFloat( this.race.b_bet_ratio / 1000 ) ;
|
|
let own = CrossChampionController.getInstance().getModel().getRoleInfo();
|
|
let icon = game.configs.arena_cluster_champion_data.data_const.like_reward.val[0][0];
|
|
let EC = TipsController.getInstance();
|
|
let item = {
|
|
item_bid: icon,
|
|
price: price,
|
|
pay_type: icon,
|
|
own : own.can_bet
|
|
}
|
|
EC.openBuyPanel( true, item, 9, _data => {
|
|
CrossChampionController.getInstance().sender26204( a, _data.num );
|
|
EC.openBuyPanel( false );
|
|
} );
|
|
|
|
},
|
|
|
|
|
|
});
|