/****************************************************************** * * 形象设置 * ******************************************************************/ const BridgeWindow = require( "bridge.window" ); const RoleController = require( "role_controller" ); const FxTogs = require( "nx.fx.togs" ); const FxSVC = require( "nx.fx.sv.expand" ); // 菜单标签 const MenuTags = { Partner: 0, Skin: 1, }; cc.Class( { extends: BridgeWindow, properties: { togMenu: { default: null, type: FxTogs }, nodShow: { default: null, type: cc.Node }, lstPartners: { default: null, type: FxSVC }, }, // 重载:参数打开 onOpenConfigs: function( _params ) { // 当前拥有 this.library = []; this.idxPartner = -1; this.use_id = _params.use_id || 0; this.figures = _params.list || []; // Tog监听 this.togMenu.posTog = this.onTogMenu.bind( this ); this.togMenu.togTo( MenuTags.Partner ); this.onTogMenu( MenuTags.Partner ); }, // 重载:关闭前 onPreClosed: function() { this.lstPartners.rebuild( [] ); }, // 等级切换 onTogMenu: function( _index ) { this.tagMenu = _index; // 重置 this.idxPartner = -1; this.partners = this.queryFigureList( this.tagMenu ); this.lstPartners.rebuild( this.partners ); // 聚焦 this.lstPartners.cleanFocus(); this.scheduleOnce( () => { this.setUsedPartner( this.use_id ); this.onPartnerChanged( { index: 0, mdata: this.partners[ 0 ], } ); }, 0.1 ); }, // 设置展示角色 setCurrent: function( _info ) { // 置空 if( nx.dt.objEmpty( _info ) ) { nx.gui.setActive( this.nodShow, "show", false ); nx.gui.setActive( this.nodShow, "cond", false ); nx.gui.setActive( this.nodShow, "props", false ); return; } // 模型 nx.gui.setActive( this.nodShow, "show", true ); let model = nx.gui.getComponent( this.nodShow, "show", "nx.fx.spine" ); if( model ) { let path = PathTool.getSpinePath( _info.model, _info.model, false ); model.load( path, ( _e ) => { if( !_e ) { model.action( "stand2", true ); } else { model.stop(); } } ); } // 属性 let text = "FigureNoProps"; nx.gui.setActive( this.nodShow, "props", true ); if( nx.dt.arrNEmpty( _info.attr ) ) { text = nx.bridge.attrs.strAttributes( _info.attr ); } nx.gui.setString( this.nodShow, "props/txt", nx.text.getKey( text ) ); // 解锁 text = "FigureUnlocked"; nx.gui.setActive( this.nodShow, "cond", true ); if( !_info.unlock ) { text = _info.tip; } nx.gui.setString( this.nodShow, "cond/txt", nx.text.getKey( text ) ); }, // ================================================================ // 伙伴相关 // ================================================================ // 设置当前使用的伙伴形象 setUsedPartner: function( _id ) { this.use_id = _id; let chds = this.lstPartners.bindSCV.content.children; for( let i = 0; i < chds.length; ++i ) { let node = chds[ i ]; if( node && node.svItem ) { nx.gui.setActive( node.svItem, "used", node.svItem.mdata.id == _id ); } } }, // 选中切换 onPartnerChanged: function( _item ) { // 空 / 当前使用中 if( !_item || !_item.mdata || ( _item.index == this.idxPartner ) ) { return; } // 聚焦 this.lstPartners.cleanFocus(); this.lstPartners.addFocus( _item.index ); // 展示信息 this.idxPartner = _item.index; this.setCurrent( _item.mdata ); // 操作刷新 let ok = _item.mdata.unlock && ( _item.mdata.id != this.use_id ); nx.gui.setLocked( this, "panel/confirm", !ok ); }, // 点击确认 onTouchConfirm: function() { let partner = this.partners[ this.idxPartner ]; if( !partner ) { return; } let RC = RoleController.getInstance(); RC.reqUseFigure( partner.id, ( _ret, _data ) => { if( !_ret ) { nx.tbox( _data ); return; } this.setUsedPartner( partner.id ); nx.gui.setLocked( this, "panel/confirm", true ); } ); }, // 获取形象列表 queryFigureList: function( _type ) { // 统计全形象 if( nx.dt.arrEmpty( this.library ) ) { this.library = []; let LOOKS = game.configs.looks_data.data_data; let SKINS = game.configs.partner_skin_data.data_skin_info; for( let id in LOOKS ) { let ifo = LOOKS[ id ]; let cfgs = game.configs.partner_data.data_partner_base[ ifo.partner_id ]; if( nx.dt.objEmpty( cfgs ) ) { nx.error( "无效形象配置:", id ); continue; } let item = { id: ifo.id, icon: 0, skin: ifo.skin_id, name: ifo.name, model: ifo.model, partner: ifo.partner_id, unlock: false, tip: ifo.unlock_tip, attr: ifo.attr, }; // 如果是皮肤 if( nx.dt.numPositive( ifo.skin_id, false ) ) { let sfo = SKINS[ ifo.skin_id ]; if( nx.dt.objNEmpty( sfo ) ) { item.name = sfo.skin_name; item.attr = sfo.skin_attr; item.model = sfo.res_id; item.icon = sfo.head_id; item.tip = sfo.source_tip; } } else { let tf = gitemdata( cfgs.item_id ); if( tf ) { item.icon = tf.icon; } } this.library.push( item ); } } // 是否解锁 let self = this; let isUnlocked = function( _id ) { for( let i in self.figures ) { let tm = self.figures[ i ]; if( tm && tm.id == _id ) { return true; } } return false; }; // 重建 let partners = []; for( let i = 0; i < this.library.length; ++i ) { let partner = this.library[ i ]; partner.unlock = isUnlocked( partner.id ); // 有效皮肤列表 if( _type == MenuTags.Skin && partner.skin > 0 ) { partners.push( partner ); continue; } // 有效伙伴列表 if( _type == MenuTags.Partner && partner.skin == 0 ) { partners.push( partner ); continue; } } // 排序 partners.sort( ( _p1, _p2 ) => { // 聚焦首位 if( _p1.id == self.use_id || _p2.id == self.use_id ) { return ( _p1.id == self.use_id ) ? -1 : 1; } // 解锁优先 if( _p1.unlock || _p2.unlock ) { return _p1.unlock ? -1 : 1; } // ID排序 return _p1.id - _p2.id; } ); return partners; }, } );