diff --git a/Content.Client/Atmos/EntitySystems/AtmosDebugOverlaySystem.cs b/Content.Client/Atmos/EntitySystems/AtmosDebugOverlaySystem.cs index b63d274bdca..32e82922418 100644 --- a/Content.Client/Atmos/EntitySystems/AtmosDebugOverlaySystem.cs +++ b/Content.Client/Atmos/EntitySystems/AtmosDebugOverlaySystem.cs @@ -10,7 +10,9 @@ namespace Content.Client.Atmos.EntitySystems [UsedImplicitly] internal sealed class AtmosDebugOverlaySystem : SharedAtmosDebugOverlaySystem { - public readonly Dictionary TileData = new(); + [Dependency] private readonly IOverlayManager _overlayManager = default!; + + public readonly Dictionary TileData = []; // Configuration set by debug commands and used by AtmosDebugOverlay { /// Value source for display @@ -25,6 +27,8 @@ namespace Content.Client.Atmos.EntitySystems public bool CfgCBM = false; // } + private AtmosDebugOverlay? _overlay; + public override void Initialize() { base.Initialize(); @@ -34,10 +38,6 @@ namespace Content.Client.Atmos.EntitySystems SubscribeNetworkEvent(HandleAtmosDebugOverlayDisableMessage); SubscribeLocalEvent(OnGridRemoved); - - var overlayManager = IoCManager.Resolve(); - if(!overlayManager.HasOverlay()) - overlayManager.AddOverlay(new AtmosDebugOverlay(this)); } private void OnGridRemoved(GridRemovalEvent ev) @@ -51,19 +51,25 @@ namespace Content.Client.Atmos.EntitySystems private void HandleAtmosDebugOverlayMessage(AtmosDebugOverlayMessage message) { TileData[GetEntity(message.GridId)] = message; + + if (_overlay is not null) + return; + + _overlay = new AtmosDebugOverlay(this); + _overlayManager.AddOverlay(_overlay); } private void HandleAtmosDebugOverlayDisableMessage(AtmosDebugOverlayDisableMessage ev) { TileData.Clear(); + RemoveOverlay(); } public override void Shutdown() { base.Shutdown(); - var overlayManager = IoCManager.Resolve(); - if (overlayManager.HasOverlay()) - overlayManager.RemoveOverlay(); + + RemoveOverlay(); } public void Reset(RoundRestartCleanupEvent ev) @@ -75,6 +81,15 @@ namespace Content.Client.Atmos.EntitySystems { return TileData.ContainsKey(gridId); } + + private void RemoveOverlay() + { + if (_overlay is null) + return; + + _overlayManager.RemoveOverlay(_overlay); + _overlay = null; + } } internal enum AtmosDebugOverlayMode : byte