//@ts-nocheck import * as THREE from 'three' import { blockEntityBrightness, DEFAULT_LIGHTMAP_PARAMS, type BlockLightmapParams, } from './blockEntityLighting' export type BlockEntityOverlayLight = { material: THREE.MeshBasicMaterial blockLightNorm: number skyLightNorm: number } export class BlockEntityLightRegistry { private readonly entries = new Set() private skyLevel = 1 private lightmapParams: BlockLightmapParams = { ...DEFAULT_LIGHTMAP_PARAMS } register (entry: BlockEntityOverlayLight): void { this.entries.add(entry) this.applyBrightness(entry) } unregister (material: THREE.Material): void { for (const entry of this.entries) { if (entry.material === material) { this.entries.delete(entry) break } } } setSkyLevel (value: number): void { this.skyLevel = value this.refreshAll() } setLightmapParams (params: BlockLightmapParams): void { this.lightmapParams = { ...this.lightmapParams, ...params } this.refreshAll() } getSkyLevel (): number { return this.skyLevel } private refreshAll (): void { for (const entry of this.entries) { this.applyBrightness(entry) } } private applyBrightness (entry: BlockEntityOverlayLight): void { const brightness = blockEntityBrightness( entry.blockLightNorm, entry.skyLightNorm, this.skyLevel, this.lightmapParams, ) entry.material.color.setScalar(brightness) } } export function tintBannerMaterial ( material: THREE.MeshBasicMaterial, blockLightNorm: number, skyLightNorm: number, skyLevel: number, lightmapParams: BlockLightmapParams = DEFAULT_LIGHTMAP_PARAMS, ): number { const brightness = blockEntityBrightness(blockLightNorm, skyLightNorm, skyLevel, lightmapParams) material.color.setScalar(brightness) return brightness }