diff --git a/Content.Client/Eye/Blinding/BlurryVisionOverlay.cs b/Content.Client/Eye/Blinding/BlurryVisionOverlay.cs index 4f957ae692..591ad4ffbb 100644 --- a/Content.Client/Eye/Blinding/BlurryVisionOverlay.cs +++ b/Content.Client/Eye/Blinding/BlurryVisionOverlay.cs @@ -14,15 +14,13 @@ namespace Content.Client.Eye.Blinding public override bool RequestScreenTexture => true; public override OverlaySpace Space => OverlaySpace.WorldSpace; - private readonly ShaderInstance _blurryVisionXShader; - private readonly ShaderInstance _blurryVisionYShader; + private readonly ShaderInstance _dim; private BlurryVisionComponent _blurryVisionComponent = default!; public BlurryVisionOverlay() { IoCManager.InjectDependencies(this); - _blurryVisionXShader = _prototypeManager.Index("BlurryVisionX").InstanceUnique(); - _blurryVisionYShader = _prototypeManager.Index("BlurryVisionY").InstanceUnique(); + _dim = _prototypeManager.Index("Dim").InstanceUnique(); } protected override bool BeforeDraw(in OverlayDrawArgs args) @@ -51,18 +49,17 @@ namespace Content.Client.Eye.Blinding if (ScreenTexture == null) return; - _blurryVisionXShader?.SetParameter("SCREEN_TEXTURE", ScreenTexture); - _blurryVisionXShader?.SetParameter("BLUR_AMOUNT", (_blurryVisionComponent.Magnitude / 10)); - _blurryVisionYShader?.SetParameter("SCREEN_TEXTURE", ScreenTexture); - _blurryVisionYShader?.SetParameter("BLUR_AMOUNT", (_blurryVisionComponent.Magnitude / 10)); + var opacity = -(_blurryVisionComponent.Magnitude / 15) + 0.9f; + + _dim.SetParameter("DAMAGE_AMOUNT", opacity); var worldHandle = args.WorldHandle; var viewport = args.WorldBounds; + + worldHandle.UseShader(_dim); worldHandle.SetTransform(Matrix3.Identity); - worldHandle.UseShader(_blurryVisionXShader); - worldHandle.DrawRect(viewport, Color.White); - worldHandle.UseShader(_blurryVisionYShader); - worldHandle.DrawRect(viewport, Color.White); + worldHandle.DrawRect(viewport, Color.Black); + worldHandle.UseShader(null); } } } diff --git a/Resources/Prototypes/Shaders/shaders.yml b/Resources/Prototypes/Shaders/shaders.yml index 75b29b34fa..2f87278a93 100644 --- a/Resources/Prototypes/Shaders/shaders.yml +++ b/Resources/Prototypes/Shaders/shaders.yml @@ -65,3 +65,8 @@ id: BlurryVisionY kind: source path: "/Textures/Shaders/blurryy.swsl" + +- type: shader + id: Dim + kind: source + path: "/Textures/Shaders/dim.swsl" diff --git a/Resources/Textures/Shaders/dim.swsl b/Resources/Textures/Shaders/dim.swsl new file mode 100644 index 0000000000..19ae636193 --- /dev/null +++ b/Resources/Textures/Shaders/dim.swsl @@ -0,0 +1,12 @@ +uniform highp float DAMAGE_AMOUNT; + +void fragment() { + + // Higher exponent -> stronger blinding effect + + // Gradually mixes between the texture mix and a full-white texture, causing the "blinding" effect + highp vec4 mixed = mix(vec4(1.0, 1.0, 1.0, 1.0), vec4(1.0, 1.0, 1.0, 1.0), DAMAGE_AMOUNT); + + COLOR = vec4(mixed.rgb, DAMAGE_AMOUNT); +} +