feat(editor): 添加 ECS UI 系统和编辑器更新优化 (#238)

This commit is contained in:
YHH
2025-11-26 11:08:10 +08:00
committed by GitHub
parent 3fb6f919f8
commit 7b14fa2da4
62 changed files with 8745 additions and 235 deletions

View File

@@ -8,6 +8,7 @@ import { GizmoRegistry } from '@esengine/editor-core';
import { Core, Scene, Entity, SceneSerializer } from '@esengine/ecs-framework';
import { TransformComponent, SpriteComponent, SpriteAnimatorSystem, SpriteAnimatorComponent } from '@esengine/ecs-components';
import { TilemapComponent, TilemapRenderingSystem } from '@esengine/tilemap';
import { UIRenderDataProvider } from '@esengine/ui';
import { EntityStoreService, MessageHub, SceneManagerService, ProjectService } from '@esengine/editor-core';
import * as esEngine from '@esengine/engine';
import {
@@ -33,6 +34,7 @@ export class EngineService {
private renderSystem: EngineRenderSystem | null = null;
private animatorSystem: SpriteAnimatorSystem | null = null;
private tilemapSystem: TilemapRenderingSystem | null = null;
private uiRenderProvider: UIRenderDataProvider | null = null;
private initialized = false;
private running = false;
private animationFrameId: number | null = null;
@@ -121,6 +123,17 @@ export class EngineService {
// 将瓦片地图系统注册为渲染数据提供者
this.renderSystem.addRenderDataProvider(this.tilemapSystem);
// Register UI render data provider
// 注册 UI 渲染数据提供者
this.uiRenderProvider = new UIRenderDataProvider();
this.renderSystem.addRenderDataProvider(this.uiRenderProvider);
// Set up texture callback for UI text rendering
// 设置 UI 文本渲染的纹理回调
this.uiRenderProvider.setTextureCallback((id: number, dataUrl: string) => {
this.bridge!.loadTexture(id, dataUrl);
});
// Inject GizmoRegistry into render system
// 将 GizmoRegistry 注入渲染系统
this.renderSystem.setGizmoRegistry(
@@ -702,6 +715,13 @@ export class EngineService {
this.tilemapSystem.clearCache();
}
// Clear UI text cache before restoring
// 恢复前清除 UI 文本缓存
if (this.uiRenderProvider) {
console.log('[EngineService] Clearing UI text cache before restore');
this.uiRenderProvider.clearTextCache();
}
// Use SceneSerializer from core library
console.log('[EngineService] Deserializing scene snapshot');
SceneSerializer.deserialize(this.scene, this.sceneSnapshot, {