using Content.Shared.Explosion; using Robust.Server.GameObjects; using Robust.Shared.GameStates; using Robust.Shared.Map; namespace Content.Server.Explosion.EntitySystems; // This part of the system handled send visual / overlay data to clients. public sealed partial class ExplosionSystem : EntitySystem { public void InitVisuals() { SubscribeLocalEvent(OnGetState); } private void OnGetState(EntityUid uid, ExplosionVisualsComponent component, ref ComponentGetState args) { args.State = new ExplosionVisualsState( component.Epicenter, component.ExplosionType, component.Intensity, component.SpaceTiles, component.Tiles, component.SpaceMatrix, component.SpaceTileSize); } /// /// Constructor for the shared using the server-exclusive explosion classes. /// private EntityUid CreateExplosionVisualEntity(MapCoordinates epicenter, string prototype, Matrix3 spaceMatrix, ExplosionSpaceTileFlood? spaceData, IEnumerable gridData, List iterationIntensity) { var explosionEntity = Spawn(null, MapCoordinates.Nullspace); var comp = AddComp(explosionEntity); foreach (var grid in gridData) { comp.Tiles.Add(grid.Grid.Owner, grid.TileLists); } comp.SpaceTiles = spaceData?.TileLists; comp.Epicenter = epicenter; comp.ExplosionType = prototype; comp.Intensity = iterationIntensity; comp.SpaceMatrix = spaceMatrix; comp.SpaceTileSize = spaceData?.TileSize ?? DefaultTileSize; Dirty(comp); // Light, sound & visuals may extend well beyond normal PVS range. In principle, this should probably still be // restricted to something like the same map, but whatever. _pvsSys.AddGlobalOverride(explosionEntity); var appearance = AddComp(explosionEntity); _appearance.SetData(explosionEntity, ExplosionAppearanceData.Progress, 1, appearance); return explosionEntity; } }