diff --git a/Content.IntegrationTests/DummyGameTicker.cs b/Content.IntegrationTests/DummyGameTicker.cs index 7ce49d81b3..c15a3482b4 100644 --- a/Content.IntegrationTests/DummyGameTicker.cs +++ b/Content.IntegrationTests/DummyGameTicker.cs @@ -14,6 +14,9 @@ namespace Content.IntegrationTests { public GameRunLevel RunLevel { get; } = GameRunLevel.InRound; + public MapId DefaultMap { get; } = MapId.Nullspace; + public GridId DefaultGridId { get; } = GridId.Invalid; + public event Action OnRunLevelChanged { add { } diff --git a/Content.Server/GameTicking/GameTicker.cs b/Content.Server/GameTicking/GameTicker.cs index ad39d3d26d..bd54b0d1dd 100644 --- a/Content.Server/GameTicking/GameTicker.cs +++ b/Content.Server/GameTicking/GameTicker.cs @@ -99,6 +99,10 @@ namespace Content.Server.GameTicking [ViewVariables] public bool Paused { get; private set; } + + [ViewVariables] public MapId DefaultMap { get; private set; } + + [ViewVariables] public GridId DefaultGridId { get; private set; } [ViewVariables] public GameRunLevel RunLevel @@ -687,10 +691,11 @@ namespace Content.Server.GameTicking private void _preRoundSetup() { - var newMapId = _mapManager.CreateMap(); + DefaultMap = _mapManager.CreateMap(); var startTime = _gameTiming.RealTime; - var grid = _mapLoader.LoadBlueprint(newMapId, MapFile); - + var grid = _mapLoader.LoadBlueprint(DefaultMap, MapFile); + + DefaultGridId = grid.Index; _spawnPoint = grid.ToCoordinates(); var timeSpan = _gameTiming.RealTime - startTime; diff --git a/Content.Server/Interfaces/GameTicking/IGameTicker.cs b/Content.Server/Interfaces/GameTicking/IGameTicker.cs index 36d9fcac7a..559c6a6497 100644 --- a/Content.Server/Interfaces/GameTicking/IGameTicker.cs +++ b/Content.Server/Interfaces/GameTicking/IGameTicker.cs @@ -15,6 +15,16 @@ namespace Content.Server.Interfaces.GameTicking public interface IGameTicker { GameRunLevel RunLevel { get; } + + /// + /// The map loaded by the GameTicker on round start. + /// + MapId DefaultMap { get; } + + /// + /// The GridId loaded by the GameTicker on round start. + /// + GridId DefaultGridId { get; } event Action OnRunLevelChanged; event Action OnRuleAdded; diff --git a/Content.Server/StationEvents/RadiationStorm.cs b/Content.Server/StationEvents/RadiationStorm.cs index c57ce8bcd0..e3d1027887 100644 --- a/Content.Server/StationEvents/RadiationStorm.cs +++ b/Content.Server/StationEvents/RadiationStorm.cs @@ -1,9 +1,11 @@ using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.StationEvents; +using Content.Server.Interfaces.GameTicking; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.Utility; using JetBrains.Annotations; using Robust.Server.GameObjects.EntitySystems; +using Robust.Server.Interfaces.Timing; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; @@ -104,12 +106,14 @@ namespace Content.Server.StationEvents if (_timeUntilPulse <= 0.0f) { - // TODO: Probably rate-limit this for small grids (e.g. no more than 25% covered) - foreach (var grid in _mapManager.GetAllGrids()) - { - if (grid.IsDefaultGrid) continue; - SpawnPulse(grid); - } + var pauseManager = IoCManager.Resolve(); + var gameTicker = IoCManager.Resolve(); + var defaultGrid = IoCManager.Resolve().GetGrid(gameTicker.DefaultGridId); + + if (pauseManager.IsGridPaused(defaultGrid)) + return; + + SpawnPulse(defaultGrid); } }