using Content.Shared.MachineLinking; using Robust.Client.GameObjects; using Robust.Client.UserInterface; using Robust.Shared.Timing; namespace Content.Client.MachineLinking.UI; public sealed class SignalTimerBoundUserInterface : BoundUserInterface { [ViewVariables] private SignalTimerWindow? _window; public SignalTimerBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { } protected override void Open() { base.Open(); _window = this.CreateWindow(); _window.OnStartTimer += StartTimer; _window.OnCurrentTextChanged += OnTextChanged; _window.OnCurrentDelayMinutesChanged += OnDelayChanged; _window.OnCurrentDelaySecondsChanged += OnDelayChanged; } public void StartTimer() { SendMessage(new SignalTimerStartMessage()); } private void OnTextChanged(string newText) { SendMessage(new SignalTimerTextChangedMessage(newText)); } private void OnDelayChanged(string newDelay) { if (_window == null) return; SendMessage(new SignalTimerDelayChangedMessage(_window.GetDelay())); } /// /// Update the UI state based on server-sent info /// /// protected override void UpdateState(BoundUserInterfaceState state) { base.UpdateState(state); if (_window == null || state is not SignalTimerBoundUserInterfaceState cast) return; _window.SetCurrentText(cast.CurrentText); _window.SetCurrentDelayMinutes(cast.CurrentDelayMinutes); _window.SetCurrentDelaySeconds(cast.CurrentDelaySeconds); _window.SetShowText(cast.ShowText); _window.SetTriggerTime(cast.TriggerTime); _window.SetTimerStarted(cast.TimerStarted); _window.SetHasAccess(cast.HasAccess); } }