Files
esengine/packages/world-streaming/src/WorldStreamingModule.ts

51 lines
1.8 KiB
TypeScript
Raw Normal View History

import type { IScene, ServiceContainer } from '@esengine/esengine';
import { ComponentRegistry } from '@esengine/esengine';
import type { IRuntimeModule, SystemContext } from '@esengine/engine-core';
import { ChunkComponent } from './components/ChunkComponent';
import { StreamingAnchorComponent } from './components/StreamingAnchorComponent';
import { ChunkLoaderComponent } from './components/ChunkLoaderComponent';
import { ChunkStreamingSystem } from './systems/ChunkStreamingSystem';
import { ChunkCullingSystem } from './systems/ChunkCullingSystem';
import { ChunkManager } from './services/ChunkManager';
/**
*
*
* Runtime module for world streaming functionality.
*
*
*/
export class WorldStreamingModule implements IRuntimeModule {
private _chunkManager: ChunkManager | null = null;
get chunkManager(): ChunkManager | null {
return this._chunkManager;
}
registerComponents(registry: typeof ComponentRegistry): void {
registry.register(ChunkComponent);
registry.register(StreamingAnchorComponent);
registry.register(ChunkLoaderComponent);
}
registerServices(services: ServiceContainer): void {
this._chunkManager = new ChunkManager();
services.registerInstance(ChunkManager, this._chunkManager);
}
createSystems(scene: IScene, _context: SystemContext): void {
const streamingSystem = new ChunkStreamingSystem();
if (this._chunkManager) {
streamingSystem.setChunkManager(this._chunkManager);
}
scene.addSystem(streamingSystem);
scene.addSystem(new ChunkCullingSystem());
}
onSystemsCreated(_scene: IScene, _context: SystemContext): void {
// No post-creation setup needed
}
}
export const worldStreamingModule = new WorldStreamingModule();