import { describe, expect, it } from "vitest"; import { resolveUnderwaterFogState } from "../../src/runtime-three/underwater-fog"; describe("resolveUnderwaterFogState", () => { const runtimeScene = { volumes: { water: [ { brushId: "water-1", center: { x: 0, y: 0, z: 0 }, rotationDegrees: { x: 0, y: 25, z: 0 }, size: { x: 10, y: 4, z: 8 }, colorHex: "#347aa0", surfaceOpacity: 0.72, waveStrength: 0.4 } ], fog: [], light: [] } }; it("returns fog tint and density from the containing water volume", () => { const fogState = resolveUnderwaterFogState(runtimeScene, { cameraSubmerged: true, eyePosition: { x: 0.3, y: 1.1, z: 0.2 } }); expect(fogState).not.toBeNull(); expect(fogState?.colorHex).toBe("#347aa0"); expect(fogState?.density ?? 0).toBeCloseTo(0.08295, 5); }); it("does not enable fog when the camera is not submerged", () => { expect( resolveUnderwaterFogState(runtimeScene, { cameraSubmerged: false, eyePosition: { x: 0.3, y: 1.1, z: 0.2 } }) ).toBeNull(); }); it("does not enable fog for points outside the water volume", () => { expect( resolveUnderwaterFogState(runtimeScene, { cameraSubmerged: true, eyePosition: { x: 20, y: 1.1, z: 0.2 } }) ).toBeNull(); }); });