Remove some explosion resolves (#13330)

This commit is contained in:
metalgearsloth
2023-01-05 12:52:38 +11:00
committed by GitHub
parent b450ce4cac
commit 1769807366
2 changed files with 13 additions and 12 deletions

View File

@@ -42,10 +42,10 @@ public sealed partial class ExplosionSystem : EntitySystem
// indices to this tile-data struct.
private Dictionary<EntityUid, Dictionary<Vector2i, TileData>> _airtightMap = new();
public void UpdateAirtightMap(EntityUid gridId, Vector2i tile, EntityQuery<AirtightComponent>? query = null)
public void UpdateAirtightMap(EntityUid gridId, Vector2i tile, MapGridComponent? grid = null, EntityQuery<AirtightComponent>? query = null)
{
if (_mapManager.TryGetGrid(gridId, out var grid))
UpdateAirtightMap(grid, tile, query);
if (Resolve(gridId, ref grid, false))
UpdateAirtightMap(gridId, grid, tile, query);
}
/// <summary>
@@ -58,25 +58,26 @@ public sealed partial class ExplosionSystem : EntitySystem
/// something like a normal and a reinforced windoor on the same tile. But given that this is a pretty rare
/// occurrence, I am fine with this.
/// </remarks>
public void UpdateAirtightMap(MapGridComponent grid, Vector2i tile, EntityQuery<AirtightComponent>? query = null)
public void UpdateAirtightMap(EntityUid gridId, MapGridComponent grid, Vector2i tile, EntityQuery<AirtightComponent>? query = null)
{
var tolerance = new float[_explosionTypes.Count];
var blockedDirections = AtmosDirection.Invalid;
if (!_airtightMap.ContainsKey(grid.Owner))
_airtightMap[grid.Owner] = new();
if (!_airtightMap.ContainsKey(gridId))
_airtightMap[gridId] = new();
query ??= EntityManager.GetEntityQuery<AirtightComponent>();
var damageQuery = EntityManager.GetEntityQuery<DamageableComponent>();
var destructibleQuery = EntityManager.GetEntityQuery<DestructibleComponent>();
var anchoredEnumerator = grid.GetAnchoredEntitiesEnumerator(tile);
foreach (var uid in grid.GetAnchoredEntities(tile))
while (anchoredEnumerator.MoveNext(out var uid))
{
if (!query.Value.TryGetComponent(uid, out var airtight) || !airtight.AirBlocked)
continue;
blockedDirections |= airtight.AirBlockedDirection;
var entityTolerances = GetExplosionTolerance(uid, damageQuery, destructibleQuery);
var entityTolerances = GetExplosionTolerance(uid.Value, damageQuery, destructibleQuery);
for (var i = 0; i < tolerance.Length; i++)
{
tolerance[i] = Math.Max(tolerance[i], entityTolerances[i]);
@@ -84,9 +85,9 @@ public sealed partial class ExplosionSystem : EntitySystem
}
if (blockedDirections != AtmosDirection.Invalid)
_airtightMap[grid.Owner][tile] = new(tolerance, blockedDirections);
_airtightMap[gridId][tile] = new(tolerance, blockedDirections);
else
_airtightMap[grid.Owner].Remove(tile);
_airtightMap[gridId].Remove(tile);
}
/// <summary>
@@ -104,7 +105,7 @@ public sealed partial class ExplosionSystem : EntitySystem
if (!_mapManager.TryGetGrid(transform.GridUid, out var grid))
return;
UpdateAirtightMap(grid, grid.CoordinatesToTile(transform.Coordinates));
UpdateAirtightMap(transform.GridUid.Value, grid, grid.CoordinatesToTile(transform.Coordinates));
}
/// <summary>