Don't spawn rad pulses on paused grids (#2121)

* Don't spawn rad pulses on paused grids

* Only radiate default grid

Co-authored-by: Metal Gear Sloth <metalgearsloth@gmail.com>
This commit is contained in:
metalgearsloth
2020-10-09 23:47:56 +11:00
committed by GitHub
parent 2c39656c9e
commit f9ab5f6a82
4 changed files with 31 additions and 9 deletions

View File

@@ -14,6 +14,9 @@ namespace Content.IntegrationTests
{ {
public GameRunLevel RunLevel { get; } = GameRunLevel.InRound; public GameRunLevel RunLevel { get; } = GameRunLevel.InRound;
public MapId DefaultMap { get; } = MapId.Nullspace;
public GridId DefaultGridId { get; } = GridId.Invalid;
public event Action<GameRunLevelChangedEventArgs> OnRunLevelChanged public event Action<GameRunLevelChangedEventArgs> OnRunLevelChanged
{ {
add { } add { }

View File

@@ -100,6 +100,10 @@ namespace Content.Server.GameTicking
[ViewVariables] public bool Paused { get; private set; } [ViewVariables] public bool Paused { get; private set; }
[ViewVariables] public MapId DefaultMap { get; private set; }
[ViewVariables] public GridId DefaultGridId { get; private set; }
[ViewVariables] [ViewVariables]
public GameRunLevel RunLevel public GameRunLevel RunLevel
{ {
@@ -687,10 +691,11 @@ namespace Content.Server.GameTicking
private void _preRoundSetup() private void _preRoundSetup()
{ {
var newMapId = _mapManager.CreateMap(); DefaultMap = _mapManager.CreateMap();
var startTime = _gameTiming.RealTime; var startTime = _gameTiming.RealTime;
var grid = _mapLoader.LoadBlueprint(newMapId, MapFile); var grid = _mapLoader.LoadBlueprint(DefaultMap, MapFile);
DefaultGridId = grid.Index;
_spawnPoint = grid.ToCoordinates(); _spawnPoint = grid.ToCoordinates();
var timeSpan = _gameTiming.RealTime - startTime; var timeSpan = _gameTiming.RealTime - startTime;

View File

@@ -16,6 +16,16 @@ namespace Content.Server.Interfaces.GameTicking
{ {
GameRunLevel RunLevel { get; } GameRunLevel RunLevel { get; }
/// <summary>
/// The map loaded by the GameTicker on round start.
/// </summary>
MapId DefaultMap { get; }
/// <summary>
/// The GridId loaded by the GameTicker on round start.
/// </summary>
GridId DefaultGridId { get; }
event Action<GameRunLevelChangedEventArgs> OnRunLevelChanged; event Action<GameRunLevelChangedEventArgs> OnRunLevelChanged;
event Action<GameRuleAddedEventArgs> OnRuleAdded; event Action<GameRuleAddedEventArgs> OnRuleAdded;

View File

@@ -1,9 +1,11 @@
using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Mobs;
using Content.Server.GameObjects.Components.StationEvents; using Content.Server.GameObjects.Components.StationEvents;
using Content.Server.Interfaces.GameTicking;
using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Mobs;
using Content.Shared.Utility; using Content.Shared.Utility;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Server.GameObjects.EntitySystems; using Robust.Server.GameObjects.EntitySystems;
using Robust.Server.Interfaces.Timing;
using Robust.Shared.GameObjects.Systems; using Robust.Shared.GameObjects.Systems;
using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.GameObjects;
using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Map;
@@ -104,12 +106,14 @@ namespace Content.Server.StationEvents
if (_timeUntilPulse <= 0.0f) if (_timeUntilPulse <= 0.0f)
{ {
// TODO: Probably rate-limit this for small grids (e.g. no more than 25% covered) var pauseManager = IoCManager.Resolve<IPauseManager>();
foreach (var grid in _mapManager.GetAllGrids()) var gameTicker = IoCManager.Resolve<IGameTicker>();
{ var defaultGrid = IoCManager.Resolve<IMapManager>().GetGrid(gameTicker.DefaultGridId);
if (grid.IsDefaultGrid) continue;
SpawnPulse(grid); if (pauseManager.IsGridPaused(defaultGrid))
} return;
SpawnPulse(defaultGrid);
} }
} }