473 lines
14 KiB
JavaScript
473 lines
14 KiB
JavaScript
/******************************************************************
|
|
*
|
|
* 伙伴信息页 --- 装备
|
|
*
|
|
******************************************************************/
|
|
|
|
const BridgeComponent = require( "bridge.component" );
|
|
|
|
const HeroConst = require( "hero_const" );
|
|
const HeroEvent = require( "hero_event" );
|
|
const HeroControl = require( "hero_controller" );
|
|
const HeroCalculate = require( "hero_calculate" );
|
|
const HomeMod = require( "home.mod" );
|
|
const FID = require( "bridge.function.ids" );
|
|
const TipsController = require( "tips_controller" );
|
|
|
|
const BackpackController = require( "backpack_controller" );
|
|
|
|
const BackPackConst = require( "backpack_const" );
|
|
const BIT = BackPackConst.item_type;
|
|
|
|
const HEQP = HeroConst.EquipPosList;
|
|
|
|
cc.Class( {
|
|
|
|
extends: BridgeComponent,
|
|
|
|
properties: {
|
|
|
|
nodEquips: { default: null, type: cc.Node },
|
|
nodArtifacts: { default: null, type: cc.Node },
|
|
spOnce: { default: null, type: sp.Skeleton },
|
|
nodWeapon: { default: null, type: cc.Node },
|
|
},
|
|
|
|
// 显示
|
|
onLoad: function() {
|
|
|
|
// 视图监听
|
|
this.vbind( [
|
|
[ "ShowPartner", this.onPartnerChanged.bind( this ) ]
|
|
] );
|
|
|
|
// 事件监听
|
|
// this.bindGEvent( HeroEvent.Hero_Data_Update, this.onPartnerUpdate.bind( this ) );
|
|
this.bindGEvent( HeroEvent.Equip_Update_Event, this.onPartnerUpdate.bind( this ) );
|
|
this.bindGEvent( HeroEvent.Artifact_Update_Event, this.onPartnerUpdate.bind( this ) );
|
|
|
|
this.spOnce.animation = "";
|
|
|
|
nx.st = this;
|
|
},
|
|
|
|
// 隐藏
|
|
// onDisable: function() {
|
|
|
|
// // 视图监听解除
|
|
// this.vunbind();
|
|
|
|
// // 事件监听解除
|
|
// this.unbindGEvents();
|
|
|
|
// },
|
|
|
|
// 有伙伴数据更新
|
|
onPartnerUpdate: function( _vo ) {
|
|
|
|
if( _vo &&
|
|
this.partner &&
|
|
_vo.partner_id == this.partner.partner_id ) {
|
|
this.onPartnerChanged( _vo );
|
|
nx.bridge.vset( "ShowPartner", _vo );
|
|
}
|
|
},
|
|
|
|
// 伙伴更新
|
|
onPartnerChanged: function( _partner ) {
|
|
|
|
this.partner = _partner;
|
|
|
|
// 亲密度
|
|
if( !game.configs.favor_data ) {
|
|
nx.gui.setActive( this.nodWeapon, "", false );
|
|
}
|
|
else {
|
|
|
|
let canshow = 0;
|
|
this.emptyeqm = {};
|
|
let weaponcfg = game.configs.weapon_data.data_get_skill;
|
|
this.unlock = game.configs.weapon_data.data_const.unlock_con.val;
|
|
for (let e in weaponcfg ) {
|
|
let eqm = weaponcfg[e];
|
|
if( eqm.partner_id == this.partner.bid ){
|
|
canshow++;
|
|
this.emptyeqm = { bid: eqm.id , num: 1 } ;
|
|
}
|
|
}
|
|
nx.gui.setActive( this.nodWeapon, "", canshow > 0 );
|
|
// let girl = HomeMod.getInstance().queryGirl( this.partner.bid );
|
|
// if( girl ) {
|
|
// nx.gui.setActive( this.nodWeapon, "", true );
|
|
// } else {
|
|
// nx.gui.setActive( this.nodWeapon, "", false );
|
|
// }
|
|
}
|
|
// 全刷新
|
|
this.freshEquipments();
|
|
this.freshArtifacts();
|
|
// this.freshExWeapon();
|
|
},
|
|
|
|
// 刷新装备槽
|
|
freshEquipments: function() {
|
|
|
|
// 空处理
|
|
let root = this.nodEquips.parent;
|
|
let slots = this.nodEquips;
|
|
let empty = function( _sc = false ) {
|
|
|
|
// 卡槽置空
|
|
slots.children.forEach( _c => {
|
|
nx.gui.setActive( _c, "item", false );
|
|
nx.gui.setActive( _c, "tip", false );
|
|
nx.gui.setActive( _c, "empty", true );
|
|
} );
|
|
|
|
// 操作置空
|
|
if( _sc ) {
|
|
nx.gui.setActive( root, "onceOn", false );
|
|
nx.gui.setActive( root, "onceOff", false );
|
|
}
|
|
};
|
|
|
|
// 判空
|
|
if( nx.dt.objEmpty( this.partner ) ) {
|
|
empty( true );
|
|
return;
|
|
}
|
|
|
|
let canUpdate = false;
|
|
const calculate = HeroCalculate.getInstance();
|
|
const model = HeroControl.getInstance().getModel();
|
|
const eqmAll = model.getHeroEquipList( this.partner.partner_id ) || {};
|
|
|
|
// 装备刷新
|
|
const eqms = this.partner.eqm_list;
|
|
|
|
let weapon = {};
|
|
if( eqms ){
|
|
for ( let i in eqms ) {
|
|
let eqm = eqms[i];
|
|
if( eqm && eqm.type == BIT.Exclusive ){
|
|
// if( wcfg[eqm.] )
|
|
weapon = eqm;
|
|
}
|
|
}
|
|
}else{
|
|
weapon = {};
|
|
}
|
|
|
|
|
|
for( let pos in HEQP ) {
|
|
|
|
// 当前装备
|
|
let eqm = eqms[ pos ];
|
|
let emt = nx.dt.objEmpty( eqm );
|
|
let slot = nx.gui.find( slots, "slot" + pos );
|
|
nx.gui.setActive( slot, "item", !emt );
|
|
nx.gui.setActive( slot, "empty", emt );
|
|
if( !emt ) {
|
|
let icon = nx.gui.getComponent( slot, "item", "cmp.item.base" );
|
|
if( icon ) {
|
|
icon.setData( eqm );
|
|
}
|
|
}
|
|
|
|
// 红点提示
|
|
let etype = HEQP[ pos ];
|
|
let rp = calculate.checkSingleHeroEachPosEquipRedPoint( etype, eqmAll[ etype ] );
|
|
nx.gui.setActive( slot, "tip", rp );
|
|
|
|
// 有提升
|
|
if( !canUpdate && rp ) {
|
|
canUpdate = true;
|
|
}
|
|
|
|
}
|
|
|
|
// 快捷显隐
|
|
if( canUpdate || nx.dt.objEmpty( eqms ) ) {
|
|
nx.gui.setActive( root, "onceOn", true );
|
|
nx.gui.setActive( root, "onceOff", false );
|
|
}
|
|
else {
|
|
nx.gui.setActive( root, "onceOn", false );
|
|
nx.gui.setActive( root, "onceOff", true );
|
|
}
|
|
|
|
this.freshExWeapon( weapon );
|
|
},
|
|
|
|
// 刷新神器槽
|
|
freshArtifacts: function() {
|
|
|
|
// 置空
|
|
let slots = this.nodArtifacts;
|
|
let empty = function() {
|
|
slots.children.forEach( _c => {
|
|
nx.gui.setActive( _c, "item", false );
|
|
nx.gui.setActive( _c, "tip", false );
|
|
nx.gui.setActive( _c, "lock", false );
|
|
nx.gui.setActive( _c, "empty", true );
|
|
} );
|
|
};
|
|
|
|
// 判空
|
|
if( nx.dt.objEmpty( this.partner ) ) {
|
|
empty( true );
|
|
return;
|
|
}
|
|
|
|
const CPD = game.configs.partner_data.data_partner_const;
|
|
const Conditions = {
|
|
[ 1 ]: CPD[ "artifact_one" ].val,
|
|
[ 2 ]: CPD[ "artifact_two" ].val,
|
|
};
|
|
|
|
// 锁定统计
|
|
this.artLocked = {
|
|
[ 1 ]: { lock: false, desc: "" },
|
|
[ 2 ]: { lock: false, desc: "" },
|
|
};
|
|
for( let pos in Conditions ) {
|
|
let cond = Conditions[ pos ];
|
|
switch( cond[ 0 ] ) {
|
|
case "lev": {
|
|
if( this.partner.lev < cond[ 1 ] ) {
|
|
this.artLocked[ pos ].lock = true;
|
|
this.artLocked[ pos ].desc = cond[ 1 ] + nx.text.getKey( "btn_lvUnlock" );
|
|
}
|
|
else {
|
|
let maxLv = game.configs.partner_data.data_partner_max_lev[ this.partner.bid ];
|
|
if( maxLv && maxLv >= cond[ 1 ] ) {
|
|
this.artLocked[ pos ].lock = false;
|
|
// this.artLocked[ pos ].desc = cond[ 1 ] + nx.text.getKey( "btn_lvUnlock" );
|
|
}
|
|
}
|
|
} break;
|
|
case "star": {
|
|
if( this.partner.star < cond[ 1 ] ) {
|
|
this.artLocked[ pos ].lock = true;
|
|
this.artLocked[ pos ].desc = cond[ 1 ] + nx.text.getKey( "btn_starUnlock" );
|
|
}
|
|
else {
|
|
let maxSt = game.configs.partner_data.data_partner_max_star[ this.partner.bid ];
|
|
if( maxSt && maxSt >= cond[ 1 ] ) {
|
|
this.artLocked[ pos ].lock = false;
|
|
// this.artLocked[ pos ].desc = cond[ 1 ] + nx.text.getKey( "btn_starUnlock" );
|
|
}
|
|
}
|
|
} break;
|
|
default: {
|
|
nx.error( "未处理的解锁条件!", cond[ 0 ] );
|
|
} break;
|
|
}
|
|
}
|
|
|
|
const arts = this.partner.artifact_list || {};
|
|
const calculate = HeroCalculate.getInstance();
|
|
// 刷新
|
|
for( let pos in this.artLocked ) {
|
|
|
|
// 当前装备
|
|
let art = arts[ pos ];
|
|
let emt = nx.dt.objEmpty( art );
|
|
let sta = this.artLocked[ pos ];
|
|
let slot = nx.gui.find( slots, "slot" + pos );
|
|
nx.gui.setActive( slot, "item", !emt );
|
|
nx.gui.setActive( slot, "empty", emt && !sta.lock );
|
|
nx.gui.setActive( slot, "lock", emt && sta.lock );
|
|
if( !emt ) {
|
|
let icon = nx.gui.getComponent( slot, "item", "cmp.item.base" );
|
|
if( icon ) {
|
|
icon.setData( art );
|
|
}
|
|
}
|
|
|
|
// 红点提示
|
|
let red = false;
|
|
if( !sta.lock && art ) {
|
|
red = calculate.checkSingleArtifactRedPoint( art );
|
|
}
|
|
nx.gui.setActive( slot, "tip", red );
|
|
|
|
}
|
|
|
|
},
|
|
|
|
// 刷新专属武器
|
|
freshExWeapon: function( _weapon ) {
|
|
|
|
let self = this;
|
|
let weapon = nx.dt.objEmpty( _weapon ) && this.partner.star < this.unlock ? this.emptyeqm : _weapon;
|
|
|
|
let slot = nx.gui.find( this.nodWeapon, "slot1" );
|
|
|
|
nx.gui.find( slot, "lock" ).info = weapon;
|
|
let icon = nx.gui.getComponent( slot, "item", "cmp.item.base" );
|
|
let empty = function() {
|
|
if( icon ) {
|
|
icon.setData( null );
|
|
}
|
|
nx.gui.setActive( slot, "item", false );
|
|
nx.gui.setActive( slot, "tip", false );
|
|
nx.gui.setActive( slot, "empty", true );
|
|
nx.gui.setActive( slot, "lock", self.partner.star < self.unlock );
|
|
|
|
};
|
|
if( nx.dt.objEmpty( weapon ) ){
|
|
empty();
|
|
return;
|
|
}
|
|
|
|
// 当前装备
|
|
|
|
nx.gui.setActive( slot, "item", true );
|
|
nx.gui.setActive( slot, "tip", false );
|
|
nx.gui.setActive( slot, "empty", false );
|
|
nx.gui.setActive( slot, "lock", this.partner.star < this.unlock );
|
|
nx.gui.setActive( slot, "touch", this.partner.star >= this.unlock );
|
|
if( icon ) {
|
|
icon.setData( weapon );
|
|
}
|
|
|
|
|
|
// // 红点提示
|
|
// let red = false;
|
|
// if( !sta.lock && art ) {
|
|
// red = calculate.checkSingleArtifactRedPoint( art );
|
|
// }
|
|
// nx.gui.setActive( slot, "tip", red );
|
|
|
|
|
|
},
|
|
|
|
// 点击装备槽
|
|
onTouchEquipmentSlot: function( _partId ) {
|
|
|
|
const self = this;
|
|
const HC = HeroControl.getInstance();
|
|
const eqms = this.partner.eqm_list;
|
|
const eqm = eqms[ _partId ];
|
|
|
|
// if( this.partner.star < 10 && _partId == 41 ){
|
|
// nx.tbox( nx.text.format( "WearWeaponTip", 10 ) );
|
|
// return;
|
|
// }
|
|
|
|
// 脱下
|
|
const takeoff = function() {
|
|
HC.sender11011( self.partner.partner_id, eqm.id );
|
|
};
|
|
|
|
// 更换
|
|
const change = function() {
|
|
HC.openEquipPanel( true, { type: parseInt( _partId ), partner_id : self.partner.bid }, ( _id, _panel ) => {
|
|
_panel.close();
|
|
HC.sender11010( self.partner.partner_id, _id );
|
|
} );
|
|
};
|
|
|
|
// 当前装备操作
|
|
if( eqm ) {
|
|
HC.openEquipChangePanel( true, eqm, ( _op, _panel ) => {
|
|
_panel.close();
|
|
if( _op == "takeoff" ) { takeoff(); }
|
|
if( _op == "change" ) { change(); }
|
|
} );
|
|
}
|
|
// 新装备穿戴
|
|
else {
|
|
change();
|
|
}
|
|
|
|
},
|
|
|
|
// 点击神器槽
|
|
onTouchArtifactSlot: function( _slotId ) {
|
|
|
|
let pos = parseInt( _slotId );
|
|
|
|
|
|
let sta = this.artLocked[ pos ];
|
|
if( sta.lock ) {
|
|
if( nx.dt.strNEmpty( sta.desc ) ) {
|
|
nx.tbox( sta.desc );
|
|
}
|
|
return;
|
|
}
|
|
|
|
const self = this;
|
|
const HC = HeroControl.getInstance();
|
|
const arts = self.partner.artifact_list;
|
|
const art = arts[ pos ];
|
|
|
|
art ? art.partner_id = self.partner.partner_id : "";
|
|
// 洗炼
|
|
const refinement = function() {
|
|
nx.bridge.jumper.jump2Window( FID.ArtifactReset, {
|
|
item: art,
|
|
pos : pos,
|
|
config : art.config
|
|
} );
|
|
};
|
|
|
|
// 脱下
|
|
const takeoff = function() {
|
|
HC.sender11030( self.partner.partner_id, pos, art.id, 0 );
|
|
};
|
|
|
|
// 更换
|
|
const change = function() {
|
|
HC.openEquipPanel( true,{ type: BIT.ARTIFACTCHIPS, partner_id : self.partner.bid }, ( _id, _panel ) => {
|
|
_panel.close();
|
|
HC.sender11030( self.partner.partner_id, pos, _id, 1 );
|
|
} );
|
|
};
|
|
|
|
// 当前神器操作
|
|
if( art ) {
|
|
HC.openEquipChangePanel( true, art, ( _op, _panel ) => {
|
|
_panel.close();
|
|
if( _op == "takeoff" ) { takeoff(); }
|
|
if( _op == "change" ) { change(); }
|
|
if( _op == "refinement" ) { refinement(); }
|
|
} );
|
|
}
|
|
// 新装备神器
|
|
else {
|
|
change();
|
|
}
|
|
},
|
|
|
|
// 一键穿戴
|
|
onTouchOnceOn: function() {
|
|
|
|
if( this.partner && nx.dt.numPositive( this.partner.partner_id, false ) ) {
|
|
const HC = HeroControl.getInstance();
|
|
HC.sender11010( this.partner.partner_id, 0 );
|
|
this.spOnce.animation = "action";
|
|
}
|
|
},
|
|
|
|
// 一键脱装
|
|
onTouchOnceOff: function() {
|
|
|
|
if( this.partner && nx.dt.numPositive( this.partner.partner_id, false ) ) {
|
|
const HC = HeroControl.getInstance();
|
|
HC.sender11011( this.partner.partner_id, 0 )
|
|
}
|
|
},
|
|
|
|
onTouchWeaponLock: function( _nod ){
|
|
|
|
const TC = TipsController.getInstance();
|
|
if( TC && _nod.info ) {
|
|
TC.showItemTips( _nod.info.bid ? _nod.info.bid : _nod.info.base_id );
|
|
}
|
|
|
|
}
|
|
|
|
} );
|