From 42078b4d51042878b9fa3d47eef1f2bd25b4a11c Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Fri, 23 Aug 2024 15:57:57 +1000 Subject: [PATCH] Fix AI vision occlusion (#31341) Forgot to do this, but how tf do doors work then. --- .../StationAi/StationAiVisionSystem.cs | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/Content.Shared/Silicons/StationAi/StationAiVisionSystem.cs b/Content.Shared/Silicons/StationAi/StationAiVisionSystem.cs index c1f5d98afd..33771cb963 100644 --- a/Content.Shared/Silicons/StationAi/StationAiVisionSystem.cs +++ b/Content.Shared/Silicons/StationAi/StationAiVisionSystem.cs @@ -95,12 +95,7 @@ public sealed class StationAiVisionSystem : EntitySystem // Get all other relevant tiles. while (tileEnumerator.MoveNext(out var tileRef)) { - var tileBounds = _lookup.GetLocalBounds(tileRef.GridIndices, grid.Comp.TileSize).Enlarged(-0.05f); - - _occluders.Clear(); - _lookup.GetLocalEntitiesIntersecting(grid.Owner, tileBounds, _occluders, LookupFlags.Static); - - if (_occluders.Count > 0) + if (IsOccluded(grid, tileRef.GridIndices)) { _opaque.Add(tileRef.GridIndices); } @@ -125,6 +120,25 @@ public sealed class StationAiVisionSystem : EntitySystem return TargetFound; } + private bool IsOccluded(Entity grid, Vector2i tile) + { + var tileBounds = _lookup.GetLocalBounds(tile, grid.Comp.TileSize).Enlarged(-0.05f); + _occluders.Clear(); + _lookup.GetLocalEntitiesIntersecting(grid.Owner, tileBounds, _occluders, LookupFlags.Static); + var anyOccluders = false; + + foreach (var occluder in _occluders) + { + if (!occluder.Comp.Enabled) + continue; + + anyOccluders = true; + break; + } + + return anyOccluders; + } + /// /// Gets a byond-equivalent for tiles in the specified worldAABB. /// @@ -160,12 +174,7 @@ public sealed class StationAiVisionSystem : EntitySystem while (tileEnumerator.MoveNext(out var tileRef)) { - var tileBounds = _lookup.GetLocalBounds(tileRef.GridIndices, grid.Comp.TileSize).Enlarged(-0.05f); - - _occluders.Clear(); - _lookup.GetLocalEntitiesIntersecting(grid.Owner, tileBounds, _occluders, LookupFlags.Static); - - if (_occluders.Count > 0) + if (IsOccluded(grid, tileRef.GridIndices)) { _opaque.Add(tileRef.GridIndices); } @@ -181,12 +190,7 @@ public sealed class StationAiVisionSystem : EntitySystem if (_viewportTiles.Contains(tileRef.GridIndices)) continue; - var tileBounds = _lookup.GetLocalBounds(tileRef.GridIndices, grid.Comp.TileSize).Enlarged(-0.05f); - - _occluders.Clear(); - _lookup.GetLocalEntitiesIntersecting(grid.Owner, tileBounds, _occluders, LookupFlags.Static); - - if (_occluders.Count > 0) + if (IsOccluded(grid, tileRef.GridIndices)) { _opaque.Add(tileRef.GridIndices); } -- 2.51.2