using Content.Shared.CCVar; using Content.Shared.StatusIcon; using Content.Shared.StatusIcon.Components; using Robust.Client.Graphics; using Robust.Shared.Configuration; namespace Content.Client.StatusIcon; /// /// This handles rendering gathering and rendering icons on entities. /// public sealed class StatusIconSystem : SharedStatusIconSystem { [Dependency] private readonly IConfigurationManager _configuration = default!; [Dependency] private readonly IOverlayManager _overlay = default!; private bool _globalEnabled; private bool _localEnabled; /// public override void Initialize() { _configuration.OnValueChanged(CCVars.LocalStatusIconsEnabled, OnLocalStatusIconChanged, true); _configuration.OnValueChanged(CCVars.GlobalStatusIconsEnabled, OnGlobalStatusIconChanged, true); } public override void Shutdown() { base.Shutdown(); _configuration.UnsubValueChanged(CCVars.LocalStatusIconsEnabled, OnLocalStatusIconChanged); _configuration.UnsubValueChanged(CCVars.GlobalStatusIconsEnabled, OnGlobalStatusIconChanged); } private void OnLocalStatusIconChanged(bool obj) { _localEnabled = obj; UpdateOverlayVisible(); } private void OnGlobalStatusIconChanged(bool obj) { _globalEnabled = obj; UpdateOverlayVisible(); } private void UpdateOverlayVisible() { if (_overlay.RemoveOverlay()) return; if (_globalEnabled && _localEnabled) _overlay.AddOverlay(new StatusIconOverlay()); } public List GetStatusIcons(EntityUid uid) { if (!Exists(uid) || Terminating(uid)) return new(); var ev = new GetStatusIconsEvent(new()); RaiseLocalEvent(uid, ref ev); return ev.StatusIcons; } }