Weapons/PeachLauncher/PeachSplatOverlay.razor
@using Sandbox;
@using Sandbox.UI;
@inherits PanelComponent

@* 
    PeachSplatOverlay — full-screen blit overlay driven by PeachOverlayBridge.
    Add this component to the HUD / camera GameObject in the scene (one instance).
    Evening = regular peach, Midnight = giant peach.
*@

<root>
    <div class="peach-overlay @(PeachOverlayBridge.IsGiant ? "midnight" : "evening")" style="opacity: @OpacityStr;">
    </div>
</root>

@code {
    private float _current = 0f;
    public string OpacityStr => _current.ToString( "0.00" );

    protected override void OnUpdate()
    {
        PeachOverlayBridge.Tick( Time.Delta );

        _current = _current.LerpTo( PeachOverlayBridge.Target, Time.Delta * PeachOverlayBridge.Speed * 3f );

        if ( PeachOverlayBridge.Exiting && _current < 0.005f )
        {
            _current = 0f;
            PeachOverlayBridge.OnFullyFaded();
        }

        StateHasChanged();
    }

    protected override int BuildHash()
    {
        return System.HashCode.Combine( PeachOverlayBridge.IsGiant, (int)(_current * 1000) );
    }
}

<style>
    .peach-overlay {
        position: absolute;
        inset: 0;
        pointer-events: none;
    }

    .peach-overlay.evening {
        background: radial-gradient(
            ellipse at center,
            rgba(30, 15, 60, 0) 30%,
            rgba(80, 30, 120, 220) 100%
        );
    }

    .peach-overlay.midnight {
        background: radial-gradient(
            ellipse at center,
            rgba(5, 5, 30, 40) 20%,
            rgba(10, 5, 60, 242) 100%
        );
    }
</style>