Files
fc/dev/project/assets/Scripts/mod/partner/cmps/basic/cmp.partner.equips.js
T

473 lines
14 KiB
JavaScript
Raw Normal View History

2026-05-23 22:10:14 +08:00
/******************************************************************
*
* 伙伴信息页 --- 装备
*
******************************************************************/
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 );
}
}
} );