* refactor: 编辑器/运行时架构拆分与构建系统升级 * feat(core): 层级系统重构与UI变换矩阵修复 * refactor: 移除 ecs-components 聚合包并修复跨包组件查找问题 * fix(physics): 修复跨包组件类引用问题 * feat: 统一运行时架构与浏览器运行支持 * feat(asset): 实现浏览器运行时资产加载系统 * fix: 修复文档、CodeQL安全问题和CI类型检查错误 * fix: 修复文档、CodeQL安全问题和CI类型检查错误 * fix: 修复文档、CodeQL安全问题、CI类型检查和测试错误 * test: 补齐核心模块测试用例,修复CI构建配置 * fix: 修复测试用例中的类型错误和断言问题 * fix: 修复 turbo build:npm 任务的依赖顺序问题 * fix: 修复 CI 构建错误并优化构建性能
129 lines
3.4 KiB
TypeScript
129 lines
3.4 KiB
TypeScript
import type { PluginPackageInfo, PluginConfig } from './PluginLoader';
|
|
|
|
export interface ProjectConfig {
|
|
name: string;
|
|
version: string;
|
|
plugins: Record<string, PluginConfig>;
|
|
}
|
|
|
|
/**
|
|
* 内置引擎插件的包信息
|
|
* 这些信息在构建时从各包的 package.json 中提取
|
|
*/
|
|
export const BUILTIN_PLUGIN_PACKAGES: Record<string, PluginPackageInfo> = {
|
|
'@esengine/engine-core': {
|
|
plugin: true,
|
|
pluginExport: 'EnginePlugin',
|
|
category: 'core',
|
|
isEnginePlugin: true
|
|
},
|
|
'@esengine/camera': {
|
|
plugin: true,
|
|
pluginExport: 'CameraPlugin',
|
|
category: 'core',
|
|
isEnginePlugin: true
|
|
},
|
|
'@esengine/sprite': {
|
|
plugin: true,
|
|
pluginExport: 'SpritePlugin',
|
|
category: 'rendering',
|
|
isEnginePlugin: true
|
|
},
|
|
'@esengine/audio': {
|
|
plugin: true,
|
|
pluginExport: 'AudioPlugin',
|
|
category: 'audio',
|
|
isEnginePlugin: true
|
|
},
|
|
'@esengine/ui': {
|
|
plugin: true,
|
|
pluginExport: 'UIPlugin',
|
|
category: 'ui'
|
|
},
|
|
'@esengine/tilemap': {
|
|
plugin: true,
|
|
pluginExport: 'TilemapPlugin',
|
|
category: 'tilemap'
|
|
},
|
|
'@esengine/behavior-tree': {
|
|
plugin: true,
|
|
pluginExport: 'BehaviorTreePlugin',
|
|
category: 'ai'
|
|
},
|
|
'@esengine/physics-rapier2d': {
|
|
plugin: true,
|
|
pluginExport: 'PhysicsPlugin',
|
|
category: 'physics'
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 创建默认项目配置
|
|
*/
|
|
export function createDefaultProjectConfig(): ProjectConfig {
|
|
return {
|
|
name: 'New Project',
|
|
version: '1.0.0',
|
|
plugins: {
|
|
'@esengine/engine-core': { enabled: true },
|
|
'@esengine/camera': { enabled: true },
|
|
'@esengine/sprite': { enabled: true },
|
|
'@esengine/audio': { enabled: true },
|
|
'@esengine/ui': { enabled: true },
|
|
'@esengine/tilemap': { enabled: false },
|
|
'@esengine/behavior-tree': { enabled: false },
|
|
'@esengine/physics-rapier2d': { enabled: false }
|
|
}
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 合并用户配置与默认配置
|
|
*/
|
|
export function mergeProjectConfig(
|
|
userConfig: Partial<ProjectConfig>
|
|
): ProjectConfig {
|
|
const defaultConfig = createDefaultProjectConfig();
|
|
|
|
return {
|
|
name: userConfig.name || defaultConfig.name,
|
|
version: userConfig.version || defaultConfig.version,
|
|
plugins: {
|
|
...defaultConfig.plugins,
|
|
...userConfig.plugins
|
|
}
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 从编辑器的 enabledPlugins 列表创建项目配置
|
|
* Create project config from editor's enabledPlugins list
|
|
*
|
|
* @param enabledPlugins - 启用的插件 ID 列表 / List of enabled plugin IDs
|
|
*/
|
|
export function createProjectConfigFromEnabledList(
|
|
enabledPlugins: string[]
|
|
): ProjectConfig {
|
|
const defaultConfig = createDefaultProjectConfig();
|
|
|
|
// 先禁用所有非核心插件
|
|
// First disable all non-core plugins
|
|
const plugins: Record<string, PluginConfig> = {};
|
|
|
|
for (const id of Object.keys(defaultConfig.plugins)) {
|
|
const packageInfo = BUILTIN_PLUGIN_PACKAGES[id];
|
|
// 核心插件始终启用
|
|
// Core plugins are always enabled
|
|
if (packageInfo?.isEnginePlugin) {
|
|
plugins[id] = { enabled: true };
|
|
} else {
|
|
plugins[id] = { enabled: enabledPlugins.includes(id) };
|
|
}
|
|
}
|
|
|
|
return {
|
|
...defaultConfig,
|
|
plugins
|
|
};
|
|
}
|