Improve atmos debug overlay (#22520)

This commit is contained in:
Leon Friedrich
2023-12-15 17:18:00 -05:00
committed by GitHub
parent 477327f952
commit 68765a4753
4 changed files with 300 additions and 243 deletions

View File

@@ -20,7 +20,7 @@ namespace Content.Server.Atmos.EntitySystems
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IConfigurationManager _configManager = default!;
[Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly MapSystem _mapSystem = default!;
/// <summary>
@@ -67,7 +67,7 @@ namespace Content.Server.Atmos.EntitySystems
}
var message = new AtmosDebugOverlayDisableMessage();
RaiseNetworkEvent(message, observer.ConnectedClient);
RaiseNetworkEvent(message, observer.Channel);
return true;
}
@@ -84,11 +84,9 @@ namespace Content.Server.Atmos.EntitySystems
RemoveObserver(observer);
return false;
}
else
{
AddObserver(observer);
return true;
}
AddObserver(observer);
return true;
}
private void OnPlayerStatusChanged(object? sender, SessionStatusEventArgs e)
@@ -99,19 +97,22 @@ namespace Content.Server.Atmos.EntitySystems
}
}
private AtmosDebugOverlayData ConvertTileToData(TileAtmosphere? tile, bool mapIsSpace)
private AtmosDebugOverlayData ConvertTileToData(TileAtmosphere? tile)
{
var gases = new float[Atmospherics.AdjustedNumberOfGases];
if (tile == null)
return default;
if (tile?.Air == null)
{
return new AtmosDebugOverlayData(Atmospherics.TCMB, gases, AtmosDirection.Invalid, tile?.LastPressureDirection ?? AtmosDirection.Invalid, 0, tile?.BlockedAirflow ?? AtmosDirection.Invalid, tile?.Space ?? mapIsSpace);
}
else
{
NumericsHelpers.Add(gases, tile.Air.Moles);
return new AtmosDebugOverlayData(tile.Air.Temperature, gases, tile.PressureDirection, tile.LastPressureDirection, tile.ExcitedGroup?.GetHashCode() ?? 0, tile.BlockedAirflow, tile.Space);
}
return new AtmosDebugOverlayData(
tile.GridIndices,
tile.Air?.Temperature ?? default,
tile.Air?.Moles,
tile.PressureDirection,
tile.LastPressureDirection,
tile.BlockedAirflow,
tile.ExcitedGroup?.GetHashCode(),
tile.Space,
false,
false);
}
public override void Update(float frameTime)
@@ -135,12 +136,9 @@ namespace Content.Server.Atmos.EntitySystems
if (session.AttachedEntity is not {Valid: true} entity)
continue;
var transform = EntityManager.GetComponent<TransformComponent>(entity);
var mapUid = transform.MapUid;
var mapIsSpace = _atmosphereSystem.IsTileSpace(null, mapUid, Vector2i.Zero);
var worldBounds = Box2.CenteredAround(transform.WorldPosition,
var transform = Transform(entity);
var pos = _transform.GetWorldPosition(transform);
var worldBounds = Box2.CenteredAround(pos,
new Vector2(LocalViewRange, LocalViewRange));
_grids.Clear();
@@ -157,8 +155,8 @@ namespace Content.Server.Atmos.EntitySystems
continue;
var entityTile = _mapSystem.GetTileRef(grid, grid, transform.Coordinates).GridIndices;
var baseTile = new Vector2i(entityTile.X - (LocalViewRange / 2), entityTile.Y - (LocalViewRange / 2));
var debugOverlayContent = new AtmosDebugOverlayData[LocalViewRange * LocalViewRange];
var baseTile = new Vector2i(entityTile.X - LocalViewRange / 2, entityTile.Y - LocalViewRange / 2);
var debugOverlayContent = new AtmosDebugOverlayData?[LocalViewRange * LocalViewRange];
var index = 0;
for (var y = 0; y < LocalViewRange; y++)
@@ -166,11 +164,13 @@ namespace Content.Server.Atmos.EntitySystems
for (var x = 0; x < LocalViewRange; x++)
{
var vector = new Vector2i(baseTile.X + x, baseTile.Y + y);
debugOverlayContent[index++] = ConvertTileToData(gridAtmos.Tiles.TryGetValue(vector, out var tile) ? tile : null, mapIsSpace);
gridAtmos.Tiles.TryGetValue(vector, out var tile);
debugOverlayContent[index++] = tile == null ? null : ConvertTileToData(tile);
}
}
RaiseNetworkEvent(new AtmosDebugOverlayMessage(GetNetEntity(grid), baseTile, debugOverlayContent), session.ConnectedClient);
var msg = new AtmosDebugOverlayMessage(GetNetEntity(grid), baseTile, debugOverlayContent);
RaiseNetworkEvent(msg, session.Channel);
}
}
}