import type { LightingConfig } from "../game/playableGame.js"; import type { SkyEnvironmentConfig } from "../world/features.js"; /** * Which half of a game's authored `lighting` a time-of-day sky takes over. * * A time-of-day sky has to move the sun or the whole world stays lit like noon after dark: the * dome turns black while the ground keeps its midday key light. So under a day cycle the first * directional light is the **sun**, and `ambient`/`hemisphere` are the **noon keyframes** of the * ambient fill — the same convention the sky already uses for `horizonColor`/`zenithColor`. Every * other light (fill directionals, point and spot lamps) stays exactly as authored. */ export interface SkyOwnedLighting { /** Sun + ambient terms the sky now drives from the day cycle; intensities read as noon values. */ sky: LightingConfig; /** Lights the sky does not own; mounted as authored. */ rest: LightingConfig; } /** * Splits authored lighting into the sun/ambient terms a time-of-day sky drives and the rest. * Returns an empty `sky` when the game authored no lighting, so callers can keep engine defaults. * @capability day-night-sky hand the sun and ambient fill to the day cycle while authored lamps keep running */ export declare function splitSkyOwnedLighting(lighting: LightingConfig | undefined): SkyOwnedLighting; /** * The authored `lighting` as the day cycle's **noon keyframes**, filling only the sky fields the * game left unset. A game's midday sun, fill and fog therefore become the peak the cycle scales * and cross-fades from, so an authored world gets a sunset and a night without re-authoring the * same numbers in the sky. Authored sky fields always win over the lighting config. * @capability day-night-sky read authored lighting as the day cycle's noon keyframe */ export declare function skyNoonKeyframes(sky: T, lighting: LightingConfig | undefined, fogColor?: string): T;