using Content.Client.Atmos.Overlays; using Content.Shared.CCVar; using JetBrains.Annotations; using Robust.Client.Graphics; using Robust.Shared.Configuration; namespace Content.Client.Atmos.EntitySystems; /// /// System responsible for rendering vacuum effects using . /// [UsedImplicitly] public sealed partial class GasTileVacuumOverlaySystem : EntitySystem { [Dependency] private IOverlayManager _overlayMan = default!; [Dependency] private IConfigurationManager _cfgManager = default!; private GasTileVacuumOverlay? _gasTileVacuumOverlay; private bool _vacuumOverlayEnabledDueToCvar; // due to CVar being enabled private bool _vacuumOverlayEnabledIntensity; // due to non zero intensity in setting public override void Initialize() { base.Initialize(); _cfgManager.OnValueChanged(CCVars.VacuumOverlay, OnVacuumOverlayChanged, true); _cfgManager.OnValueChanged(CCVars.VacuumOverlayIntensity, OnVacuumOverlayIntensityChanged, true); } public override void Shutdown() { base.Shutdown(); _cfgManager.UnsubValueChanged(CCVars.VacuumOverlay, OnVacuumOverlayChanged); _cfgManager.UnsubValueChanged(CCVars.VacuumOverlayIntensity, OnVacuumOverlayIntensityChanged); _overlayMan.RemoveOverlay(); } private void OnVacuumOverlayChanged(bool enabled) { _vacuumOverlayEnabledDueToCvar = enabled; UpdateOverlay(); } private void OnVacuumOverlayIntensityChanged(float intensity) { _vacuumOverlayEnabledIntensity = intensity > 0f; UpdateOverlay(); } private void UpdateOverlay() { if (_vacuumOverlayEnabledDueToCvar && _vacuumOverlayEnabledIntensity) { _gasTileVacuumOverlay ??= new GasTileVacuumOverlay(); if (!_overlayMan.HasOverlay()) _overlayMan.AddOverlay(_gasTileVacuumOverlay); } else { _overlayMan.RemoveOverlay(); } } }