#nullable enable using System.Collections.Generic; using Content.Server.Atmos.Piping.Components; using Content.Server.NodeContainer.NodeGroups; using Content.Shared.Atmos; using Robust.Shared.GameObjects; using Robust.Shared.Map; using Robust.Shared.Maths; namespace Content.Server.Atmos.Components { public interface IGridAtmosphereComponent : IComponent, IEnumerable { /// /// Whether this atmosphere is simulated or not. /// bool Simulated { get; } /// /// Number of times has been called. /// int UpdateCounter { get; } /// /// Control variable for equalization. /// long EqualizationQueueCycleControl { get; set; } /// /// Attemps to pry a tile. /// /// void PryTile(Vector2i indices); /// /// Burns a tile. /// /// void BurnTile(Vector2i gridIndices); /// /// Invalidates a coordinate to be revalidated again. /// Use this after changing a tile's gas contents, or when the tile becomes space, etc. /// /// void Invalidate(Vector2i indices); /// /// Attempts to fix a sudden vacuum by creating gas. /// void FixVacuum(Vector2i indices); /// /// Revalidates indices immediately. /// /// void UpdateAdjacentBits(Vector2i indices); /// /// Adds an active tile so it becomes processed every update until it becomes inactive. /// Also makes the tile excited. /// /// void AddActiveTile(TileAtmosphere tile); /// /// Removes an active tile and disposes of its . /// Use with caution. /// /// void RemoveActiveTile(TileAtmosphere tile, bool disposeGroup = true); /// /// Marks a tile as having a hotspot so it can be processed. /// /// void AddHotspotTile(TileAtmosphere tile); /// /// Removes a tile from the hotspot processing list. /// /// void RemoveHotspotTile(TileAtmosphere tile); /// /// Marks a tile as superconductive so it can be processed. /// /// void AddSuperconductivityTile(TileAtmosphere tile); /// /// Removes a tile from the superconductivity processing list. /// /// void RemoveSuperconductivityTile(TileAtmosphere tile); /// /// Marks a tile has having high pressure differences that need to be equalized. /// /// void AddHighPressureDelta(TileAtmosphere tile); /// /// Returns whether the tile in question is marked as having high pressure differences or not. /// /// /// bool HasHighPressureDelta(TileAtmosphere tile); /// /// Adds a excited group to be processed. /// /// void AddExcitedGroup(ExcitedGroup excitedGroup); /// /// Removes an excited group. /// /// void RemoveExcitedGroup(ExcitedGroup excitedGroup); /// /// Returns a tile. /// /// /// /// TileAtmosphere? GetTile(Vector2i indices, bool createSpace = true); /// /// Returns a tile. /// /// /// /// TileAtmosphere? GetTile(EntityCoordinates coordinates, bool createSpace = true); /// /// Returns if the tile in question is air-blocked. /// This could be due to a wall, an airlock, etc. /// /// /// /// /// bool IsAirBlocked(Vector2i indices, AtmosDirection direction); /// /// Returns if the tile in question is space. /// /// /// bool IsSpace(Vector2i indices); /// /// Returns the volume in liters for a number of cells/tiles. /// /// /// float GetVolumeForCells(int cellCount); void RepopulateTiles(); /// /// Returns a dictionary of adjacent TileAtmospheres. /// Dictionary GetAdjacentTiles(EntityCoordinates coordinates, bool includeAirBlocked = false); /// /// Returns a dictionary of adjacent TileAtmospheres. /// Dictionary GetAdjacentTiles(Vector2i indices, bool includeAirBlocked = false); void AddPipeNet(IPipeNet pipeNet); void RemovePipeNet(IPipeNet pipeNet); void AddAtmosDevice(AtmosDeviceComponent atmosDevice); void RemoveAtmosDevice(AtmosDeviceComponent atmosDevice); } }