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

@@ -0,0 +1,46 @@
import type { Entity } from '@esengine/ecs-framework';
import type { IGizmoRenderData, IRectGizmoData, GizmoColor } from '@esengine/editor-core';
import { GizmoRegistry } from '@esengine/editor-core';
import { UITransformComponent } from '@esengine/ui';
const UI_GIZMO_COLOR: GizmoColor = { r: 0.2, g: 0.6, b: 1, a: 0.8 };
const UI_GIZMO_COLOR_UNSELECTED: GizmoColor = { r: 0.2, g: 0.6, b: 1, a: 0.3 };
function uiTransformGizmoProvider(
transform: UITransformComponent,
_entity: Entity,
isSelected: boolean
): IGizmoRenderData[] {
if (!transform.visible) {
return [];
}
const width = transform.width * transform.scaleX;
const height = transform.height * transform.scaleY;
const centerX = transform.x + width * transform.pivotX;
const centerY = transform.y + height * transform.pivotY;
const gizmo: IRectGizmoData = {
type: 'rect',
x: centerX,
y: centerY,
width,
height,
rotation: transform.rotation,
originX: transform.pivotX,
originY: transform.pivotY,
color: isSelected ? UI_GIZMO_COLOR : UI_GIZMO_COLOR_UNSELECTED,
showHandles: isSelected
};
return [gizmo];
}
export function registerUITransformGizmo(): void {
GizmoRegistry.register(UITransformComponent, uiTransformGizmoProvider);
}
export function unregisterUITransformGizmo(): void {
GizmoRegistry.unregister(UITransformComponent);
}