Grid/DarkProfile.cs
using Sandbox;
using static Sandbox.Tonemapping;

namespace SWB.Visuals.Profiles;

public sealed class DarkProfile : CinematicProfile
{
    // ─────────────────────────────
    // TONEMAPPING
    // ─────────────────────────────

    public override TonemappingMode Tonemap => TonemappingMode.ACES;

    // Tumma yö, lukittu exposure
    public override float MinExposure => -1.25f;
    public override float MaxExposure => -1.25f;

    // ─────────────────────────────
    // BLOOM
    // ─────────────────────────────
    // Arkhamissa bloom on hyvin hillitty → pois päältä
    public override bool EnableBloom => false;
    public override float BloomThreshold => 1.2f;

    // ─────────────────────────────
    // COLOR ADJUSTMENTS
    // ─────────────────────────────

    // Neo-noir: tumma, kontrastinen, desaturoitu
    public override float Brightness => -0.15f;
    public override float Contrast => 1.3f;
    public override float Saturation => 0.65f;

    // ─────────────────────────────
    // LIGHTING
    // ─────────────────────────────

    protected override void ApplyLighting()
    {
        var cam = Scene.Camera;
        if (cam == null)
            return;

        // ───────── KEY LIGHT – KUU / KAUPUNKIVALOT ─────────
        var keyGO = GetOrCreateLight("Arkham_KeyLight");
        var key = keyGO.Components.GetOrCreate<DirectionalLight>();

        // Kylmä sinertävä kuuvalo
        key.LightColor = new Color(0.55f, 0.75f, 1.0f);
        key.Shadows = true;

        // Sivulta ja ylhäältä → voimakkaat siluetit
        keyGO.Transform.Rotation =
            Rotation.LookAt(new Vector3(-1.0f, 0.2f, -1.2f));

        // ───────── FILL LIGHT – KAUPUNGIN AMBIENT ─────────
        var fillGO = GetOrCreateLight("Arkham_AmbientFill");
        var fill = fillGO.Components.GetOrCreate<PointLight>();

        // Vihertävän-sininen heijastus (betoni, märät pinnat)
        fill.LightColor = new Color(0.15f, 0.25f, 0.35f);
        fill.Radius = 4500f;
        fill.Shadows = false;

        fillGO.Transform.Position =
            cam.Transform.Position +
            cam.Transform.Rotation.Up * 600f;

        // ───────── RIM LIGHT – BATMAN-SILUETTI ─────────
        var rimGO = GetOrCreateLight("Arkham_RimLight");
        var rim = rimGO.Components.GetOrCreate<DirectionalLight>();

        // Kylmä vastavalo, korostaa muotoja
        rim.LightColor = new Color(0.4f, 0.55f, 0.8f);
        rim.Shadows = false;

        rimGO.Transform.Rotation =
            Rotation.LookAt(new Vector3(1.0f, -0.1f, -0.6f));
    }
}