Feature/editor optimization (#251)

* 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 构建错误并优化构建性能
This commit is contained in:
YHH
2025-12-01 22:28:51 +08:00
committed by GitHub
parent 189714c727
commit b42a7b4e43
468 changed files with 18301 additions and 9075 deletions

View File

@@ -0,0 +1,128 @@
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
};
}