Fix AI vision occlusion (#31341)

Forgot to do this, but how tf do doors work then.
This commit is contained in:
metalgearsloth
2024-08-23 15:57:57 +10:00
committed by GitHub
parent 616601b996
commit 42078b4d51

View File

@@ -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<MapGridComponent> 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;
}
/// <summary>
/// Gets a byond-equivalent for tiles in the specified worldAABB.
/// </summary>
@@ -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);
}