feat(engine): 添加编辑器模式标志控制编辑器UI显示 (#274)
* feat(engine): 添加编辑器模式标志控制编辑器UI显示 - 在 Rust 引擎中添加 isEditor 标志,控制网格、gizmos、坐标轴指示器的显示 - 运行时模式下自动隐藏所有编辑器专用 UI - 编辑器预览和浏览器运行时通过 setEditorMode(false) 禁用编辑器 UI - 添加 Scene.isEditorMode 延迟组件生命周期回调,直到 begin() 调用 - 修复用户组件注册到 Core ComponentRegistry 以支持序列化 - 修复 Run in Browser 时用户组件加载问题 * fix: 复制引擎模块的类型定义文件到 dist/engine * fix: 修复用户项目 tsconfig paths 类型定义路径 - 从 module.json 读取实际包名而不是使用目录名 - 修复 .d.ts 文件复制逻辑,支持 .mjs 扩展名
This commit is contained in:
@@ -62,6 +62,10 @@ export class SceneManagerService implements IService {
|
||||
throw new Error('No active scene');
|
||||
}
|
||||
|
||||
// 确保编辑器模式下设置 isEditorMode,延迟组件生命周期回调
|
||||
// Ensure isEditorMode is set in editor to defer component lifecycle callbacks
|
||||
scene.isEditorMode = true;
|
||||
|
||||
// 只移除实体,保留系统(系统由模块管理)
|
||||
// Only remove entities, preserve systems (systems managed by modules)
|
||||
scene.entities.removeAllEntities();
|
||||
@@ -117,6 +121,11 @@ export class SceneManagerService implements IService {
|
||||
if (!scene) {
|
||||
throw new Error('No active scene');
|
||||
}
|
||||
|
||||
// 确保编辑器模式下设置 isEditorMode,延迟组件生命周期回调
|
||||
// Ensure isEditorMode is set in editor to defer component lifecycle callbacks
|
||||
scene.isEditorMode = true;
|
||||
|
||||
scene.deserialize(jsonData, {
|
||||
strategy: 'replace'
|
||||
});
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
|
||||
import type { IService } from '@esengine/ecs-framework';
|
||||
import { Injectable, createLogger, PlatformDetector } from '@esengine/ecs-framework';
|
||||
import { Injectable, createLogger, PlatformDetector, ComponentRegistry as CoreComponentRegistry } from '@esengine/ecs-framework';
|
||||
import type {
|
||||
IUserCodeService,
|
||||
UserScriptInfo,
|
||||
@@ -333,9 +333,23 @@ export class UserCodeService implements IService, IUserCodeService {
|
||||
if (this._isComponentClass(exported)) {
|
||||
logger.debug(`Found component: ${name} | 发现组件: ${name}`);
|
||||
|
||||
// Register with ComponentRegistry if provided | 如果提供了 ComponentRegistry 则注册
|
||||
// ComponentRegistry expects ComponentTypeInfo object, not the class directly
|
||||
// ComponentRegistry 期望 ComponentTypeInfo 对象,而不是直接传入类
|
||||
// Register with Core ComponentRegistry for serialization/deserialization
|
||||
// 注册到核心 ComponentRegistry 用于序列化/反序列化
|
||||
try {
|
||||
CoreComponentRegistry.register(exported);
|
||||
// Debug: verify registration
|
||||
const registeredType = CoreComponentRegistry.getComponentType(name);
|
||||
if (registeredType) {
|
||||
logger.info(`Component ${name} registered to core registry successfully`);
|
||||
} else {
|
||||
logger.warn(`Component ${name} registered but not found by name lookup`);
|
||||
}
|
||||
} catch (err) {
|
||||
logger.warn(`Failed to register component ${name} to core registry | 注册组件 ${name} 到核心注册表失败:`, err);
|
||||
}
|
||||
|
||||
// Register with Editor ComponentRegistry for UI display
|
||||
// 注册到编辑器 ComponentRegistry 用于 UI 显示
|
||||
if (componentRegistry && typeof componentRegistry.register === 'function') {
|
||||
try {
|
||||
componentRegistry.register({
|
||||
@@ -345,7 +359,7 @@ export class UserCodeService implements IService, IUserCodeService {
|
||||
description: `User component: ${name}`
|
||||
});
|
||||
} catch (err) {
|
||||
logger.warn(`Failed to register component ${name} | 注册组件 ${name} 失败:`, err);
|
||||
logger.warn(`Failed to register component ${name} to editor registry | 注册组件 ${name} 到编辑器注册表失败:`, err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user