2025-12-13 19:44:08 +08:00
|
|
|
import type { ComponentRegistry as ComponentRegistryType, IScene } from '@esengine/ecs-framework';
|
|
|
|
|
import type { IRuntimeModule, IRuntimePlugin, ModuleManifest, SystemContext } from '@esengine/engine-core';
|
|
|
|
|
import { EngineBridgeToken } from '@esengine/engine-core';
|
2025-12-01 22:28:51 +08:00
|
|
|
import { CameraComponent } from './CameraComponent';
|
2025-12-13 19:44:08 +08:00
|
|
|
import { CameraSystem } from './CameraSystem';
|
2025-12-01 22:28:51 +08:00
|
|
|
|
|
|
|
|
class CameraRuntimeModule implements IRuntimeModule {
|
|
|
|
|
registerComponents(registry: typeof ComponentRegistryType): void {
|
|
|
|
|
registry.register(CameraComponent);
|
|
|
|
|
}
|
2025-12-13 19:44:08 +08:00
|
|
|
|
|
|
|
|
createSystems(scene: IScene, context: SystemContext): void {
|
|
|
|
|
// 从服务注册表获取 EngineBridge | Get EngineBridge from service registry
|
|
|
|
|
const bridge = context.services.get(EngineBridgeToken);
|
|
|
|
|
if (!bridge) {
|
|
|
|
|
console.warn('[CameraPlugin] EngineBridge not found, CameraSystem will not be created');
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建并添加 CameraSystem | Create and add CameraSystem
|
|
|
|
|
const cameraSystem = new CameraSystem(bridge);
|
|
|
|
|
scene.addSystem(cameraSystem);
|
|
|
|
|
}
|
2025-12-01 22:28:51 +08:00
|
|
|
}
|
|
|
|
|
|
2025-12-03 22:15:22 +08:00
|
|
|
const manifest: ModuleManifest = {
|
|
|
|
|
id: 'camera',
|
|
|
|
|
name: '@esengine/camera',
|
|
|
|
|
displayName: 'Camera',
|
2025-12-01 22:28:51 +08:00
|
|
|
version: '1.0.0',
|
|
|
|
|
description: '2D/3D 相机组件',
|
2025-12-03 22:15:22 +08:00
|
|
|
category: 'Rendering',
|
|
|
|
|
isCore: false,
|
|
|
|
|
defaultEnabled: true,
|
|
|
|
|
isEngineModule: true,
|
|
|
|
|
dependencies: ['core', 'math'],
|
|
|
|
|
exports: { components: ['CameraComponent'] }
|
2025-12-01 22:28:51 +08:00
|
|
|
};
|
|
|
|
|
|
2025-12-13 19:44:08 +08:00
|
|
|
export const CameraPlugin: IRuntimePlugin = {
|
2025-12-03 22:15:22 +08:00
|
|
|
manifest,
|
2025-12-01 22:28:51 +08:00
|
|
|
runtimeModule: new CameraRuntimeModule()
|
|
|
|
|
};
|