414f9ff62a
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>
39 lines
1.9 KiB
C#
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; }
|
|
}
|
|
}
|