1
0

LightBlurOverlay.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using Robust.Client.Graphics;
  2. using Robust.Shared.Enums;
  3. namespace Content.Client.Light;
  4. /// <summary>
  5. /// Essentially handles blurring for content-side light overlays.
  6. /// </summary>
  7. public sealed class LightBlurOverlay : Overlay
  8. {
  9. public override OverlaySpace Space => OverlaySpace.BeforeLighting;
  10. [Dependency] private readonly IClyde _clyde = default!;
  11. [Dependency] private readonly IOverlayManager _overlay = default!;
  12. public const int ContentZIndex = TileEmissionOverlay.ContentZIndex + 1;
  13. private IRenderTarget? _blurTarget;
  14. public LightBlurOverlay()
  15. {
  16. IoCManager.InjectDependencies(this);
  17. ZIndex = ContentZIndex;
  18. }
  19. protected override void Draw(in OverlayDrawArgs args)
  20. {
  21. if (args.Viewport.Eye == null)
  22. return;
  23. var beforeOverlay = _overlay.GetOverlay<BeforeLightTargetOverlay>();
  24. var size = beforeOverlay.EnlargedLightTarget.Size;
  25. if (_blurTarget?.Size != size)
  26. {
  27. _blurTarget = _clyde
  28. .CreateRenderTarget(size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "enlarged-light-blur");
  29. }
  30. var target = beforeOverlay.EnlargedLightTarget;
  31. // Yeah that's all this does keep walkin.
  32. _clyde.BlurRenderTarget(args.Viewport, target, _blurTarget, args.Viewport.Eye, 14f * 5f);
  33. }
  34. }