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:
128
packages/runtime-core/src/ProjectConfig.ts
Normal file
128
packages/runtime-core/src/ProjectConfig.ts
Normal 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
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user