mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-06 16:10:09 +00:00
79 lines
2.2 KiB
TypeScript
79 lines
2.2 KiB
TypeScript
import * as THREE from 'three'
|
|
|
|
import { EventManagerInterface, LightingManagerInterface } from './interfaces'
|
|
|
|
export class LightingManager implements LightingManagerInterface {
|
|
lights: THREE.Light[] = []
|
|
private scene: THREE.Scene
|
|
private eventManager: EventManagerInterface
|
|
|
|
constructor(scene: THREE.Scene, eventManager: EventManagerInterface) {
|
|
this.scene = scene
|
|
this.eventManager = eventManager
|
|
}
|
|
|
|
init(): void {
|
|
this.setupLights()
|
|
}
|
|
|
|
dispose(): void {
|
|
this.lights.forEach((light) => {
|
|
this.scene.remove(light)
|
|
})
|
|
this.lights = []
|
|
}
|
|
|
|
setupLights(): void {
|
|
const ambientLight = new THREE.AmbientLight(0xffffff, 0.5)
|
|
this.scene.add(ambientLight)
|
|
this.lights.push(ambientLight)
|
|
|
|
const mainLight = new THREE.DirectionalLight(0xffffff, 0.8)
|
|
mainLight.position.set(0, 10, 10)
|
|
this.scene.add(mainLight)
|
|
this.lights.push(mainLight)
|
|
|
|
const backLight = new THREE.DirectionalLight(0xffffff, 0.5)
|
|
backLight.position.set(0, 10, -10)
|
|
this.scene.add(backLight)
|
|
this.lights.push(backLight)
|
|
|
|
const leftFillLight = new THREE.DirectionalLight(0xffffff, 0.3)
|
|
leftFillLight.position.set(-10, 0, 0)
|
|
this.scene.add(leftFillLight)
|
|
this.lights.push(leftFillLight)
|
|
|
|
const rightFillLight = new THREE.DirectionalLight(0xffffff, 0.3)
|
|
rightFillLight.position.set(10, 0, 0)
|
|
this.scene.add(rightFillLight)
|
|
this.lights.push(rightFillLight)
|
|
|
|
const bottomLight = new THREE.DirectionalLight(0xffffff, 0.2)
|
|
bottomLight.position.set(0, -10, 0)
|
|
this.scene.add(bottomLight)
|
|
this.lights.push(bottomLight)
|
|
}
|
|
|
|
setLightIntensity(intensity: number): void {
|
|
this.lights.forEach((light) => {
|
|
if (light instanceof THREE.DirectionalLight) {
|
|
if (light === this.lights[1]) {
|
|
light.intensity = intensity * 0.8
|
|
} else if (light === this.lights[2]) {
|
|
light.intensity = intensity * 0.5
|
|
} else if (light === this.lights[5]) {
|
|
light.intensity = intensity * 0.2
|
|
} else {
|
|
light.intensity = intensity * 0.3
|
|
}
|
|
} else if (light instanceof THREE.AmbientLight) {
|
|
light.intensity = intensity * 0.5
|
|
}
|
|
})
|
|
|
|
this.eventManager.emitEvent('lightIntensityChange', intensity)
|
|
}
|
|
|
|
reset(): void {}
|
|
}
|