using Content.Shared.CCVar; using Robust.Client.Graphics; using Robust.Shared.Configuration; namespace Content.Client.Light.EntitySystems; public sealed class PlanetLightSystem : EntitySystem { [Dependency] private readonly IConfigurationManager _cfgManager = default!; [Dependency] private readonly IOverlayManager _overlayMan = default!; /// /// Enables / disables the ambient occlusion overlay. /// public bool AmbientOcclusion { get => _ambientOcclusion; set { if (_ambientOcclusion == value) return; _ambientOcclusion = value; if (value) { _overlayMan.AddOverlay(new AmbientOcclusionOverlay()); } else { _overlayMan.RemoveOverlay(); } } } private bool _ambientOcclusion; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnClearColor); _cfgManager.OnValueChanged(CCVars.AmbientOcclusion, val => { AmbientOcclusion = val; }, true); _overlayMan.AddOverlay(new BeforeLightTargetOverlay()); _overlayMan.AddOverlay(new RoofOverlay(EntityManager)); _overlayMan.AddOverlay(new TileEmissionOverlay(EntityManager)); _overlayMan.AddOverlay(new LightBlurOverlay()); _overlayMan.AddOverlay(new SunShadowOverlay()); _overlayMan.AddOverlay(new AfterLightTargetOverlay()); } private void OnClearColor(ref GetClearColorEvent ev) { ev.Color = Color.Transparent; } public override void Shutdown() { base.Shutdown(); _overlayMan.RemoveOverlay(); _overlayMan.RemoveOverlay(); _overlayMan.RemoveOverlay(); _overlayMan.RemoveOverlay(); _overlayMan.RemoveOverlay(); _overlayMan.RemoveOverlay(); } }