using Content.Client.Alerts; using Content.Client.Gameplay; using Content.Client.UserInterface.Systems.Alerts.Widgets; using Content.Shared.Alert; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controllers; namespace Content.Client.UserInterface.Systems.Alerts; public sealed class AlertsUIController : UIController, IOnStateEntered, IOnSystemChanged { [UISystemDependency] private readonly ClientAlertsSystem? _alertsSystem = default; private AlertsUI? UI => UIManager.GetActiveUIWidgetOrNull(); private void OnAlertPressed(object? sender, AlertType e) { _alertsSystem?.AlertClicked(e); } private void SystemOnClearAlerts(object? sender, EventArgs e) { UI?.ClearAllControls(); } private void SystemOnSyncAlerts(object? sender, IReadOnlyDictionary e) { if (sender is ClientAlertsSystem system) UI?.SyncControls(system, system.AlertOrder, e); } public void OnSystemLoaded(ClientAlertsSystem system) { system.SyncAlerts += SystemOnSyncAlerts; system.ClearAlerts += SystemOnClearAlerts; } public void OnSystemUnloaded(ClientAlertsSystem system) { system.SyncAlerts -= SystemOnSyncAlerts; system.ClearAlerts -= SystemOnClearAlerts; } public void OnStateEntered(GameplayState state) { if (UI != null) { UI.AlertPressed += OnAlertPressed; } // initially populate the frame if system is available SyncAlerts(); } public void SyncAlerts() { var alerts = _alertsSystem?.ActiveAlerts; if (alerts != null) { SystemOnSyncAlerts(_alertsSystem, alerts); } } }