]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix: Blindness radius when zooming (#23130)
authorTomás Alves <tomasalves35@gmail.com>
Fri, 29 Dec 2023 01:38:08 +0000 (01:38 +0000)
committerGitHub <noreply@github.com>
Fri, 29 Dec 2023 01:38:08 +0000 (20:38 -0500)
* Fix Zoom while Blind

* Fix Zoom while Blind (ContentEyeComponent->EyeComponent)

Content.Client/Eye/Blinding/BlindOverlay.cs
Resources/Textures/Shaders/circle_mask.swsl

index 83c6cd23e64a90fb616cf5477721a8a81b70457f..1730db59c6301d64927f2e5dc664a77038e2db68 100644 (file)
@@ -1,9 +1,12 @@
+using Content.Client.Movement.Systems;
 using Robust.Client.Graphics;
 using Robust.Client.Player;
 using Robust.Shared.Enums;
 using Robust.Shared.Prototypes;
 using Content.Shared.Eye.Blinding;
 using Content.Shared.Eye.Blinding.Components;
+using Content.Shared.Movement.Components;
+using Content.Shared.Movement.Systems;
 
 namespace Content.Client.Eye.Blinding
 {
@@ -11,9 +14,8 @@ namespace Content.Client.Eye.Blinding
     {
         [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
         [Dependency] private readonly IPlayerManager _playerManager = default!;
-        [Dependency] IEntityManager _entityManager = default!;
-        [Dependency] ILightManager _lightManager = default!;
-
+        [Dependency] private readonly IEntityManager _entityManager = default!;
+        [Dependency] private readonly ILightManager _lightManager = default!;
 
         public override bool RequestScreenTexture => true;
         public override OverlaySpace Space => OverlaySpace.WorldSpace;
@@ -30,13 +32,13 @@ namespace Content.Client.Eye.Blinding
         }
         protected override bool BeforeDraw(in OverlayDrawArgs args)
         {
-            if (!_entityManager.TryGetComponent(_playerManager.LocalPlayer?.ControlledEntity, out EyeComponent? eyeComp))
+            if (!_entityManager.TryGetComponent(_playerManager.LocalSession?.AttachedEntity, out EyeComponent? eyeComp))
                 return false;
 
             if (args.Viewport.Eye != eyeComp.Eye)
                 return false;
 
-            var playerEntity = _playerManager.LocalPlayer?.ControlledEntity;
+            var playerEntity = _playerManager.LocalSession?.AttachedEntity;
 
             if (playerEntity == null)
                 return false;
@@ -64,6 +66,11 @@ namespace Content.Client.Eye.Blinding
             if (ScreenTexture == null)
                 return;
 
+            var playerEntity = _playerManager.LocalSession?.AttachedEntity;
+
+            if (playerEntity == null)
+                return;
+
             if (!_blindableComponent.GraceFrame)
             {
                 _blindableComponent.LightSetup = true; // Ok we touched the lights
@@ -73,6 +80,10 @@ namespace Content.Client.Eye.Blinding
                 _blindableComponent.GraceFrame = false;
             }
 
+            if (_entityManager.TryGetComponent<EyeComponent>(playerEntity, out var content))
+            {
+                _circleMaskShader?.SetParameter("ZOOM", content.Zoom.X);
+            }
             _greyscaleShader?.SetParameter("SCREEN_TEXTURE", ScreenTexture);
 
             var worldHandle = args.WorldHandle;
index dc38b360cc6725a3ebdc32438fa7cab8eb76fc9d..a28d4a9a21c8e7fd38853cfdc8db1ee687731d32 100644 (file)
@@ -1,3 +1,5 @@
+uniform highp float ZOOM;
+
 highp vec4 circle(in highp vec2 uv, in highp vec2 pos, highp float rad, in highp vec3 color) {
     highp float d = length(pos - uv) - rad;
     highp float t = clamp(d, 0.0, 1.0);
@@ -7,10 +9,10 @@ void fragment(){
        highp vec2 uv = FRAGCOORD.xy;
     highp vec2 res_xy = vec2(1.0/SCREEN_PIXEL_SIZE.x, 1.0/SCREEN_PIXEL_SIZE.y);
     highp vec2 center = res_xy*0.5;
-    highp float radius = 0.05 * res_xy.y;
+    highp float radius = 0.05 * res_xy.y / ZOOM;
 
     highp vec4 layer1 = vec4(vec3(0.0), 0.0);
-    
+
     highp vec4 layer2 = circle(uv, center, radius, vec3(0.0));
 
     COLOR = mix(layer1, layer2, layer2.a);