using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; using Content.Shared._NF.CryoSleep.Events; namespace Content.Client._NF.CryoSleep; [GenerateTypedNameReferences] public sealed partial class CryosleepWakeupWindow : DefaultWindow, IEntityEventSubscriber { [Dependency] private readonly EntityManager _entityManager = default!; public CryosleepWakeupWindow() { RobustXamlLoader.Load(this); IoCManager.InjectDependencies(this); _entityManager.EventBus.SubscribeEvent(EventSource.Network, this, OnWakeupResponse); DenyButton.OnPressed += _ => Close(); AcceptButton.OnPressed += _ => OnAccept(); } protected override void Opened() { Label.SetMessage(Loc.GetString("cryo-wakeup-window-rules")); DenyButton.Disabled = false; AcceptButton.Disabled = false; } private void OnAccept() { var message = new WakeupRequestMessage(); _entityManager.EntityNetManager?.SendSystemNetworkMessage(message); // Disable the buttons to make the user wait for a response AcceptButton.Disabled = true; DenyButton.Disabled = true; } private void OnWakeupResponse(WakeupRequestMessage.Response response) { if (response.Status == ReturnToBodyStatus.Success) { Close(); return; } // Failure DenyButton.Disabled = false; if (response.Status == ReturnToBodyStatus.Occupied) Label.SetMessage(Loc.GetString("cryo-wakeup-result-occupied")); else if (response.Status == ReturnToBodyStatus.NoCryopodAvailable) Label.SetMessage(Loc.GetString("cryo-wakeup-result-no-cryopod")); else if (response.Status == ReturnToBodyStatus.BodyMissing) Label.SetMessage(Loc.GetString("cryo-wakeup-result-no-body")); else if (response.Status == ReturnToBodyStatus.Disabled) Label.SetMessage(Loc.GetString("cryo-wakeup-result-disabled")); } }