using Content.Shared.FeedbackSystem; using Robust.Shared.Prototypes; namespace Content.Client.FeedbackPopup; /// public sealed class ClientFeedbackManager : SharedFeedbackManager { /// /// A read-only set representing the currently displayed feedback popups. /// public override IReadOnlySet> DisplayedPopups => _displayedPopups; private readonly HashSet> _displayedPopups = []; public override void Initialize() { base.Initialize(); NetManager.RegisterNetMessage(ReceivedPopupMessage); NetManager.RegisterNetMessage(_ => Open()); } /// /// Opens the feedback popup window. /// public void Open() { InvokeDisplayedPopupsChanged(true); } /// public override void Display(List>? prototypes) { if (prototypes == null || !NetManager.IsClient) return; var count = _displayedPopups.Count; _displayedPopups.UnionWith(prototypes); InvokeDisplayedPopupsChanged(_displayedPopups.Count > count); } /// public override void Remove(List>? prototypes) { if (!NetManager.IsClient) return; if (prototypes == null) { _displayedPopups.Clear(); } else { _displayedPopups.ExceptWith(prototypes); } InvokeDisplayedPopupsChanged(false); } private void ReceivedPopupMessage(FeedbackPopupMessage message) { if (message.Remove) { Remove(message.FeedbackPrototypes); return; } Display(message.FeedbackPrototypes); } }