using Unity.Entities; using UnityEngine; namespace ProjectM.Client { /// /// Client-only water-column ATMOSPHERE for the LANTERN seabed (deep-sea murk). A managed presentation /// system (SystemBase, main thread, NO Burst) in that OBSERVES the /// follow-camera's world-space X and lerps fog + flat ambient between the /// base-shelf murk (origin) and the deeper out-shelf murk (+1000 X) — mirroring HudSystem's region split /// at camera X > 500. The skybox stays empty and the post-FX volume GLOBAL; only fog colour/density + /// ambient shift per region. Pure presentation: never mutates the simulation. Knobs live in /// (falls back to baked LANTERN-murk defaults when absent). Gated by /// so it never restyles the menu or ArtStaging. Per-room-biome /// murk variants key on the replicated RunInfo.CurrentBiome (re-meant to depth/water flavors — the old /// meadow/arid/blight palettes died in the LANTERN realignment). /// [WorldSystemFilter(WorldSystemFilterFlags.ClientSimulation)] [UpdateInGroup(typeof(PresentationSystemGroup))] public partial class WorldAtmosphereSystem : SystemBase { Camera _cam; protected override void OnUpdate() { if (!ScenePolicy.IsGameplayScene()) return; if (_cam == null) _cam = Camera.main; if (_cam == null) return; var cfg = WorldAtmosphereConfig.Instance; float boundary = cfg != null ? cfg.BoundaryX : 500f; float half = cfg != null ? Mathf.Max(1f, cfg.BlendHalfWidth) : 80f; // LANTERN murk defaults (match the ArtStaging source-of-truth hues; density is the play-readability knob). Color baseFog = cfg != null ? cfg.BaseFogColor : new Color(0.02f, 0.10f, 0.12f, 1f); float baseDen = cfg != null ? cfg.BaseFogDensity : 0.035f; Color baseAmb = cfg != null ? cfg.BaseAmbientSky : new Color(0.03f, 0.055f, 0.08f, 1f); Color expFog = cfg != null ? cfg.ExpeditionFogColor : new Color(0.015f, 0.075f, 0.10f, 1f); float expDen = cfg != null ? cfg.ExpeditionFogDensity : 0.04f; Color expAmb = cfg != null ? cfg.ExpeditionAmbientSky : new Color(0.02f, 0.045f, 0.07f, 1f); // 2026-08-07 audit purge: per-room murk flavors (kelp shallows / crush-dark trench / gloam bloom) // keyed off RunInfo.CurrentBiome. The run FSM is deleted, so the out-shelf murk config above is the // whole look. Re-key this off LANTERN's pocket type when Phase 2 lands — the colour constants are in // git if the three flavors are wanted back. float x = _cam.transform.position.x; float t = Mathf.Clamp01((x - (boundary - half)) / (2f * half)); t = t * t * (3f - 2f * t); // smoothstep RenderSettings.fogColor = Color.Lerp(baseFog, expFog, t); RenderSettings.fogDensity = Mathf.Lerp(baseDen, expDen, t); RenderSettings.ambientSkyColor = Color.Lerp(baseAmb, expAmb, t); } } }