/****************************************************************** * * 伙伴信息页 --- 装备 * ******************************************************************/ 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 ); } } } );