Files
esengine/packages/editor-app/src/application/commands/component/RemoveComponentCommand.ts
YHH a768b890fd feat: 集成Rust WASM渲染引擎与TypeScript ECS框架 (#228)
* feat: 集成Rust WASM渲染引擎与TypeScript ECS框架

* feat: 增强编辑器UI功能与跨平台支持

* fix: 修复CI测试和类型检查问题

* fix: 修复CI问题并提高测试覆盖率

* fix: 修复CI问题并提高测试覆盖率
2025-11-21 10:03:18 +08:00

58 lines
1.6 KiB
TypeScript

import { Entity, Component } from '@esengine/ecs-framework';
import { MessageHub } from '@esengine/editor-core';
import { BaseCommand } from '../BaseCommand';
/**
* 移除组件命令
*/
export class RemoveComponentCommand extends BaseCommand {
private componentData: Record<string, unknown> = {};
private ComponentClass: new () => Component;
constructor(
private messageHub: MessageHub,
private entity: Entity,
private component: Component
) {
super();
this.ComponentClass = component.constructor as new () => Component;
// 保存组件数据用于撤销
for (const key of Object.keys(component)) {
if (key !== 'entity' && key !== 'id') {
this.componentData[key] = (component as any)[key];
}
}
}
execute(): void {
this.entity.removeComponent(this.component);
this.messageHub.publish('component:removed', {
entity: this.entity,
componentType: this.ComponentClass.name
});
}
undo(): void {
const newComponent = new this.ComponentClass();
// 恢复数据
for (const [key, value] of Object.entries(this.componentData)) {
(newComponent as any)[key] = value;
}
this.entity.addComponent(newComponent);
this.component = newComponent;
this.messageHub.publish('component:added', {
entity: this.entity,
component: newComponent
});
}
getDescription(): string {
return `移除组件: ${this.ComponentClass.name}`;
}
}