]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix water postshader (#28130)
authormetalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Sat, 25 May 2024 20:23:34 +0000 (06:23 +1000)
committerGitHub <noreply@github.com>
Sat, 25 May 2024 20:23:34 +0000 (16:23 -0400)
Content.Client/Movement/Systems/FloorOcclusionSystem.cs
Content.Shared/Movement/Components/FloorOcclusionComponent.cs
Content.Shared/Movement/Systems/SharedFloorOcclusionSystem.cs

index 5c75f25ca2d90623805b9a56fa74d41a3e47ee7a..44573f8e084480baf5a19e8660134b60df672af1 100644 (file)
@@ -10,51 +10,56 @@ public sealed class FloorOcclusionSystem : SharedFloorOcclusionSystem
 {
     [Dependency] private readonly IPrototypeManager _proto = default!;
 
+    private EntityQuery<SpriteComponent> _spriteQuery;
+
     public override void Initialize()
     {
         base.Initialize();
+
+        _spriteQuery = GetEntityQuery<SpriteComponent>();
+
         SubscribeLocalEvent<FloorOcclusionComponent, ComponentStartup>(OnOcclusionStartup);
+        SubscribeLocalEvent<FloorOcclusionComponent, ComponentShutdown>(OnOcclusionShutdown);
         SubscribeLocalEvent<FloorOcclusionComponent, AfterAutoHandleStateEvent>(OnOcclusionAuto);
     }
 
-    private void OnOcclusionAuto(EntityUid uid, FloorOcclusionComponent component, ref AfterAutoHandleStateEvent args)
+    private void OnOcclusionAuto(Entity<FloorOcclusionComponent> ent, ref AfterAutoHandleStateEvent args)
     {
-        SetEnabled(uid, component, component.Enabled);
+        SetShader(ent.Owner, ent.Comp.Enabled);
     }
 
-    private void OnOcclusionStartup(EntityUid uid, FloorOcclusionComponent component, ComponentStartup args)
+    private void OnOcclusionStartup(Entity<FloorOcclusionComponent> ent, ref ComponentStartup args)
     {
-        if (component.Enabled && TryComp<SpriteComponent>(uid, out var sprite))
-            SetShader(sprite, true);
+        SetShader(ent.Owner, ent.Comp.Enabled);
     }
 
-    protected override void SetEnabled(EntityUid uid, FloorOcclusionComponent component, bool enabled)
+    private void OnOcclusionShutdown(Entity<FloorOcclusionComponent> ent, ref ComponentShutdown args)
     {
-        if (component.Enabled == enabled)
-            return;
-
-        base.SetEnabled(uid, component, enabled);
-
-        if (!TryComp<SpriteComponent>(uid, out var sprite))
-            return;
+        SetShader(ent.Owner, false);
+    }
 
-        SetShader(sprite, enabled);
+    protected override void SetEnabled(Entity<FloorOcclusionComponent> entity)
+    {
+        SetShader(entity.Owner, entity.Comp.Enabled);
     }
 
-    private void SetShader(SpriteComponent sprite, bool enabled)
+    private void SetShader(Entity<SpriteComponent?> sprite, bool enabled)
     {
+        if (!_spriteQuery.Resolve(sprite.Owner, ref sprite.Comp, false))
+            return;
+
         var shader = _proto.Index<ShaderPrototype>("HorizontalCut").Instance();
 
-        if (sprite.PostShader is not null && sprite.PostShader != shader)
+        if (sprite.Comp.PostShader is not null && sprite.Comp.PostShader != shader)
             return;
 
         if (enabled)
         {
-            sprite.PostShader = shader;
+            sprite.Comp.PostShader = shader;
         }
         else
         {
-            sprite.PostShader = null;
+            sprite.Comp.PostShader = null;
         }
     }
 }
index aa9a1ced5521be51177048e9fc08227bff40df10..5d412f694a0c5f7db63c7568bdde49f28732bc1b 100644 (file)
@@ -8,12 +8,9 @@ namespace Content.Shared.Movement.Components;
 [RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)]
 public sealed partial class FloorOcclusionComponent : Component
 {
-    /// <summary>
-    /// Is the shader currently enabled.
-    /// </summary>
-    [ViewVariables(VVAccess.ReadWrite), DataField("enabled"), AutoNetworkedField]
-    public bool Enabled;
+    [ViewVariables]
+    public bool Enabled => Colliding.Count > 0;
 
-    [DataField("colliding")]
+    [DataField, AutoNetworkedField]
     public List<EntityUid> Colliding = new();
 }
index 9d27ea42c6394fdb467b2dd87f01919474866603..6b7023a1c64d0369ec3f1bd5cd6fdf5db94c17b7 100644 (file)
@@ -15,39 +15,37 @@ public abstract class SharedFloorOcclusionSystem : EntitySystem
         SubscribeLocalEvent<FloorOccluderComponent, EndCollideEvent>(OnEndCollide);
     }
 
-    private void OnStartCollide(EntityUid uid, FloorOccluderComponent component, ref StartCollideEvent args)
+    private void OnStartCollide(Entity<FloorOccluderComponent> entity, ref StartCollideEvent args)
     {
         var other = args.OtherEntity;
 
         if (!TryComp<FloorOcclusionComponent>(other, out var occlusion) ||
-            occlusion.Colliding.Contains(uid))
+            occlusion.Colliding.Contains(entity.Owner))
         {
             return;
         }
 
-        SetEnabled(other, occlusion, true);
-        occlusion.Colliding.Add(uid);
+        occlusion.Colliding.Add(entity.Owner);
+        Dirty(other, occlusion);
+        SetEnabled((other, occlusion));
     }
 
-    private void OnEndCollide(EntityUid uid, FloorOccluderComponent component, ref EndCollideEvent args)
+    private void OnEndCollide(Entity<FloorOccluderComponent> entity, ref EndCollideEvent args)
     {
         var other = args.OtherEntity;
 
         if (!TryComp<FloorOcclusionComponent>(other, out var occlusion))
             return;
 
-        occlusion.Colliding.Remove(uid);
+        if (!occlusion.Colliding.Remove(entity.Owner))
+            return;
 
-        if (occlusion.Colliding.Count == 0)
-            SetEnabled(other, occlusion, false);
+        Dirty(other, occlusion);
+        SetEnabled((other, occlusion));
     }
 
-    protected virtual void SetEnabled(EntityUid uid, FloorOcclusionComponent component, bool enabled)
+    protected virtual void SetEnabled(Entity<FloorOcclusionComponent> entity)
     {
-        if (component.Enabled == enabled)
-            return;
 
-        component.Enabled = enabled;
-        Dirty(uid, component);
     }
 }