290 lines
7.7 KiB
JavaScript
290 lines
7.7 KiB
JavaScript
|
|
/******************************************************************
|
||
|
|
*
|
||
|
|
* 形象设置
|
||
|
|
*
|
||
|
|
******************************************************************/
|
||
|
|
|
||
|
|
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;
|
||
|
|
|
||
|
|
},
|
||
|
|
|
||
|
|
} );
|