using Content.Client.Overlays; using Content.Shared.Screech; using Robust.Client.Graphics; namespace Content.Client.Effects; /// /// This system ensures that does not use costly queries. /// public sealed partial class ScreechShockWaveSystem : EntitySystem { [Dependency] private IOverlayManager _overlayMan = default!; private readonly HashSet _registered = []; public override void Initialize() { SubscribeLocalEvent(OnScreechShockWaveStartup); SubscribeLocalEvent(OnScreechShockWaveRemoved); } private void OnScreechShockWaveStartup(Entity ent, ref ComponentStartup args) { var overlay = _overlayMan.GetOverlay(); // we must only pass here once if (!_registered.Add(ent.Owner)) return; overlay.Register(ent); } private void OnScreechShockWaveRemoved(Entity ent, ref ComponentRemove args) { _registered.Remove(ent.Owner); } }