Files
Project-M/Assets/_Project/Scripts/Client/Presentation/WorldAtmosphereConfig.cs
T
kronic 414f9ff62a Feel: Phase 1.5 lighting/atmosphere pass — dark ambient + dynamic lights
Dark-ambient, dynamic-light-first look (RoR2/Death Scourges reference),
built filter-agnostic so the pixel style composes on top:

- New DynamicLightSystem (client-only, PresentationSystemGroup): pooled
  point lights follow projectile ghosts; pulsing portal light during
  RoomExplore (same ExpeditionPortalPos authority as the beacon); soft
  resource-node glow that fades with harvest-shrink; short impact
  FLASHES fed by CombatFeedbackSystem's burst funnel (EmitColored +
  SpawnVfx -> RequestFlash). Knobs in DynamicLightConfig (scene object,
  code defaults when absent).
- Atmosphere darkened: WorldAtmosphereConfig/System palettes moved to
  the dark set (base cool dusk, arid burnt dusk, per-room biome consts
  darkened); scene fog switched Linear -> ExponentialSquared (the
  system's per-region DENSITY writes were dead in Linear mode);
  trilight ambient lowered; directional 1.9 -> 1.05 slightly warm.
- 6 landmark mood lights (warpgate cyan, artefact violet x2, survey
  camp warm x2, cabin warm); URP additional-lights-per-object 4 -> 8
  (was starving the existing Aether lights).
- Art-look gate material: Assets/Screenshots/artlook_{base,room}_
  pixel{ON,OFF}.png over the lit scene.

Verified: lights live in Play (20 static at base incl. new landmarks;
pooled dynamics active in-room: node glows + impact flashes), fog/
ambient values confirmed live, 466/466 EditMode, console clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:37:50 -07:00

39 lines
1.9 KiB
C#

using UnityEngine;
namespace ProjectM.Client
{
/// <summary>
/// Live-tunable knobs for <see cref="WorldAtmosphereSystem"/> — the per-region fog/ambient cross-fade
/// between the lush cyan-ordered meadow base (origin) and the hostile orange-wild arid expedition (+1000 X).
/// Mirrors the <c>WorldFeelConfig</c>/<c>VFXConfig</c> bridge idiom: a MonoBehaviour placed in the gameplay
/// scene with a static <see cref="Instance"/> the client presentation system reads (falling back to these
/// same defaults when absent). Pure presentation — never touches the simulation. Colours are sRGB.
/// </summary>
public sealed class WorldAtmosphereConfig : MonoBehaviour
{
public static WorldAtmosphereConfig Instance;
[Header("Region boundary (camera world-space X)")]
[Tooltip("Camera X past this reads as the +1000 expedition region (matches HudSystem's ExpeditionRegionXMin).")]
public float BoundaryX = 500f;
[Tooltip("Half-width of the smooth transition band around BoundaryX, in world units.")]
public float BlendHalfWidth = 80f;
[Header("Base (meadow) atmosphere — Phase 1.5 dark-ambient set (dynamic-light-first)")]
public Color BaseFogColor = new Color(0.09f, 0.13f, 0.14f, 1f);
public float BaseFogDensity = 0.010f;
public Color BaseAmbientSky = new Color(0.32f, 0.38f, 0.48f, 1f);
[Header("Expedition (arid desert) atmosphere")]
public Color ExpeditionFogColor = new Color(0.24f, 0.13f, 0.06f, 1f);
public float ExpeditionFogDensity = 0.016f;
public Color ExpeditionAmbientSky = new Color(0.45f, 0.31f, 0.20f, 1f);
void OnEnable() { Instance = this; }
void OnDisable() { if (Instance == this) Instance = null; }
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
static void ResetStatics() { Instance = null; }
}
}