Files
fc/dev/project/assets/Scripts/nx/plugin/nx.plugin.manager.js
T
2026-05-23 22:10:14 +08:00

121 lines
2.2 KiB
JavaScript

/*******************************************************************************
*
* Nx插件管理器
*
*
*
* 2021.12.10
******************************************************************************/
const NxObject = require( "nx.object" );
const PE = require( "nx.plugin.event" );
const PV = require( "nx.plugin.view" );
const PVB = require( "nx.plugin.view.binder" );
var NxPluginManager = cc.Class( {
extends: NxObject,
name: "NxPluginManager",
// 初始化
initialize: function( _args ) {
// USPER
if( !this._super( _args ) ) {
return false;
}
// 注册插件库
this.plugins = {
"event" : PE, // 事件相关
"view" : PV, // 视图相关
"vbinder" : PVB, // 视图监听
};
// 全局服务开启
nx.plugin = this;
return true;
},
// 销毁
uninitialize: function() {
// 全局服务关闭
nx.plugin = null;
// USPER
return this._super();
},
// 添加插件
add: function( _inst, _keys ) {
// 对象非法
if( nx.dt.objEmpty( _inst ) ) {
nx.error( "[插件]添加失败,对象非法!" );
return false;
}
// 空插件
if( nx.dt.arrEmpty( _keys ) ) {
nx.error( "[插件]添加失败,插件无效!" );
return false;
}
// 安装
_inst._plugins = _keys;
for( let i = 0; i < _keys.length; ++i ) {
let key = _keys[i];
let handle = this.plugins[key];
if( nx.dt.objEmpty( handle ) ) {
nx.error( "[插件]添加失败,插件无效:", key );
continue;
}
handle.install( _inst );
}
return true;
},
// 删除插件
remove: function( _inst ) {
// 对象非法
if( nx.dt.objEmpty( _inst ) ) {
nx.error( "[插件]删除失败,对象非法!" );
return false;
}
// 空插件
if( nx.dt.arrEmpty( _inst._plugins ) ) {
return true;
}
// 删除
for( let i = 0; i < _inst._plugins.length; ++i ) {
let key = _inst._plugins[i];
let handle = this.plugins[key];
if( nx.dt.objEmpty( handle ) ) {
nx.error( "[插件]删除失败,插件无效:", key );
continue;
}
handle.uninstall( _inst );
}
delete _inst._plugins;
return true;
},
} );
// 模块导出
module.exports = NxPluginManager;