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);
}
}