|
| 1 | +import { SceneManager } from './SceneManager'; |
| 2 | +import { CameraManager } from './CameraManager'; |
| 3 | +import { ComponentManager } from './ComponentManager'; |
| 4 | +import { EnvironmentManager } from './EnvironmentManager'; |
| 5 | +import { LightingManager } from './LightingManager'; |
| 6 | + |
| 7 | +// StageManager ties together the lower level managers to provide |
| 8 | +// a simple interface for creating and controlling a complete stage. |
| 9 | +export class StageManager { |
| 10 | + constructor(renderer, container) { |
| 11 | + this.renderer = renderer; |
| 12 | + this.container = container; |
| 13 | + |
| 14 | + this.sceneManager = new SceneManager(renderer); |
| 15 | + this.cameraManager = new CameraManager(renderer, container); |
| 16 | + this.componentManager = new ComponentManager(); |
| 17 | + |
| 18 | + this.environmentManager = null; |
| 19 | + this.lightingManager = null; |
| 20 | + } |
| 21 | + |
| 22 | + /** |
| 23 | + * Create a new stage (scene) and set up environment and lighting managers. |
| 24 | + */ |
| 25 | + createStage(name, options = {}) { |
| 26 | + const scene = this.sceneManager.createScene(name, options); |
| 27 | + |
| 28 | + this.environmentManager = new EnvironmentManager(this.renderer, scene); |
| 29 | + this.lightingManager = new LightingManager(scene); |
| 30 | + |
| 31 | + this.sceneManager.setManagers( |
| 32 | + this.environmentManager, |
| 33 | + this.cameraManager, |
| 34 | + this.componentManager, |
| 35 | + ); |
| 36 | + |
| 37 | + return scene; |
| 38 | + } |
| 39 | + |
| 40 | + /** |
| 41 | + * Set the active stage for rendering. |
| 42 | + */ |
| 43 | + setActiveStage(name) { |
| 44 | + this.sceneManager.setActiveScene(name); |
| 45 | + if (this.lightingManager) { |
| 46 | + this.lightingManager.setScene(this.sceneManager.activeScene); |
| 47 | + } |
| 48 | + } |
| 49 | + |
| 50 | + /** Add an object to the active stage. */ |
| 51 | + addToStage(object) { |
| 52 | + if (this.sceneManager.activeScene) { |
| 53 | + this.sceneManager.activeScene.add(object); |
| 54 | + } |
| 55 | + } |
| 56 | + |
| 57 | + /** Update all managers each frame. */ |
| 58 | + update(deltaTime) { |
| 59 | + this.sceneManager.update(deltaTime); |
| 60 | + this.lightingManager?.update(); |
| 61 | + } |
| 62 | + |
| 63 | + /** Handle resize events. */ |
| 64 | + resize(width, height) { |
| 65 | + this.cameraManager.updateAspect(width, height); |
| 66 | + this.renderer.setSize(width, height); |
| 67 | + } |
| 68 | + |
| 69 | + /** Dispose of all resources. */ |
| 70 | + dispose() { |
| 71 | + this.lightingManager?.dispose(); |
| 72 | + this.environmentManager?.dispose(); |
| 73 | + this.componentManager.dispose(); |
| 74 | + this.sceneManager.dispose(); |
| 75 | + } |
| 76 | +} |
0 commit comments