Remove some explosion resolves (#13330)
This commit is contained in:
@@ -117,7 +117,7 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
var gridUid = grid.Owner;
|
||||
|
||||
var query = EntityManager.GetEntityQuery<AirtightComponent>();
|
||||
_explosionSystem.UpdateAirtightMap(gridId, pos, query);
|
||||
_explosionSystem.UpdateAirtightMap(gridId, pos, grid, query);
|
||||
// TODO make atmos system use query
|
||||
_atmosphereSystem.InvalidateTile(gridUid, pos);
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user